Day 2 Flashcards
Quais os tipos de storage que podem ser montados no Docker ?
Bind - Um diretório já existente é montado como file system no container
Volume - São criados e gerenciados pelo Docker. A área onde os volumes são armazenados são isoladas do resto do host.
tmpfs - As informações são armazenadas em memória
named pipes - É utilizada para a comunicação entre o host e o container.
Quais os principais parâmetros devo passar para se montar um volume quando vamos rodar um container ?
type - Tipo de volume bind ou volume
source - Diretório origem no seu host
destination - Nome do file system que será criado
ro - Read Only
Como faço para criar um container ubuntu que tenha acesso ao diretório /acme criado no meu host e que tenha o nome de /application/data no container ?
docker container run -it –mount type=bind,source=acme,destination=/application/data ubuntu
Como faço para criar um volume de nome application ?
docker volume create application
Onde são armazenados os dados do volumes no docker ?
/var/lib/docker/volumes/
Qual comando posso utilizar para saber onde os dados do volume application estão armazenados no meu host ?
docker volume inspect application
Qual comando posso utilizar para verificar quais volumes estão armazenados em um host ?
docker volume list
Qual comando posso utilizar para deletar um volume de nome application ?
docker volume rm application
Estou rodando um container que tem um volume montado de nome application. Criei um arquivo de nome faturamento.txt.
Onde no host está localizado esse arquivo ?
/var/lib/docker/volumes/application/_data
Tentei rodar o comando:
docker volume rm application
Mas apareceu a seguinte mensagem:
Error response from daemon: remove application: volume is in use - [25f5cfab021c1ba3a9b3eefa8dacdc3e64c61f320d67008fc21769053e6dce8c, 5123f59a8eefc400cefb6c5795d34951b8554d1c4bfe8facc42225c3fbebc987]
Porque não consigo remove-lo ?
O volume application está vinculado aos containers 25f5cfab021c1ba3a9b3eefa8dacdc3e64c61f320d67008fc21769053e6dce8c e 5123f59a8eefc400cefb6c5795d34951b8554d1c4bfe8facc42225c3fbebc987 mesmo eles não estando rodando nesse momento.
Como faço para verificar quais volumes estão montados em um container ?
docker container inspect (id) ou (nome)
Como faço para deletar todos os containers que não estão rodando nesse momento ?
docker container prune
Como faço para deletar todos os volumes que não estão em uso?
docker volume prune
Rodei o comando docker volume prune. Após isso rodei o comando: docker volume list DRIVER VOLUME NAME local acme
Porque o volume acme não foi deletado ?
Porque o volume acme está vinculado a um container.
Rodei o comando docker container prune.
Após isso rodei o comando docker container list –all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
754ec996412f ubuntu “/bin/bash” 20 hours ago Up 20 hours great_moser
Porque o container 754ec996412f não foi deletado?
Porque o container 754ec996412f está em uso no momento.
O que é um data-only-container
É um container que é criado com um volume montado e que serve para outros containers utilizarem o volume. Nesse modo não é possível deletar o volume pois ele indicara que está em uso por um container.
De um exemplo do comando para criar um data-only-container ?
docker container create –name dados –mount type=volume,source=acme,destination=/dados centos
Qual o objetivo de um docker file ?
O objetivo de um docker file é servir de receita para criar imagens personalizadas.
Qual o nome do arquivo responsável pela personalização de uma imagem?
Dockerfile
No DockerFile abaixo qual o significado de cada linha ?
MAINTAINER “Marco Ren”
FROM debian
RUN apt-get update && apt-get install -y apache2 && apt-get clean
ENV APACHE_LOCK_DIR=”/var/lock”
ENV APACHE_PID_FILE=”/var/run/apache2.pid”
ENV APACHE_RUN_USER=”www-data”
ENV APACHE_RUN_GROUP=”www-data”
ENV APACHE_LOG_DIR=”/var/log/apache2”
COPY index.html /var/www/html
ADD index.html /var/www/html
USER root
WORKDIR /var/www/html
LABEL description=”Webserver”
VOLUME /var/www/html
EXPOSE 80
ENTRYPOINT [“/usr/sbin/apachectl”]
CMD [“-D”,”FOREGROUND”]
MAINTAINER - Define um comentário de quem é o autor da imagem
FROM - Qual imagem será baseada para construir a nova imagem
RUN - Comandos que serão executados na hora da criação da nova imagem
ENV - Definição de variáveis que serão utilizadas na nova imagem
COPY - Copia o arquivo para o destino especificado dentro do container
ADD - Copia o arquivo para o destino especificado dentro do container.
USER - Especifica que o usuário root irá executar os comandos ENTRYPOINT, CMD e RUN
WORKDIR- Especifica qual o diretório onde serão executadas as instruções ENTRYPOINT, RUN E CMD.
LABEL - Criação de labels
VOLUME - Criação de volumes com nomes especificados
EXPOSE - Especifica em qual porta o docker estará escutando (LISTENING)
ENTRYPOINT - Designa qual o principal processo que irá rodar no container
CMD - Em conjunto com a entrada ENTRYPOINT define os parâmetros para a mesma.
Qual comando utilizo para criar uma nova imagem a partir de um Dockerfile ?
docker image build -t (tag) (diretório)
Qual comando posso utilizar para verificar quais imagens estão no meu host ?
docker image list
O que são imagens intermediárias ?
Cada entrada no arquivo Dockerfile ao ser executada pelo build gera uma imagem intermediária.
Como faço para deletar uma imagem de nome debian?
docker image rm debian
Ao tentar deletar a imagem meu_apache apareceu a seguinte mensagem:
Error response from daemon: conflict: unable to remove repository reference “meu_apache:1.1.1” (must force) - container e507d0ee939b is using its referenced image 0dfdb3e756c4
Porque ocorreu isso ?
A imagem em questão estava em uso e por conta disso não é possível deleta-la.
Como faço para deletar todas as imagens que não estão em uso ?
docker image prune –all
Como faço para fazer o build de uma imagem sem utilizar o cache ?
Use a opção –no-cache
Qual entrada posso colocar no arquivo Dockerfile para copiar um arquivo e alterar o owner para www-data ?
ADD –chown=user:group arquivo.txt /data
COPY –chown=user:group arquivo.txt /data
Quando em um docker file existe a entrada ENTRYPOINT qual a função da entrada CMD ?
Apenas passar argumentos para o comando principal do entrypoint. É obrigatório utilizar o modo exec.
Quando não temos a entrada ENTRYPOINT no arquivo docker file qual a função da entrada CMD ?
A entrada CMD fica com função de comando principal que é executado pelo modo shell (bash).
Qual a diferença principal entra as entradas COPY e ADD no docker file ?
A entrada COPY copia arquivos ou diretórios do host para dentro do container.
A entrada ADD além de copiar arquivos e diretórios para um container pode pegar um arquivo .tar e copiar somente o seu conteúdo para o diretório destino.
Copia arquivos de URLs definidas na entrada para o diretório destino.
Como eu crio um docker file multi stage ?
O docker file multi stage tem duas entradas FROM.
A primeira tem as seguintes informações no fim AS (string).
A segunda entrada é normal, mas é necessário ter uma entrada referenciando o primeiro FROM conforme abaixo:
COPY –from=(string) origem destino
Qual a principal função do muti stage na criação de imagens ?
A função principal do multi stage é criar imagens menores.
Quero ignorar a copia de alguns arquivos na entrada COPY, como posso fazer ?
Inclua os arquivos que você quer ignorar em um arquivo com o nome de .dockerignore na mesma pasta onde se encontra o docker file.
O que é SHELL FORM nas entradas CMD ou ENTRYPOINT?
O SHELL FORM é utilizado como se fosse uma linha de comando dentro do shell conforme abaixo:
comando param1 param2
O que é EXEC FORM nas entradas CMD ou ENTRYPOINT ?
O EXEC FORM é dividido em parâmetros conforme abaixo:
[“comando”,”param1”,”param2”]
A variável abaixo foi definida dentro de um docker file.
ENV app_home /home/app
Como posso referenciar essa variável dentro do docker file ?
${app_home}
Qual a função da entrada ARG dentro de um docker file ?
A entrada ARG serve para se passar argumentos na hora de se criar imagens. Esses argumentos são passados na linha de comando docker build conforme abaixo:
docker build –build-arg ARGUMENTO=(valor) Dockerfile
Qual o modo de substituir uma variável por um argumento dentro de um docker file ?
Qual comando devo utilizar para criar essa imagem ?
ARG variavel
ENV variavel=${variavel:-string}
docker image bulid –build-arg variavel=outrastring -t (tag) Dockerfile
Como montar um health check dentro do docker file ?
HEALTHCHECK –interval=(#)m –timeout=(#)s CMD (comando de teste) || exit 1
Como faço para criar uma imagem a partir de um container rodando ?
docker commit (id) ou (nome)
Acabei de dar um commit em um container rodando, como faço para dar uma tag a ele ?
docker image tag (id) (tag:version)
Como faço para me logar no Docker Hub ?
docker login
O que são e como deleto dangling images ?
As imagens do Docker consistem em várias camadas. Imagens dangling são imagens de camadas intermediárias que não têm relação com nenhuma imagem. Eles não têm mais um propósito e consomem espaço em disco.
docker image prune
Qual comando posso rodar para identificar imagens dangling ?
docker image list –filter dangling=true
Ao rodar o comando docker image list
$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
webserver 1.0 6dbb9cc54074 3 days ago 5.61MB
nginx latest 62d49f9bab67 4 days ago 133MB
Como faço para subir a imagem webserver para meu repositório no Docker Hub (usuário projeto) ?
1 - Renomear o nome da imagem para refletir o nome do repositório
docker image tag (id) projeto/webvserver:1.0
2 - Após a imagem estar renomeada podemos rodar o push
docker push projeto/webserver:1.0
Qual comando uso para baixar imagens do Docker Hub ?
docker pull username/imagem:version
Como também é conhecido o repositório de imagens ?
Registry
Como faço para criar um repositório de imagens privado ?
docker container run -d -p 5000:5000 –name registry registry
Como faço para subir uma imagem para o meu repositório privado ?
1 - Renomear a imagem para de acordo com o repositório
docker image tag (id) URL:port/imagem:version
2- Fazer o push da imagem conforme nome renomeado
docker push URL:port/imagem:version
Como faço para verificar as imagens armazenadas no repositório privado ?
curl -X GET URL:port/v2/_catalog
Como faço para verificar as versões das imagens armazenadas no repositório privado ?
curl -X GET URL:port/v2/(imagem)/tags/list
Como rodar um container nginx e publicar a porta 8080 ?
docker container run -d -p 8080:80 nginx
Quais são as politicas de restart disponíveis para se rodar um container ?
- no (default)
- on-failure - Somente se o container sair com código de saída diferente de zero
- unless-stopped - Reinicie o contêiner, a menos que ele seja explicitamente interrompido ou o próprio Docker seja interrompido ou reiniciado.
- Always - Sempre reinicie o contêiner, independentemente do status de saída
Quais as vantagens de se utilizar montagem de volumes ao invés de montagens bind ?
- Volumes são mais fáceis de fazer backup ou migrar do que montagens de bind.
- Você pode gerenciar volumes usando comandos Docker CLI ou a API Docker.
- Os volumes funcionam em contêineres Linux e Windows.
- Os volumes podem ser compartilhados com mais segurança entre vários contêineres.
- Os drivers de volume permitem que você armazene volumes em hosts remotos ou provedores de nuvem, para criptografar o conteúdo dos volumes ou para adicionar outra funcionalidade.
- Novos volumes podem ter seu conteúdo pré-preenchido por um contêiner.
- Os volumes no Docker Desktop têm desempenho muito superior do que montagens vinculadas de hosts Mac e Windows.