====== 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