2
10 de junho de 2022 00:52
Tópico inicial
Olá pessoal, acabei de fazer um curso de Docker e estou compartilhando as anotações que fiz em um arquivo .txt para utilizar de cola:
Hub para encontrar containers Docker: https://hub.docker.com/ Comando para baixar o container: docker pull NOMEDAIMAGEM ou docker run NOMEDAIMAGEM Comando para iniciar um novo container em modo de execução (flag it): docker run -it NOMEDAIMAGEM Comandos para listar containers: docker ps docker container ls Comando para listar containers que já foram executados (flag -a): docker ps -a Comando para deixar container rodando em background (flag -d): docker run -d NOMEDAIMAGEM Comando para parar container: docker stop NOMEDAIMAGEM ou IDDOCONTAINER Comando para expor o container em uma porta (flag -p): docker run -d -p 80:80 NOMEDAIMAGEM (esse exemplo habilita na porta 80) (o primeiro é a porta do pc e o segundo a porta do container) Comando para restartar um container: docker start IDDOCONTAINER ou NOMEDAIMAGEM Comando para executar um container dando nome a ele (flag --name): docker run --name NOMEQUEVOCEQUERDARAIMAGEM NOMEDAIMAGEM Comando para acessar os logs de um container: docker logs IDDOCONTAINER ou NOMEDAIMAGEM Comando para remover um container rm: ===>(pode utilizar a flag -f (force) para forçar a remoção do container) docker rm IDDOCONTAINER ou NOMEDAIMAGEM ou docker rm IDDOCONTAINER ou NOMEDAIMAGEM -f Comando para listar as imagens: docker image ls Comando para verificar o status dos containeres: docker stats === CRIANDO UMA IMAGEM === Criar um arquivo Dockerfile na pasta do projeto com as seguintes instruções: FROM: imagem base WORKDIR: diretório da aplicação EXPOSE: porta da aplicação COPY: quais arquivos precisam ser copiados CMD []: comandos a serem executados exemplo: FROM node WORKDIR /app COPY package*.json . RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"] === EXECUTANDO UMA IMAGEM === Comando para criar uma imagem: docker build DIRETÓRIODAIMAGEM (se estiver na pasta do projeto utilize: docker build .) Comando para executar uma imagem: docker run NOMEDAIMAGEM (para alterar os arquivos de uma imagem, deve fazer uma build nova) === PROCURAR COMANDOS === Para acessar lista de comandos do Docker utilizar a flag --help, exemplos: docker --help (mostra os comandos gerais do docker) docker run --help (mostra os comandos do metódo run do docker) === ALTERAR NOME E TAG === Comando para nomear uma imagem: docker tag IDDOCONTAINER NOMEQUEQUEREMOSDAR Comando para mudar a tag (tipo versionamento) docker tag IDDOCONTAINER NOMEDATAGDAIMAGEM:NOVONOME === CRIAR IMAGEM ATRIBUNDO NOME E TAG === Comando para criar a imagem atribuindo nome (flag -t): (executar na pasta do projeto com o dockerfile ou indicar o caminho no lugar do .) docker build -t NOMEASERATRIBUIDO . Comando para criar a imagem atribuindo nome e a tag(flag -t): (executar na pasta do projeto com o dockerfile ou indicar o caminho do projeto no lugar do .) docker build -t NOMEASERATRIBUIDO:TAGASERATRIBUIDA . === RODAR A IMAGEM COM O TERMINAL INTERATIVO === Comando para rodar a imagem com terminal: docker start -i NOMEOUIDDAIMAGEM === REMOVER IMAGENS === Comando para remover imagens: docker rmi NOMEDAIMAGEMOUID Comando para forçar a remoção da imagem caso não consiga (flag -f) docker rmi -f NOMEDAIMAGEMOUID Comando para remover várias imagens e conteiners ao mesmo tempo docker system prune === EXECUTAR CONTAINER QUE SE APAGA APÓS A EXECUÇÃO === Comando para executar um container e apagar após o uso (metódo run com flag --rm): docker run --rm NOMEDAIMAGEM === COPIAR ARQUIVOS ENTRE CONTAINERS E DIRETÓRIOS === Comando para copiar arquivos entre containers e diretórios: docker cp NOMEDOCONTAINERRODANDO:LOCALENOMEDOARQUIVO ENDEREÇODODESTINO === VERIFICAR INFORMAÇÕES DO CONTAINER === Comando para verificar as informações de um container: docker top NOMEDOCONTAINEROUID === INSPECIONAR CONTAINER === Comando para inspecionar container: docker inspect NOMEOUIDDOCONTAINER === CONECTAR O DOCKER AO DOCKER HUB === Crie uma conta no Docker Hub Comando para autenticar o docker no docker hub: docker login Coloque seu nome de usuário e senha Comando para desconectar do Docker Hub: docker logout === ENVIAR IMAGENS PARA O DOCKER HUB === (salvar imagem) Primeiro voce deve ter autenticado a conta no Docker Hub e criar o repositório no Docker Hub Você deve criar a build utilizando: docker build - t NOMEDEUSUARIODOCKERHUB/NOMEDOREPOSITORIOCRIADO . Comando para enviar uma imagem para o Docker Hub: docker push NOMEDEUSUARIODOCKERHUB/NOMEDOREPOSITORIOCRIADO(igual da build) Para atualizar uma imagem, fazer o build com nova tag e fazer o push para o docker hub exemplo: docker build - t NOMEDEUSUARIODOCKERHUB/NOMEDOREPOSITORIOCRIADO:NOMEDAVERSÃO . docker push NOMEDEUSUARIODOCKERHUB/NOMEDOREPOSITORIOCRIADO:NOMEDAVERSÃO (igual da build) Comando para baixar o repositório criado do Docker Hub: docker pull NOMEDEUSUARIODOCKERHUB/NOMEDOREPOSITORIOCRIADO:NOMEDAVERSÃO === VOLUMES === Volumes é a forma de persistir/manter os dados alterados independentes do container (backup de dados) Comando para ver todos os volumes (named e anonymous) do ambiente de trabalho: docker volume ls Comando para criar volume nomeado manualmente docker volume create NOMEDOVOLUME Comando para inspecionar um volume: docker volume inspect NOMEDOVOLUME Comando para remover volumes: docker volume rm NOMEDOVOLUME Comando para remover todos os containers não utilizados: docker volume prune === TIPOS DE VOLUMES === ANÔNIMOS(anonymous): Diretórios criados pela flag -v com nome aleatório NOMEADOS(named): Volumes com nomes, pode se referir ao nome e identificar o uso no projeto BIND MOUNTS: Salva os dados na máquina sem gerenciamento do Docker, deve informar um diretório === VOLUME ANÔNIMO === Comando para criar volume anônimo (flag -v /data): docker run -v /data exemplo: docker run -d -p 80:80 --name NOMEDOCONTAINER -v /data NOMEDAIMAGEM === VOLUME NOMEADO === Comando para criar volume anônimo (flag -v NOMEDOVOLUME:/data): docker run -v NOMEDOVOLUME:/data exemplo: docker run -d -p 80:80 --name NOMEDOCONTAINER -v NOMEDOVOLUME:/DIRETÓRIOIGUALDOWORKDIRDODOCKERFILE NOMEDAIMAGEM === VOLUME BIND MOUNTS === Volumes big mounts não aparecem na listagem de volumes do docker Comando para criar volume anônimo (flag -v /DIRETÓRIO/NOMEDOVOLUME:/data): docker run -v /DIRETÓRIO/NOMEDOVOLUME:/data exemplo: docker run -d -p 80:80 --name NOMEDOCONTAINER -v /DIRETÓRIO/NOMEDOVOLUME:/DIRETÓRIOIGUALDOWORKDIRDODOCKERFILE NOMEDAIMAGEM exemplo no windows (barrado caminho é invertida(padrão windows)(copiar caminho/path pelo vscode)): docker run -d -p 80:80 --name phpmessages_container -v H/var/www/html/ --rm phpmessages === UTILIZANDO O BIND MOUNT PARA ATUALIZAR O CONTAINER EM TEMPO REAL === Coloque o diretório apontando para o diretório raiz do projeto que as alterações serão aplicadas em tempo real no container. === CONFIGURANDO VOLUME SOMENTE LEITURA === Comando para configurar um volume para somente leitura (parametro :ro) docker run -d -p 80:80 --name NOMEDOCONTAINER -v NOMEDOVOLUME:/DIRETÓRIOIGUALDOWORKDIRDODOCKERFILE:ro NOMEDAIMAGEM === NETWORKS DOCKER === É utilizada para gerenciar a conexão entre vários containers e com outras platafotmas São criadas fora dos containers como os volumes Comando para listar as redes/networks: docker network ls Comando para criar uma rede bridge: docker network create NOMEDAREDE Comando para criar especificando o driver a ser utilizado: docker network create -d TIPODODRIVER NOMEDAREDE Comando para remover uma rede: docker network rm NOMEDAREDE Comando para remover todas as redes que não estiverem sendo utilizadas: docker network prune Comandor para conectar um container a uma rede: docker network connect NOMEDAREDE IDDOCONTAINER Comando para desconectar um container de uma rede: docker network disconnect NOMEDAREDE IDDOCONTAINER Comando para inspecionar redes: docker network inspect NOMEDAREDE Comando para conectar um container a uma rede na inicialização (flag --network NOMEDAREDE): docker run -d -p 3306:3306 --name NOMEDOCONTAINER --rm --network NOMEDAREDE NOMEDAIMAGEM Comando para o MySQL não pedir senha na conexão (flag -e MYSQL_ALLOW_EMPTY_PASSWORD=True): Inserir a flag no comando docker run === TIPOS DE CONEXÃO === EXTERNA: Conexão com api de servidor remoto HOST: Conexão com o computador que esta rodando o Docker ENTRE CONTAINERS: Conexão direta entre containers === TIPOS DE DRIVERS === BRIDGE: É o default, permite que containers façam a conexão entre si HOST: Permite a conexão do Docker com o computador onde esta sendo executado (IP do host = host.docker.internal) MACVLAN: Permite a conexão a um container pelo endereço MAC NONE: Remove as conexões de rede de um container PLUGINS: Permite utilizar extensões de terceiros para a conexão === POSTMAN - PROGRAMA PARA TESTE/DESENVOLVIMENTO DE API === Mesma função do Insomnia https://www.postman.com/ sudo snap postman === YAML === --- Linguangem de configuração utilizada para configurar o Docker Compose --- - Utiliza arquivos .yml ou .yaml - Fim da linha é o fim da instrução - não utiliza ponto ou virgula - A identação deve conter um ou mais espaços (não usar tab), cada uma define um novo bloco - O espaço é obrigatório após a chave Exemplo: nome: "Fulano" idade: 30 altura: 1.90 objeto: versao: 2 arquivo: teste - Comentários são iniciados com o caractere #, exemplo: # Exemplo de Comentário YAML - Aceita numero inteiros e floats - Strings podem ser inseridas com ou sem aspas - as duas formas são válidas - Valores nulos podem ser aferidos pelo caractere ~ ou pela palavra reservada null - O valor booleano verdadeiro é expressado pelas palavras reservadas True ou On - O valor booleano falso é expressado pelas palavras resevadas False ou Off - As listas podem ser inseridas utilizando [] ou como a sintaxe do segundo exemplo: Lista1: [1, 2, 3, 4, 5] Lista2: - 1 - 2 - 3 - Os objetos ou dicionários podem ser incluidos com {} ou como a sintaxe do segundo exemplo: objeto 1: { a: 1, b: 2, c: 3 } objeto 2: chave: 1 chave: 2 chave: 3 === DOCKER COMPOSER === - É uma ferramenta para rodar multiplos containers através de um arquivo de configuração - Consegue rodar multiplas builds e runs Comando para verificar os serviços do Docker Compose: docker-compose ps === INSTALAÇÃO === https://docs.docker.com/compose/install/ sudo snap install docker sudo apt install docker-compose Comando para verificar se o Docker Compose já esta instalado: docker compose version === ARQUIVO DOCKER-COMPOSE.YML === -- Exemplo de arquivo docker-compose.yml (Roda MySQL e WordPress): version: '3.3' services: # Container de MySQL db: image: mysql:5.7 # FROM mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: usuario MYSQL_PASSWORD: senha # Container de WordPress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: usuario WORDPRESS_DB_PASSWORD: senha WORDPRESS_DB_NAME: wordpress volumes: db_data: {} === COMANDOS DOCKER COMPOSE === Comando para executar o Docker Compose: docker-compose up docker compose up (só funciona nas versões mais novas) Comando para rodar o Docker Compose em background (flag -d) docker-compose up -d Comando para parar o Docker Compose rodando em background: docker-compose down Comando para parar o Docker Compose rodando no terminal: ctrl + c === VARIÁVEIS DE AMBIENTE === - São definida em um arquivo env_file - São chamadas utilizando ${NOMEDAVARIAVEL} ou carregando o arquivo como no exemplo abaixo: env_file: - ./config/wp.env === NETWORKS NO COMPOSE === - O compose cria utilizando uma rede do tipo bridge entre os containers - A rede pode ser isolada com a chave networks para conectar somente alguns dos containers - Pode ser definido drives diferentes - EXEMPLO de configuração docker-compose.yaml com definição de rede e uso de arquivo .env: version: '3.3' services: # Container de MySQL db: image: mysql:5.7 # FROM mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always env_file: - ./config/db.env networks: - backend # Container de WordPress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always env_file: - ./config/wp.env networks: - backend volumes: db_data: {} networks: backend: driver: bridge === EXEMPLO DE DOCKER-COMPOSE.YAML PARA USAR IMAGENS DOCKER === version: '3.3' services: db: image: mysqlcompose restart: always env_file: - ./config/db.env ports: - "3306:3306" networks: - dockercompose backend: depends_on: - db image: flaskcompose ports: - "5000:5000" restart: always networks: - dockercompose networks: dockercompose: === EXEMPLO DE DOCKER-COMPOSE.YAML PARA CRIAR AS BUILDS === version: '3.3' services: db: build: ./mysql/ restart: always env_file: - ./config/db.env ports: - "3306:3306" networks: - dockercompose backend: depends_on: - db build: ./flask/ ports: - "5000:5000" restart: always networks: - dockercompose networks: dockercompose: === EXEMPLO DE DOCKER-COMPOSE.YAML COM VOLUME BIND MOUNT === version: '3.3' services: db: build: ./mysql/ restart: always env_file: - ./config/db.env ports: - "3306:3306" networks: - dockercompose backend: depends_on: - db build: ./flask/ ports: - "5000:5000" restart: always volumes: - /home/noteubuntu/Área de Trabalho/Curso Docker Udemy/Vs Files/Sessão 7 - Docker Composer/6_bind_mount_compose/flask:/app networks: - dockercompose networks: dockercompose: