* Acredito que a primeira coisa a entender sobre estes dois processos e como eles trabalham. Os dois podem trabalhar de maneira independente, mas o verdadeiro propósito é quando eles trabalham em conjunto. O Docker-Compose é um arquivo que realiza a orquestração de configurações para containers/imagens e o Dockerfile pode integrar como parte ou toda a configuração de containers/imagens do Docker-Compose. O Dockerfile complementa e facilita algumas configurações para o Docker-Compose.
* Abaixo um teste de funcionamento
* Crie um diretório repositório no servidor docker. Vou utilizar o arquivo criado anteriormente com a instalação e configuração do portainer e vou acrescentar mais outras imagens:
* Crie o arquivo docker-compose.yml com as informações abaixo:
$ mkdir dockercompose
$ cd dockercompose
$ vi docker-compose.yml
version: "3.3"
services:
## PORTAINER ################
portainer:
image: portainer/portainer:latest
container_name: "PORTAINER"
ports:
- "9000:9000"
command: -H unix:///var/run/docker.sock --admin-password '$$2y$$05$$Ux91pDjLPE90bmkZWIWU6eYoZNnAxLpm10DUBh6gxS6SIj9vrTo0a'
restart: always
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/home/STRG/portainer/data:/data"
environment:
TZ: "America/Sao_Paulo"
## HELLO WORLD ################
web1:
image: dockercloud/hello-world
container_name: "HELLO-WORLD1"
ports:
- "9001:80"
environment:
TZ: "America/Sao_Paulo"
## HELLO WORLD ################
web2:
image: dockercloud/hello-world
container_name: "HELLO-WORLD2"
ports:
- "9002:80"
environment:
TZ: "America/Sao_Paulo"
## HAPROXY ################
haproxy:
build: ./haproxy
container_name: "HAPROXY"
ports:
- "80:80"
restart: always
environment:
TZ: "America/Sao_Paulo"
volumes:
portainer_data:
external: false
* Crie um diretório haproxy e dentro dele crie:
$ mkdir haproxy
$ cd haproxy
$ vi Dockerfile
FROM haproxy:1.7
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
* Agora crie:
$ vi haproxy.cfg
global
maxconn 1024
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
errorfile 400 /usr/local/etc/haproxy/errors/400.http
errorfile 403 /usr/local/etc/haproxy/errors/403.http
errorfile 408 /usr/local/etc/haproxy/errors/408.http
errorfile 500 /usr/local/etc/haproxy/errors/500.http
errorfile 502 /usr/local/etc/haproxy/errors/502.http
errorfile 503 /usr/local/etc/haproxy/errors/503.http
errorfile 504 /usr/local/etc/haproxy/errors/504.http
frontend http-in
bind *:80
acl WEB1 path_beg /web1
use_backend web1 if WEB1
acl WEB2 path_beg /web2
use_backend web2 if WEB2
default_backend srvweb1
backend srvweb1
server SRV1 portainer:9000 check maxconn 5
backend web1
server SRV1 web1:80 check
backend web2
server SRV1 web2:80 check
* Execute o docker-compose
$ cd ..
$ docker-compose up --build <- Adicione -d para executar como daemon
* O exemplo acima demonstra como usar os arquivos Docker-Compose em conjunto com Dockerfile como tambem a integração de serviços dentro do serviço Docker.