Essa é uma revisão anterior do documento!
Tabela de conteúdos
DOCKER
Iniciar um Container
Utilize DockerHub para encontra uma imagem. Alguns de maior uso:
docker pull ubuntudocker pull debiandocker pull alpine
Verificar nomes de imagens em Docker HUB
Modo Interativo
Abaixa a imagem temporariamente e inicia o docker:
docker run -it debiandocker run -it ubuntu
Entrar em um container em execução com o usuario:
docker exec -it -u <user> <containerid> bash
Comandos
Observação: <variavel> devem ser substituídos por nomes requeridos.
Executar containers
docker run <nomeimage>
Executar containers e iniciar bash
docker run -it <nomeimage> bash
Executar containers em segundo plano
docker run -d <nomeimage>
Executar containers com nomes
docker run -d --name <nome ><nomeimage>
Lista de imagens
docker images
Verifica composição de imagens
docker history <imagename>
Lista containers em execução
docker ps
Lista containers
docker ps -a
Iniciar containers criado
docker start <containerid>
Parar containers criado
docker stop <containerid>
Parar forçado
docker stop -t=0 <containerid>
Logs Container
docker logs -f <containerid>
Pausar containers
docker pause <containerid>
Despausar containers
docker unpause <containerid>
Executar/Abrir Prompt bash container
docker exec -it <containerid> bash
Excluir/Deletar Containers
docker rm <containerid>
Excluir/Deletar todos Containers
docker container rm $(docker container ls -aq)
-a: pega todos os containers-q: retorna apenas os ids
Excluir/Deletar Imagens
docker rmi <imagename>
Excluir/Deletar todas Imagens
docker rmi $(docker image ls -aq)
-a: pega todos os containers-q: retorna apenas os ids
Excluir/Deletar todas Imagens FORCE
docker rmi $(docker image ls -aq) --force
Mapear portas containers - utilizando portas aleatórias do host
docker run -d -P <containerid>
Mapear portas containers - utilizando portas específicas do host
docker run -d -p 8080:8080 <containerid>
Listar portas host
docker port <containerid>
Criação de Imagem - Dockerfile
| Comandos | Descrição |
|---|---|
| FROM | qual imagem(Ubuntu, Debian, CentOs, Alpine) : qual plataforma (python, nodeJS) |
| WORKDIR | onde inicia os comandos /app |
| COPY . . | copia ou adiciona os arquivo para a imagem - . . - pasta atual para workdir |
| ADD | copia/download de um link http ou copia e descompacta de um arquivo .zip |
| RUN | rode o processo, por a aplicação em funcionamento, instalar dependencias |
| ENV <endereço API> | configurações de ambiente o que preciso para rodar minha aplicação, conexões de API externas |
| EXPOSER <porta) | portas |
| USER <user> | usuario da aplicação |
| CMD | comandos |
| ENTRY POINT | entrada de comandos |
Exemplo de Dockerfile
FROM node:12-alpine #imagem do dockerhub para Node.js utilizando Linux Alpine WORKDIR /app #diretório principal da aplicação onde será copiado e iniciado o container RUN addgroup dev && adduser -S -G jdos dev #cria em sequencia (&&) um grupo dev e usuario jdos e insere no grupo dev USER jdos #diz para a imagem utilizar o usuario jdos apartir desse ponto na criação da imagem COPY package.json . #copia apenas um arquivo RUN npm install --omit=dev #instala um pacote npm COPY . . #copia os arquivos da pasta atual para a pasta atual dentro da imagem (WORKDIR) CMD ["node","src/index.js"] #executa um comando qnd a imagem inicia EXPOSE 3000 #expoe uma porta para acesso
Pode-se executar para construir uma simples imagem dentro da pasta da aplicação:
docker build -t app .
Pode-se ganhar performance na build de um imagem docker utilizando CACHES da contrução ANTERIOR, apenas modificando as linhas do arquivo de construção
ATENÇÃO o nome do arquivo deve ser: Dockerfile
FROM node:14 WORKDIR /app-node ARG $PORT_BUILD=6000 ENV PORT=$PORT_BUILD EXPOSE $PORT_BUILD COPY . . RUN npm install ENTRY POINT npm start
Descrição:
- Utiliza a imagem apartir do node 14 como base
- Cria pasta app-node dentro do container a ser criado
- Especifica uma porta ao criar o container 6000 ARG (variavel durante construção da imagem) e ENV variável que existe dentro do container em execução
- Explicita a porta que será usado na nossa aplicação (expose)
- Copia os arquivos da pasta atual para pasta app-node dentro do container
- npm install
- npm start
Executar na mesma pasta:
docker build -t <crieseunometag>/<crienomeimagem>:<x.x> .
Criar Copia de uma imagem docker - Mudar TAG
docker tag <nometag/nomeimage:1.0> <novatag/nomeimage:1.0>
Publicar sua imagem no DOCKERHUB
- Login DockerHub
docker login
- Crie seu app no docker DockerHub (ex. jdos/app)
- Mude a tag igual a criada no DockerHub
docker tag <iddocker> <jdos/app:v1>
- Subir a imagem
docker push <jdos/app:v1>
Transferir imagem sem DockerHub
Export:
docker image save -o <nomeimage>.tar <app:v1>
Load:
docker image load -i <nomeimage>.tar
Percistência de dados - DIRETORIO LOCALHOST
docker run it -v <path/local/host>:</path/image> imagename bash
SEMANTICA:
docker run it --mount type=bind,source=<path/local/host>,target=</path/image> imagename bash
Além disso, é importante lembrar que `bind mounts` dependem da estrutura de pastas do host, o que pode gerar problemas de portabilidade se você precisar mover seu container para outro ambiente. Já os volumes são gerenciados pelo Docker e podem ser compartilhados entre diferentes containers, além de serem mais fáceis de gerenciar e manter.
Listar volume
docker volume ls
Criar volume
docker volume create <nome-volume>
Descrição:
O docker cria o volume no host em: /var/lib/docker/volumes/
Percistência de dados - VOLUME
docker run -it -v <meu-volume>:</path/container> nomeimage bash
ou
docker run it --mount source=<meu-volume>,target=</path/image> imagename bash
Descrição: A diferença é que utilizando –mount não precisa criar o volume, caso não exista ele criará automaticamente.
Percistência temporária - tmpfs
docker run -it --tmpfs=<path> nomeimage bash
Descrição: Armazena os arquivos em memória
Configurações de Rede
docker network ls
Verificar as configurações do container:
docker inspect <imagename>
Configurações de Reinício
Alterar Política de reinício em container existente:
docker update --restart unless-stopped <containerid>
