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
Ver o que o tá rolando
-it para entrar no container
docker container run -it --name proxy nginx bash
exec para container existente
Saber em qual porta está o meu container
docker container port xuxa
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
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
O redis-server existe como host, dentro da rede do Docker. A porta é o padrão do Redis
Host da imagem acima existe, por aqui especifiquei o nome do host.Que é o nome do serviço
Por nível de informação, este é o meu Dockerfile
Ainda precisa fazer o rebuild quando alterar algo com:
docker-compose up -d --build
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:
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)