Introdução
Rodar o Container em background
docker container run --name xuxa --publish 80:80 nginx --detach
Ver containers
docker container ls -a
Parar
docker stop xuxa
Remover container
docker container rm -f 6666
Processos no container
docker top xuxa
Variável de ambiente
docker container run -d -p 3306:3306 --name db -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566823489333_Screenshot%252Bfrom%252B2019-08-26%252B09-44-39.png%3Ftable%3Dblock%26id%3Dc521dfe0-b83c-4a2a-a307-175d1aeee365%26cache%3Dv2&w=3840&q=75)
Ver o que o tá rolando
-it para entrar no container
docker container run -it --name proxy nginx bash
exec para container existente
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566826151456_Screenshot%252Bfrom%252B2019-08-26%252B10-29-02.png%3Ftable%3Dblock%26id%3D78331159-f2f2-4e4f-9475-774df6fab8ee%26cache%3Dv2&w=3840&q=75)
Saber em qual porta está o meu container
docker container port xuxa
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566828180550_Screenshot%252Bfrom%252B2019-08-26%252B11-02-51.png%3Ftable%3Dblock%26id%3D37f47314-0d3a-4fd1-a341-e27f1eeee870%26cache%3Dv2&w=3840&q=75)
Pelo terminal
pgcli -h localhost -p 5432 -U rio_perform rio_perform
Apagar tudo
docker kill $(docker ps -q) && docker rm $(docker ps -a -q) && docker volume rm -f $(docker volume ls -f dangling=true -q)
Images
Build atráves de um NGInx oficial. Vai subir o NG, com o index.html da pasta raíz que está subindo
Dockerfile
FROM nginx:latest WORKDIR /usr/share/nginx/html copy index.html index.html docker image build -t nginx-with-html . docker run nginx-with-html -d
Dockerfile
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566912083073_Screenshot%252Bfrom%252B2019-08-27%252B10-21-01.png%3Ftable%3Dblock%26id%3D30fbccf1-de8e-4a42-b74a-a54f9f637a22%26cache%3Dv2&w=3840&q=75)
Ele apenas vai rodar o npm i se mudar alguma coisa no package.json. Assim se alterar algo no resource do projeto, eu não preciso rodar o npm install de novo
Pelo que eu consegui tirar até aqui, o Dockerfile não tem —watch
network
Existem 3 tripos
- host: acesso a geral
- bridge: acesso apenas entre containers
- null: sem acesso ao mundo
Base nelas que você sobe a máquina, sendo um exemplo:
docker run -rm --net none alpine ash -c "ifconfig"
Vai subir um alpine, depois remover ele (-rm) na rede (-net) null. Ou seja sem acesso ao mundo. Primeiro comando que vai rodar vai ser no bash do ash (mais leve) o comando (-c) “ifconfig”
docker-compose
Quanto usando docker-compose, os serviços dentro dele tem livre acesso entre eles. Não precisa abrir porta entre eles
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566916578583_Screenshot%252Bfrom%252B2019-08-27%252B11-36-10.png%3Ftable%3Dblock%26id%3D8610d509-a698-400e-ac01-1c844dc34baa%26cache%3Dv2&w=3840&q=75)
O redis-server existe como host, dentro da rede do Docker. A porta é o padrão do Redis
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566916611672_Screenshot%252Bfrom%252B2019-08-27%252B11-36-44.png%3Ftable%3Dblock%26id%3D3f81b9a4-8920-49e2-b841-68abaa020b95%26cache%3Dv2&w=3840&q=75)
Host da imagem acima existe, por aqui especifiquei o nome do host.Que é o nome do serviço
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566916666008_Screenshot%252Bfrom%252B2019-08-27%252B11-37-38.png%3Ftable%3Dblock%26id%3Dad486e05-3d04-43e1-8c66-58b648a82680%26cache%3Dv2&w=3840&q=75)
Por nível de informação, este é o meu Dockerfile
Ainda precisa fazer o rebuild quando alterar algo com:
docker-compose up -d --build
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1566924069022_Screenshot%252Bfrom%252B2019-08-27%252B13-40-29.png%3Ftable%3Dblock%26id%3D1520d6ff-6ecf-4378-a453-bdf0635e03b8%26cache%3Dv2&w=3840&q=75)
Cada serviço pode ter um restart que possui essas políticas
Para ver os processos envolvendo o seu docker-compose, basta usar o (deve estar no diretório do docker-compose):
docker-compose ps
Exemplo
version: '3' services: db: image: mongo:3.4 backend: image: node:8.1 volumes: - ./backend:/backend ports: - 3000:3000 comand: bash -c "cd /backend && npm i && node app" frontend: image: nginx:1.13 volumes: - ./frontend:/usr/share/nxinx/html/ ports: - 80:80
Attatch dentro de docker-compose
docker-compose exec db psql -U postgress -d email_sender -c 'select * from email'
Local Dev.
Por padrão o Docker não têm watch mode, o que você copia é copiado uma vez só e acabou. Porém existe uma solução, para fazer o que está na imagem abaixo:
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1567002690831_Screenshot%252Bfrom%252B2019-08-28%252B11-31-10.png%3Ftable%3Dblock%26id%3D3e1651db-f1b3-4b74-96f8-941c6de8a02a%26cache%3Dv2&w=3840&q=75)
![notion image](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fpaper-attachments.dropbox.com%252Fs_DE12F08D6A2A2EC8E9F8809BFB4A65C0125B35203BBF3288733D9EE90EA12F88_1567002826899_Screenshot%252Bfrom%252B2019-08-28%252B11-33-35.png%3Ftable%3Dblock%26id%3D5dfdfacc-740a-40aa-b523-ebc9c60a0d5d%26cache%3Dv2&w=3840&q=75)
Não deve ser mais utilizado o COPY (não precisar remover o COPY do Dockerfile), mas sim o -v para VOLUMES. Que faz o que a imagem anterior apresenta
O comando
-v /app/node_modules
diz para o segundo comando de volumes não tentar ref. o workspace do usuário fora do container, mas sim dentro do container. Já vai estar lá o node_module
porque o layer onde foi baixado já está lá, é o mesmo arquivo usado à cima (aquele amarelo)