-
Notifications
You must be signed in to change notification settings - Fork 46
Docker Compose
O docker compose é uma ferramenta para orquestrar e executar diversos container docker. Auxilia na organização evitando imensas linhas de comando docker com muitas passagens de parâmetros.
O compose usa um arquivo de configuração chamado docker-compose.yml
, nesse arquivo define-se os serviços que serão levantados pelo compose. Os serviços usam uma imagem base, podendo ser criada a partir de um Dockerfile
ou baixada do docker hub. Veja o exemplo abaixo:
version: '3'
services:
redis:
build: .
ports:
- "6379:6379"
No exemplo, cria-se um serviço redis
utilizando o Dockerfile
que se encontra na mesma pasta que o docker-compose.yml indicado pelo caractere .
. Poderia-se também utilizar a imagem oficial do redis disponivel no docker hub, basta substituir o build: .
por image: redis
, onde o valor redis
na chave refere-se ao nome da imagem.
A comunicação com um container é normalmente feita via porta exposta. No exemplo acima, a porta 6379
do container é mapeada para a porta de mesmo número do host
. Isto significa que ao acessar a porta 6379 no localhost o conteúdo apresentado refere-se à aplicação em execução no container.
O mapeamento é iniciado pela porta do host seguida pela porta do container: "host:conatainer"
.
Arquivos e pastas podem ser compartilhados entre o host e um container, ou entre containers, usando volumes. No docker-compose.yml
o mapeamento de volume é feita com o uso da chave volumes
. No exemplo, o arquivo nginx.conf
é compartilhado com o container nginx
. Dessa forma será possível executar alterações nas configurações do nginx
diretamente do host, de forma que essas mudanças são refletidas no arquivo nginx.conf
do container.
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
Muitas vezes é preciso subir containers em uma ordem específica por questões de dependência. A chave depends_on
evita que um container suba antes de suas dependencias estarem em execução. No exemplo, o serviço web
irá esperar o serviço redis
para iniciar.
web:
build: .
ports:
- "8000:8000"
depends_on:
- redis
Esta chave executa o comando passado como seu valor assim que o container está em execução. No exemplo, ao terminar a build da imagem, será levantado o servidor do django.
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
Variáveis de ambiente podem ser passadas aos containers usando a chave enviroment
, como no exemplo abaixo:
postgres:
image: postgres
environment:
POSTGRES_PASSWORD: 1234
POSTGRES_DB: postgres
POSTGRES_USER: eu
Porém, por questões de seguraça não é legal expor senhas desta maneira. Mas, ao usar outra chave chamada env_file
, é possível externalizar as variáveis para um arquivo .env
e utilizá-lo como a seguir:
web:
env_file:
- web-variables.env
Após configurado o docker-compose.yml, pode-se executar e subir todos os serviços com o comando:
docker-compose up
-
docker-compose up
: Constrói as imagens, (re)cria, inicia e anexa containers a um serviço. A flag-d
executa os cantainers em segundo plano. -
docker-compose down
: Termina a execução dos containers, os remove e remove networks e volumes criados porup
. -
docker-compose stop
: Termina a execução dos containers sem removê-los. -
docker-compose start
: Inicia containers existentes para um serviço. -
docker-compose logs
: Exibe saída de log dos serviços, a flag-f
segue a saída de log. -
docker-compose exec web bash
: Executa o comadobash
no serviçoweb
.
Obs: Estes comandos exigem sudo, a menos, que tenha configurado para que não.
EPS/MDS - FGA/UnB
Métodos de Desenvolvimento de Software
Gestão de Portfólio e Projetos de Software
RUP (Rational Unified Process)
Fase Elaboração (RUP) Planejamento(PMBOK)
Fase de Construção (RUP), Execução/Monitoramente e Controle (PMBOK)
Fase Transição (RUP), Finalização (PMBOK)
Acceptance Test Driven Development (ATDD)
Integração Contínua Deploy Contínuo
Automação de Ambiente com Docker
Orquestração de Containers com Docker Compose
Automação de Ambiente com Vagrant
Deploy Contínuo na Plataforma Heroku
Integração Contínua com Travis CI
Disponibilizando a Aplicação com o Proxy Reverso Nginx
Tutorial de Instalação do Ionic
Android Integração contínua com Circle CI
Configuração de Ambiente para React Native
Tutorial Instalação Ruby on Rails
Teste Automatizado Cucumber JS
Teste Automatizado Cucumber Rails
Testando AngularJS com Jasmine
Teste Automatizado com Selenium IDE
Configurar o SonarCloud para um projeto usando Jest
Configurar o SonarCloud para um projeto usando Pytest
Configurar o SonarCloud para um projeto usando Mocha e Istambul