08-basic-docker-compose.md
April 7, 2025 · View on GitHub
#Autor: Robson Vaamonde
#Procedimentos em TI: http://procedimentosemti.com.br
#Bora para Prática: http://boraparapratica.com.br
#Robson Vaamonde: http://vaamonde.com.br
#Facebook Procedimentos em TI: https://www.facebook.com/ProcedimentosEmTi
#Facebook Bora para Prática: https://www.facebook.com/BoraParaPratica
#Instagram Procedimentos em TI: https://www.instagram.com/procedimentoem
#YouTUBE Bora Para Prática: https://www.youtube.com/boraparapratica
#Data de criação: 31/10/2024
#Data de atualização: 06/04/2025
#Versão: 0.04
#Testado e homologado no GNU/Linux Ubuntu Server 24.04.x LTS
#Testado e homologado no Docker-CE (Community Edition) 24.x
#Testado e homologado no Portainer-CE (Community Edition) 2.x
Release Ubuntu Server 24.04: https://fridge.ubuntu.com/2024/04/25/ubuntu-24-04-lts-noble-numbat-released/
Release Notes Ubuntu Server 24.04.2: https://fridge.ubuntu.com/2025/02/20/ubuntu-24-04-2-lts-released/
Release Notes Ubuntu Server 24.04.x: https://canonical.com/blog/canonical-releases-ubuntu-24-04-noble-numbat
Ubuntu Advantage for Infrastructure: https://ubuntu.com/advantage
Ciclo de Lançamento do Ubuntu Server: https://ubuntu.com/about/release-cycle
Releases All Ubuntu Server: https://wiki.ubuntu.com/Releases
OBSERVAÇÃO IMPORTANTE: COMENTAR NO VÍDEO DO BÁSICO DE DOCKER-CE SE VOCÊ CONSEGUIU FAZER A IMPLEMENTAÇÃO COM A SEGUINTE FRASE: Básico de Docker Compose do Docker-CE realizado com sucesso!!! #BoraParaPrática
COMPARTILHAR O SELO DO DESAFIO NAS SUAS REDES SOCIAIS (LINKEDIN, FACEBOOK, INSTAGRAM) MARCANDO: ROBSON VAAMONDE COM AS HASHTAGS E COPIANDO O CONTEÚDO DO DESAFIO ABAIXO:
LINK DO SELO: https://github.com/vaamonde/ubuntu-2404/blob/main/selos/10-docker-compose.png
#boraparapratica #boraparaprática #vaamonde #robsonvaamonde #procedimentosemti #ubuntuserver #ubuntuserver2404 #desafiovaamonde #desafioboraparapratica #desafiodocker #desafiodockerce #desafiodockercompose
Conteúdo estudado nesse desafio:
#01_ Pesquisando (Search) as Imagens (Image) do NGINX e MySQL no Docker-HUB do Docker-CE
#02_ Baixando (Pull) as Imagens (Image) do NGINX e MySQL para o Repositório Local do Docker-CE
#03_ Criando o Primeiro arquivo do Docker Compose File YML (YAML Ain't Markup Language) no Docker-CE
#04_ Executando o Docker Compose utilizando o arquivo (file) para construir os Contêiners (Container) no Docker-CE
#05_ Verificando as Informações dos Contêiners (Container) do Projeto do Docker Compose no Docker-CE
#06_ Parando (Stop), Iniciando (Start), Pausando (Pause) e Despausando (Unpause) os Contêiners (Container) do Projeto no Docker-CE
#07_ Liberando o acesso Remoto dos Contêiners (Container) do NGINX e MySQL no Docker-CE
#08_ Removendo (Rm/Down) os Contêiners (Container) do Projeto do Docker Compose no Docker-CE
Site Oficial do Docker: https://www.docker.com/
Site Oficial do Docker Engine: https://docs.docker.com/engine/install/
Site Oficial do Docker Compose: https://github.com/docker/compose
Site Oficial do Docker Hub: https://hub.docker.com/
O QUE É E PARA QUE SERVER O DOCKER CE: Docker é um conjunto de produtos de plataforma como serviço que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres. Os contêineres são isolados uns dos outros e agrupam seus próprios softwares, bibliotecas e arquivos de configuração.
O QUE É E PARA QUE SERVER O DOCKER HUB: Docker Hub é um registro de contêiner criado para desenvolvedores e colaboradores de código aberto encontrarem, usarem e compartilharem suas imagens de contêiner. Com o Hub, os desenvolvedores podem hospedar repositórios públicos que podem ser usados gratuitamente ou repositórios privados para equipes e empresas.
O QUE É E PARA QUE SERVER O DOCKER IMAGE: O Docker Image é um dos conceitos fundamentais do Docker. Ele é o modelo imutável usado para criar containers. Basicamente, uma imagem Docker é um pacote que contém tudo o que é necessário para rodar um programa: código-fonte, bibliotecas, dependências, variáveis de ambiente, arquivos de configuração e muito mais. As imagens são "read-only" e os containers são instâncias de imagens em execução.
O QUE É E PARA QUE SERVER O DOCKERFILE: O Dockerfile é um arquivo de texto que contém instruções para criar uma imagem Docker de forma automatizada. Ele define os passos que o Docker deve seguir para montar uma aplicação como: Imagem, Aplicação, Configurações, Volumes, Arquivos, Comandos, etc..., isso facilita a criação e reprodução de ambientes consistentes, possibilitando que qualquer pessoa ou máquina possa construir uma imagem com as mesmas configurações, garantindo portabilidade e consistência em diferentes sistemas.
O QUE É E PARA QUE SERVER O COMPOSE DO DOCKER: Docker Compose é uma ferramenta que facilita a definição e o gerenciamento de aplicações Docker compostas por vários contêineres. Ele usa um arquivo YAML para definir e configurar serviços, redes e volumes que uma aplicação pode precisar, permitindo que tudo seja gerenciado e iniciado com um único comando.
Link da vídeo aula: https://www.youtube.com/watch?v=7Y5ZEmDZlNA
01_ Pesquisando (Search) as Imagens (Image) do NGINX e MySQL no Docker-HUB do Docker-CE
#pesquisando as imagens dos container do NGINX e do MySQL oficial no Docker-HUB
#Link de consulta do Docker Hub: https://hub.docker.com/
#Link da imagem oficial do NGINX: https://hub.docker.com/_/nginx
#Link da imagem oficial do MySQL: https://hub.docker.com/_/mysql
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/search/
#opção do comando docker: search (Search the Docker Hub for images), --filters (Filter output
#based on conditions provided), is-official (parameters and value used in the filter)
docker search nginx --filter is-official=true
docker search mysql --filter is-official=true
02_ Baixando (Pull) as Imagens (Image) do NGINX e MySQL para o Repositório Local do Docker-CE
#baixando as imagens do NGINX e do MySQL do Docker-HUB
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/pull/
#opção do comando docker: imagem (Manage images), pull (Download an image from a registry)
docker image pull nginx:latest
docker image pull mysql:latest
#listando todas as imagens de containers no Docker-CE
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/ls/
#opção do comando docker: image (Manage images), ls (List images)
docker image ls
#inspecionando as imagens do NGINX e do MySQL no Docker-CE
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/image/inspect/
#opção do comando docker: imagem (Manage images), inspect (Display detailed information
#on one or more images), nginx:latest mysql:latest (Imagem name and Tag)
#opção do redirecionador |: Conecta a saída padrão com a entrada padrão de outro comando
#opção do comando jq: .[0].Config.Env': Filtra o JSON, acessando o primeiro elemento (.[0])
#e então a seção "Config.Env" para exibir apenas o bloco de variáveis de ambiente.
docker image inspect nginx:latest | jq '.[0].Config.Env'
docker image inspect mysql:latest | jq '.[0].Config.Env'
03_ Criando o Primeiro arquivo do Docker Compose File YML (YAML Ain't Markup Language) no Docker-CE
OBSERVAÇÃO IMPORTANTE: É INDICADO SEMPRE TRABALHAR COM DIRETÓRIOS DE PROJETO QUANDO VOCÊ ESTÁ TRABALHANDO COM ARQUIVOS DOCKERFILE OU COM O DOCKER COMPOSE. CADA PROJETO DEVE FICAR EM UM DIRETÓRIO SEPARADO PARA FACILITAR A CONSTRUÇÃO DOS CONTAINERS.
#criando o diretório de teste01 do Compose
#opção do comando mkdir: -v (verbose)
mkdir -v teste01/
#criando o arquivo do Compose no diretório teste01
#Documentação do Docker-CE: https://docs.docker.com/reference/compose-file/
#Documentação do Docker-CE: https://docs.docker.com/compose/
vim teste01/vavatour.yml
#entrando no modo de edição do VIM
INSERT
COPIAR E COLAR: as configurações básicas do Docker Compose
OBSERVAÇÃO IMPORTANTE: NOS ARQUIVOS DO COMPOSE QUE UTILIZA A EXTENSÃO .YML NUNCA UTILIZAR O TAB (TABULADOR) SEMPRE UTILIZAR 02 (DOIS) ESPAÇOS PARA A INDENTAÇÃO DO ARQUIVO DE CONFIGURAÇÕES DO DOCKER COMPOSE.
#definindo o nome do projeto
#Documentação do Docker: https://docs.docker.com/reference/compose-file/version-and-name/
name: vavatour
#definindo a seção dos serviços do projeto
#Documentação do Docker: https://docs.docker.com/reference/compose-file/services/
services:
#definindo o nome do serviço de Web Site (pode ser qualquer nome)
webserver:
#definindo a imagem que será utilizada no container do Web Site
image: nginx:latest
#definindo as publicações de portas do host e do container do Web Site
#DICA: recomendo deixar o mapeamento das portas dentro de Aspas Duplas
ports:
- "80:80"
#definindo as políticas de reinício automático do container do Web Site
#OBSERVAÇÃO a opção: always (sempre) é utilizada caso tenha alguma falha
#no container ele será reiniciado automaticamente.
restart: always
#definindo o nome do serviço do Banco de Dados (pode ser qualquer nome)
database:
#definindo a imagem que será utilizada no container do Data Base
image: mysql:latest
#definindo as publicações de portas do host e do container do Data Base
ports:
- "3306:3306"
#definindo as variáveis de ambiente do container do Data Base
#OBSERVAÇÃO: as variáveis de ambiente sempre está disponível na descrição
#do Docker Hub e na sua documentação oficial.
environment:
#definindo a senha do usuário root do MySQL Server
MYSQL_ROOT_PASSWORD: pti@2018
#definindo as políticas de reinício automático do container do Data Base
restart: always
#salvar e sair do arquivo
Esc Shift : x <Enter>
#listando o conteúdo do diretório de projeto do Compose
#opções do comando ls: -l (long listing format), -h (human-readable)
ls -lh teste01/
04_ Executando o Docker Compose utilizando o arquivo (file) para construir os Contêiners (Container) no Docker-CE
#executando o projeto do Docker Compose utilizando o comando docker-compose
#Documentação do Docker: https://docs.docker.com/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/up/
#opção do comando docker compose: -f --file (Compose configuration files), up (Create
#and start containers), -d --detach (Detached mode: Run containers in the background)
docker compose --file teste01/vavatour.yml up -d
#listando os containers do projetos do Docker Compose em execução no Docker-CE
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/ls/
#opção do comando docker compose: ls (List running compose projects), -a --all (Show
#all stopped Compose projects)
docker compose ls --all
#listando a rede criada no projeto do Docker Compose no Docker-CE
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/network/
#Documentação do Docker-CE: https://docs.docker.com/reference/cli/docker/network/ls/
#opção do comando docker: network (Manage networks), ls (List networks), -f --filter (Provide
#filter values)
docker network ls --filter name=vavatour
05_ Verificando as Informações dos Contêiners (Container) do Projeto do Docker Compose no Docker-CE
#visualizando as imagens de containers utilizadas no projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/images/
#opção do comando docker compose: -f --file (Compose configuration files), images (List
#images used by the created containers)
docker compose --file teste01/vavatour.yml images
#visualizando os containers em execução do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/ps/
#opção do comando docker compose: -f --file (Compose configuration files), ps (List
#containers), -a --all (Show all stopped containers)
docker compose --file teste01/vavatour.yml ps --all
#visualizando as estáticas de uso dos containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/container/stats/
#opção do comando docker compose: -f --file (Compose configuration files), stats (Display
#a live stream of container(s) resource usage statistics)
#OBSERVAÇÃO: para sair das estáticas e só pressionar: Ctrl+C
docker compose --file teste01/vavatour.yml stats
#visualizando os logs dos containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/container/stats/
#opção do comando docker compose: -f --file (Compose configuration files), logs (View
#output from containers)
docker compose --file teste01/vavatour.yml logs
#visualizando os processos dos containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/top/
#opção do comando docker compose: -f --file (Compose configuration files), top (Display
#the running processes)
docker compose --file teste01/vavatour.yml top
06_ Parando (Stop), Iniciando (Start), Pausando (Pause) e Despausando (Unpause) os Contêiners (Container) do Projeto no Docker-CE
#parando os containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/stop/
#opção do comando docker compose: -f --file (Compose configuration files), stop (Stop
#services)
docker compose --file teste01/vavatour.yml stop
#iniciando os containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/start/
#opção do comando docker compose: -f --file (Compose configuration files), start (Start
#services)
docker compose --file teste01/vavatour.yml start
#pausando os containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/pause/
#opção do comando docker compose: -f --file (Compose configuration files), pause (Pause
#services)
docker compose --file teste01/vavatour.yml pause
#despausando os containers do projeto
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/unpause/
#opção do comando docker compose: -f --file (Compose configuration files), unpause (Unpause
#services)
docker compose --file teste01/vavatour.yml unpause
07_ Liberando o acesso Remoto dos Contêiners (Container) do NGINX e MySQL no Docker-CE
#verificando o redirecionamento da Porta padrão do NGINX e do MySQL
#opção do comando lsof: -n (network number), -P (port number), -i (list IP Address), -s (alone directs)
sudo lsof -nP -iTCP:'80,3306' -sTCP:LISTEN
#Liberando (allow) e Logando Tudo (LOG-ALL) da Sub-rede 172.16.1.0/24 (FROM) acessar o
#servidor (TO) do NGINX Server na porta (PORT) 80 via protocolo TCP (PROTO TCP)
sudo ufw allow log-all from 172.16.1.0/24 to 172.16.1.30 port 80 proto tcp comment 'Liberando a sub-rede para acessar o NGINX'
#Liberando (allow) e Logando Tudo (LOG-ALL) da Sub-rede 172.16.1.0/24 (FROM) acessar o
#servidor (TO) do MySQL Server na porta (PORT) 3306 via protocolo TCP (PROTO TCP)
sudo ufw allow log-all from 172.16.1.0/24 to 172.16.1.30 port 3306 proto tcp comment 'Liberando a sub-rede para acessar o MySQL'
#Verificando as Regras Detalhadas padrão do UFW em modo Verboso
sudo ufw status verbose
#utilizar os navegadores para testar o acesso ao NGINX
firefox ou google chrome: http://endereço_ipv4_ubuntuserver
#utilizar o MySQL Workbench para testar o acesso ao MySQL
MySQL Workbench
MySQL Connections (+)
Connection Name: MySQL-Docker
Connection Method
Parameters
Hostname: 172.16.1.30
Port: 3306
Username: root
Password:
<Store in Keychains>
Password: pti@2018 <OK>
<Test Connection>
OBSERVAÇÃO IMPORTANTE: A VERSÃO DA IMAGEM DO DOCKER UTILIZADA DO MYSQL É A
9.x, SE APARECER A MENSAGEM DE INCOMPATIBILIDADE DE VERSÃO ATUALIZE O SEU
MYSQL WORKBENCH
<Continue Anyway>
<OK>
<OK>
08_ Removendo (Rm/Down) os Contêiners (Container) do Projeto do Docker Compose no Docker-CE
#removendo os containers parados do projeto do Docker Compose
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/rm/
#opção do comando docker compose: -f --file (Compose configuration files), rm (Removes
#stopped service containers)
docker compose --file teste01/vavatour.yml rm
? Going to remove vavatour-database-1, vavatour-webserver-1 (y/N): y <Enter>
#parando e removendo os containers do projeto do Docker Compose
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/
#Documentação do Docker: https://docs.docker.com/reference/cli/docker/compose/down/
#opção do comando docker compose: -f --file (Compose configuration files), down (Stop
#and remove containers, networks)
docker compose --file teste01/vavatour.yml down
#Verificando as Regras Detalhadas padrão do UFW em modo Numerado
sudo ufw status numbered
#Removendo (DELETE) a Regra (RULES) de Acesso ao NGINX (9) do Docker-CE
sudo ufw delete 9
Deleting:
allow log-all from 172.16.1.0/24 to 172.16.1.30 port 80 proto tcp comment 'Liberando a sub-rede para acessar o NGINX'
Proceed with operation (y|n)? y <Enter>
#Verificando as Regras Detalhadas padrão do UFW em modo Numerado
sudo ufw status numbered
#Removendo (DELETE) a Regra (RULES) de Acesso ao MYSQL (9) do Docker-CE
sudo ufw delete 9
Deleting:
allow log-all from 172.16.1.0/24 to 172.16.1.30 port 3306 proto tcp comment 'Liberando a sub-rede para acessar o MySQL'
Proceed with operation (y|n)? y <Enter>
#listando o diretório de testes do Docker Compose
#opções do comando ls: -l (long listing format), -h (human-readable)
ls -lh
#removendo o diretório de testes do Docker Compose
#opção do comando rm: -R (recursive), f (force), -v (verbose), * (all)
rm -Rfv teste0*/
========================================DESAFIOS=========================================
#09_ DESAFIO-01: UTILIZAR AS IMAGENS DE CONTAINERS DO: Apache2 (httpd) e do MariaDB EXECUTAR TODOS OS PROCEDIMENTOS DAS ETAPAS: 01 ATÉ 08 UTILIZANDO ESSAS IMAGENS E CRIAR O ARQUIVO DO DOCKER COMPOSE DE: vavaschool.yml A OPÇÃO: name COM O SEGUINTE NOME: vavaschool, NOME DO CONTAINER DO APACHE2 DE: hotsite E A BANCO DE DADOS DE: db.
=========================================================================================
OBSERVAÇÃO IMPORTANTE: COMENTAR NO VÍDEO DO BÁSICO DE DOCKER-CE SE VOCÊ CONSEGUIU FAZER A IMPLEMENTAÇÃO COM A SEGUINTE FRASE: Básico de Docker Compose do Docker-CE realizado com sucesso!!! #BoraParaPrática
COMPARTILHAR O SELO DO DESAFIO NAS SUAS REDES SOCIAIS (LINKEDIN, FACEBOOK, INSTAGRAM) MARCANDO: ROBSON VAAMONDE COM AS HASHTAGS E COPIANDO O CONTEÚDO DO DESAFIO ABAIXO:
LINK DO SELO: https://github.com/vaamonde/ubuntu-2404/blob/main/selos/10-docker-compose.png
#boraparapratica #boraparaprática #vaamonde #robsonvaamonde #procedimentosemti #ubuntuserver #ubuntuserver2404 #desafiovaamonde #desafioboraparapratica #desafiodocker #desafiodockerce #desafiodockercompose
