My DockerNotes
sudo apt-get remove docker docker-engine docker.io containerd runc# Atualiza pacotes
sudo apt-get update;
# Instala dependências
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common;
# Adiciona a chave GPG do docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;
# Adiciona o repositório oficial
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable";
# Instala docker
sudo apt-get install docker-ce docker-ce-cli containerd.io;
# Verificar instalação
sudo docker run hello-world;/etc/init.d/docker start;# Desinstalando e removendo configurações
sudo apt-get purge docker-ce docker-ce-cli containerd.io;
# Excluindo images, containers e volumes
sudo rm -rf /var/lib/docker;# Estrutura básica
sudo docker run -i -t <distro>:<versão> <processo_a_executar_ao_iniciar>;
# Exemplo
sudo docker run -i -t ubuntu:14.10 /bin/bash;
# Caso a imagem não esteja localmente, ele faz o download
# Para configurar portas de acesso basta adicionar o parâmetro -p <porta_host>:<porta_container>| Parâmetro | Descrição | Exemplo |
|---|---|---|
-it |
-t aloca terminal que permite acesso -i interatividade com o terminal |
docker run -it debian |
-v |
cria um diretório compartilhado do host com o container | -v /<diretório> |
-w |
Define um diretório padrão ao se conectar via SSH | -w /home/application |
-p ou --publish |
Define (bind) as configurações de porta em relação host/container. | -p <porta_host>:<porta_container> |
--link |
Cria um link entre containers. | docker run -it --name <nome_do_container> --link <container_id_ou_name>:<alias>; |
--name |
Dá um nome ao container. | docker run -it --name <nome_do_container> <dist>:<versão>; |
-m |
Define o limite de memória que o container usa do host | -m 512M |
--cpu-shares |
Define o limite de uso de CPU. Usando proporção entre os containers existentes. Ex. Container A 1024, B 512, C 512 usarão respectivamente 50%, 25% e 25% da CPU host. | --cpu-shares 512 |
-e |
Este parâmetro é utilizado quando se necessita passar variáveis de ambiente para o container | -e POSTGRESQL_USER=docker |
--volumes-from |
Utilizado para importar volume de outro container. | --volume-from <nome_container> |
--restart |
Este comando informa que o container e reiniciado quando por algum motivo ele parar | --restart=always |
-d |
Roda o container como daemon ou processo | -d |
--dns |
Parâmetro para informar o servidor dns utilizado | --dns 8.8.8.8 |
--hostname |
Parâmetro para definir o hostname do container internamente no docker | --hostname biruleibe |
--expose |
Expõe somente a porta do container se fazer redirect pelo host | --expose 80 |
--mac-address |
Define um MAC específico para o container | --mac-address 00:1D:7D:B2:34:F9 |
# Listar containers em execução
sudo docker ps;
# Listar todos os containers
sudo docker ps -l;
# Listar imagens disponíveis
sudo docker images;
# Excluir imagem
sudo docker image rm <image_id>;
# ou
sudo docker rmi <image_id>;
# Fazer poll de uma imagem do DockerHub
sudo docker poll <imagem_do_hub>;
# Excluir container
sudo docker rm <id>;
# Iniciar container
sudo docker start <id>
# Sair do container e manter rodando
ctrl + p;
ctrl + q;
# Parar container
sudo docker stop <id>;
# Pausar container
sudo docker pause <id>;
# Despausar container
sudo docker unpause <id>;
# Acessar o container
sudo docker attach <id>;
# Verificar alterações de arquivos do container
sudo docker diff <id>;
# Commitar alterações na imagem
sudo docker commit <id> <nome_que_quiser>:<versão_ex: 1.0>;
# Para container
exit;
# Executar comandos no docker direto do host
sudo docker exec <id> <comando>;
# Todas informações do container
sudo docker inspect <id>;
# Estatisticas de uso
sudo docker stats;
# Ver log do container
sudo docker log <id>;
# Listar processos em execução no container
sudo docker top <id>;
# Criar --link entre containers
sudo docker run -it --name <nome_do_container> --link <container_id_ou_name>:<alias>;
# Remove todos os contêineres não usados
docker container prune;
# Remove todas as imagens não usadas
docker image prune;
# Remove todos os volumes não usados
docker volume prune;
# Remove todas as redes não utilizadas
docker network prune;O docker update server para modificar o setup de um container em execução
# Atualizando o limite de memória
docker update -m 256M <id>;
Images, containers, volumes, and networks
/var/lib/docker/
Criando Dockerfile para automatizar o build do container.
- O nome do arquivo é Dockerfile(Com D maiúsculo).
- O comando de build tem que receber o diretório onde o Dockerfile está.
# Qual imagem será utilizada(primeiro parâmetro)
FROM <distro>:<versão>
# Quem criou o container
MAINTAINER <nome_ou_email>
# Executar comandos
# Para cada execução uma nova camada
RUN <comandos_desejados>
# Enviar arquivo ou diretório do host para o container(inclusive .tar)
ADD <arquivo> <diretório_do_container>
# Parâmetros para o Entrypoint
CMD
# Entripoint
ENTRYPOINT
# Adicionar metadatas (informações)
LABEL <nome>="<conteúdo>"
# Copiar arquivos ou diretório do host para o container(.tar exclusivo)
COPY <arquivo> <diretório_do_container>
# Passar variáveis de ambiente
ENV <nome>="<conteúdo>"
# Porta do container disponível
EXPOSE 80
# Usuário default
USER <nome_do_user>
# Diretório de trabalho padrão
WORKDIR /<nome_do_diretório>
# Criar o volume do container
VOLUME /<diretório>From ubuntu:20.04
MAINTAINER [email protected]
RUN apt-get update && apt-get install -y apache2 && apt-get clean# Sem especificação do nome e tag da imagem
sudo docker build .
# Com especificação do nome e tag da imagem
sudo docker build -t <imagem>:<tag>;
sudo docker run -ti -v /<nome_diretório> <imagem>;
Desta forma, o diretório pode ser encontrado via comando inspect:
sudo docker inspect -f {{.Mounts}} <id_container>;
docker run -ti -v /<diretório_host>:/<volume_container> <imagem>;
docker run --name <nome_container> --volumes-from <container_volume_compartilhado> <imagem>;
-
LINUXtips - Playlist Descomplicando Docker
-
LINUXtips - Curso Descomplicando Docker V1
-
devwikiblog - Utilizando Docker em ambiente de desenvolvimento