docker run -it name-of-image bash# docker run -it miniconda3:latest bash# docker run -it node:latest bash
Mas continue lendo para mais. 😉
Docker não é diferente! Você está executando um computador dentro de outro computador. Talvez esse computador seja uma instância do EC2 ou um laptop. Você pode até ficar louco e executar uma VM que está executando o Docker.
Na maioria das vezes, quando uso o Docker, uso-o para empacotar e distribuir um aplicativo. Às vezes, eu o uso para algo mais bacana, como um projeto de computação distribuída, mas muitas vezes estou lançando um Dockerfile em um repositório do GitHub para não precisar instalar CLIs que, sei que acabarão por entrar em conflito com o meu laptop .
Experimente
Pesquise no Docker da sua linguagem de programação favorita. Para mim, este é Python, e especificamente eu gosto de conda. Em seguida, execute alguns comandos para garantir que você esteja de fato nesse shell.
# From Hostecho $(pwd)# Drop into docker shelldocker run -it miniconda3:latest bash# Now you are in the docker shell!echo $(pwd)echo $USER
Legal né? Isso é perfeito para depurar um contêiner que absolutamente deveria estar funcionando corretamente. Também é ótimo para o meu caso de uso mais comum “Não quero instalar isso no meu computador”.
Depurar uma compilação do Docker com o Docker Run
Tratar sua imagem do Docker como um shell comum será útil ao tentar depurar as compilações do Docker.
Digamos que você tenha um Dockerfile para uma imagem que você está tentando criar. Normalmente, o que acontece é que ao executar docker build -t my-image .
(-t é para tag) O Docker executará cada uma das etapas de EXECUÇÃO e parará quando chegar a um comando que não sai corretamente.
Em um shell unix, o código de saída que significa que tudo está bem com um comando é 0. Portanto, para ilustrar esse ponto, nosso Dockerfile possui um comando RUN que sai com 1.
FROM continuumio/miniconda3:latestRUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essentialRUN conda update conda && conda clean --all --yesRUN exit 1
docker build -t my-image .
Isso fornecerá uma saída parecida com:
(base) ➜ my-image docker build -t my-image .Sending build context to Docker daemon 2.048kBStep 1/4 : FROM continuumio/miniconda3:latest ---> 406f2b43ea59Step 2/4 : RUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essential ---> Using cache ---> 726af29a48a0Step 3/4 : RUN conda update conda && conda clean --all --yes ---> Using cache ---> 19478bb3ce67Step 4/4 : RUN exit 1 ---> Running in 7c98aab6b52cThe command '/bin/sh -c exit 1' returned a non-zero code: 1
Você pode confirmar que sua imagem do Docker não foi criada executando docker images
e verificando se my-image
. Não estará lá porque não foi construído com sucesso.
AGORA, o que podemos fazer é comentar esse incómodo comando Dockerfile RUN.
FROM continuumio/miniconda3:latestRUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essentialRUN conda update conda && conda clean --all --yes#RUN exit 1
Agora o que você verá é:
Sending build context to Docker daemon 2.048kBStep 1/3 : FROM continuumio/miniconda3:latest ---> 406f2b43ea59Step 2/3 : RUN apt-get update -y; apt-get upgrade -y; apt-get install -y vim-tiny vim-athena build-essential ---> Using cache ---> 726af29a48a0Step 3/3 : RUN conda update conda && conda clean --all --yes ---> Using cache ---> 19478bb3ce67Successfully built 19478bb3ce67Successfully tagged my-image:latest
Agora você pode soltar sua imagem do Docker e começar a executar comandos interativamente!
docker run -it my-image bash# you can also run# docker run -it my-image:latest bash
A partir daqui, um por um, você pode começar a depurar seus comandos RUN para ver o que deu errado. Se você não tiver certeza se um comando saiu corretamente ou não, execute $?
:
# First run docker run -it my-image bash to get to the shell# Print the string helloecho "hello"# helloecho $?# 0# Run a non existant command hello$(hello)# bash: hello: command not foundecho $?# 127
Você pode continuar executando essas etapas, comentando seu arquivo do Docker, inserindo-o em um shell, descobrindo comandos problemáticos, até que as imagens do Docker sejam construídas perfeitamente.
Embrulhar
Felizmente, mostrei que o uso de uma imagem do Docker não é diferente do terminal do seu computador! Usar imagens do Docker é uma maneira incrível de distribuir aplicativos.
Tente usar seu aplicativo CLI favorito ou o próximo projeto GitHub e, em vez de criar um script de instalação, empacote-o com o Docker. 😉