docker engine
= aplicação que roda containers a partir de imagens (como o tocador de cd)
docker image
= arquivo que contém os dados necessários para um container rodar (como um cd de música)
docker container
= uma aplicação em caixa-de-areia baseada em uma imagem (como a música tocando)
docker volume
= uma pasta compartilhada entre o hospedeiro e o container
Exemplos práticos de contrução de imagens com Docker e orquestração com docker-compose Dockerfile e docker-compose.yml
docker ps -a
docker stop $(docker ps -aq)
docker container attach nome_do_container
docker system prune
Conteiner criado a partir da imagem alpine:3.12
Container nomeado como 01container
docker container create --name 01container -it alpine:3.12
docker container start 01container
docker container ls -af name=01container
Nesse exemplo foi executado cat /etc/os-release
que mostra a versão da distribuição da imagem
docker container exec 01container cat /etc/os-release
docker container rm -f 01container
docker pull nginx:1.21.3-alpine
A porta interna 80 foi exposta para o hospedeiro pela porta 3000. Acessando a porta 3000 do hospedeiro conectamos com o container.
docker container run --name 02images -itd -p 3000:80 nginx:1.21.3-alpine
docker container stop 02images
O comando FROM
define a imagem base a ser usada na contrução dessa imagem.
- Imagens Alpine são compactas e carregam apenas o necessário.
- Uma outra opção menor ainda seria a imagem
O comando ADD
pode ser usado para descompactar um arquivo previamente criado para dentro da imagem
O comando COPY
copia os arquivos da origem (host) para o destino (imagem)
O comando EXPOSE
define que a porta exposta será a 3001
O comando CMD
define o comando que será usado iniciar o container.
Apenas a última instrução CMD
será executado caso mais de um CMD
esteja neste arquivo.
# app/backend/Dockerfile
FROM node:14-alpine AS backend
WORKDIR /backend
# Arquivo compactado que será descompactado dentro do container no local especificado ('.')
# ADD node_modules.tar.gz .
COPY . .
EXPOSE 3001
CMD ["npm", "start"]
# app/frontend/Dockerfile
FROM node:14-alpine AS frontend
WORKDIR /frontend
# Arquivo compactado que será descompactado dentro do container no local especificado ('.')
# ADD node_modules.tar.gz .
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Um projeto com vários containers representando cada parte da aplicação (ex: frontend, backend e banco de dados) pode ser iniciada facilmente à partir de um arquivo apenas. Pra isso usamos docker-compose.
Para subir a orquestração se utiliza
docker-compose up
Para descer a orquestração e remover containers se utiliza
docker-compose down --remove-orphans
# ./app/docker-compose.yml
- A senha do usuário root é
12345678
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
Para verificar se está acessível pelo host acesse: http://localhost:3306 a seguinte mensagem deve aparecer no navegador:
J���
8.0.30�����P(S8�8h5�ےےے��ےك�����������j;� �X��#~H��mysql_native_password�!���ے„�#08S01Got packets out of order
docker run -d -p 27017:27017 --name mongoDB mongo
Para verificar se está acessível pelo host acesse: http://localhost:27017 a seguinte mensagem deve aparecer no navegador:
It looks like you are trying to access MongoDB over HTTP on the native driver port.