====== DOCKER ======
===== Iniciar um Container =====
Utilize [[https://hub.docker.com/search?q=| DockerHub]] para encontra uma imagem. Alguns de maior uso:
* ''docker pull ubuntu''
* ''docker pull debian''
* ''docker pull alpine''
Verificar nomes de imagens em Docker HUB
==== Modo Interativo ====
Abaixa a imagem ''temporariamente'' e inicia o docker:
* ''docker run -it debian''
* ''docker run -it ubuntu''
Entrar em um container em execução com o usuario:
docker exec -it -u bash
===== Comandos =====
Observação: '''' devem ser substituídos por nomes requeridos.
==== Executar containers====
docker run
==== Executar containers e iniciar bash====
docker run -it bash
=== Executar containers em segundo plano ===
docker run -d
=== Executar containers com nomes ===
docker run -d --name
==== Lista de imagens====
docker images
==== Verifica composição de imagens====
docker history
==== Lista containers em execução====
docker ps
==== Lista containers ====
docker ps -a
==== Iniciar containers criado ====
docker start
==== Parar containers criado ====
docker stop
===Parar forçado===
docker stop -t=0
====Logs Container====
docker logs -f
Timestamp:
docker logs -t
Tail:
docker logs -n 10
==== Pausar containers====
docker pause
=== Despausar containers===
docker unpause
==== Executar/Abrir Prompt bash container ====
docker exec -it bash
==== Excluir/Deletar Containers====
docker rm
== 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
== 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
==== Mapear portas containers - utilizando portas específicas do host ====
docker run -d -p 8080:8080
==== Listar portas host ====
docker port
===== 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 | configurações de ambiente o que preciso para rodar minha aplicação, conexões de API externas |
| EXPOSER | 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 /: .
==== Criar Copia de uma imagem docker - Mudar TAG ====
docker tag
===== 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
* Subir a imagem
docker push
===== Transferir imagem sem DockerHub =====
Export:
docker image save -o .tar
Load:
docker image load -i .tar
===== Percistência de dados - DIRETORIO LOCALHOST =====
docker run it -v : imagename bash
SEMANTICA:
docker run it --mount type=bind,source=,target= 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
verificar:
docker volume inspect
Descrição:
O docker cria o volume no host em: ''/var/lib/docker/volumes/''
==== Percistência de dados - VOLUME ====
docker run -it -v : nomeimage bash
ou
docker run it --mount source=,target= 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= 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
===== Configurações de Reinício =====
Alterar Política de reinício em container existente:
docker update --restart unless-stopped