Introdução
O Docker é uma ferramenta poderosa para empacotar e distribuir aplicações como contêineres. No centro desse processo estão as imagens Docker, que são pacotes pré-construídos contendo tudo o que é necessário para executar uma aplicação, incluindo o código, dependências e configurações. Neste laboratório, você aprenderá a criar imagens Docker personalizadas que aprimoram suas aplicações ao incorporar softwares, bibliotecas ou configurações adicionais.
Ao longo deste laboratório, utilizaremos o WebIDE (VS Code) para editar arquivos. O WebIDE oferece uma interface familiar e intuitiva para a edição de arquivos, facilitando o trabalho com arquivos de configuração e código.
Configurar o Ambiente do Projeto
Vamos começar criando um diretório para o projeto e acessando-o.
Ao longo deste laboratório, utilizaremos o WebIDE (VS Code) para editar arquivos. O WebIDE oferece uma interface familiar e intuitiva para a edição de arquivos, facilitando o trabalho com arquivos de configuração e código.
- Abra um terminal no WebIDE. Você pode fazer isso clicando em "Terminal" no menu superior e selecionando "New Terminal".
- No terminal, execute os seguintes comandos:
mkdir -p ~/project/docker
cd ~/project/docker

Isso cria um novo diretório chamado docker na pasta ~/project e altera o diretório de trabalho atual para ele.
- Verifique se você está no diretório correto:
pwd
Você deverá ver /home/labex/project/docker como saída.
Entendendo esses comandos:
mkdir -p: Este comando cria um diretório. A flag-ppermite criar diretórios pai caso eles não existam.cd: Este comando altera o diretório atual.pwd: Este comando imprime o diretório de trabalho atual.
Criar uma Imagem Docker Simples
Agora, vamos criar uma imagem Docker simples que executa um servidor web Nginx.
- No WebIDE, navegue até o File Explorer (geralmente o primeiro ícone na barra lateral esquerda).
- Clique com o botão direito no painel do File Explorer e selecione "New File". Nomeie-o como
Dockerfile(com 'D' maiúsculo e sem extensão de arquivo). - Abra o
Dockerfileclicando nele no File Explorer. Adicione o seguinte conteúdo:
FROM nginx
COPY index.html /usr/share/nginx/html/
Este Dockerfile define uma nova imagem baseada na imagem oficial do Nginx e copia um arquivo chamado index.html para o diretório raiz padrão do Nginx.
Entendendo o Dockerfile:
FROM nginx: Esta linha especifica a imagem base a partir da qual estamos construindo. Neste caso, estamos usando a imagem oficial do Nginx.COPY index.html /usr/share/nginx/html/: Esta linha copia nosso arquivoindex.htmlpara o diretório raiz web do contêiner.
- Crie um novo arquivo chamado
index.htmlno mesmo diretório. Você pode fazer isso clicando com o botão direito no painel do File Explorer e selecionando "New File". - Abra o
index.htmle adicione o seguinte conteúdo:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hello Docker!</title>
</head>
<body>
<h1>Hello Docker!</h1>
<p>This is a custom Docker image.</p>
</body>
</html>
Esta é uma página HTML simples que será servida pelo nosso servidor Nginx.
- Abra um terminal no WebIDE (Terminal -> New Terminal, caso tenha fechado o anterior) e construa a imagem Docker usando o seguinte comando:
docker build -t my-nginx .
Este comando constrói uma nova imagem Docker com a tag my-nginx.
Entendendo o comando:
docker build: Este é o comando para construir uma imagem Docker.-t my-nginx: A flag-tetiqueta (tag) nossa imagem com o nomemy-nginx..: Isso especifica o contexto de build (o diretório que contém o Dockerfile) como o diretório atual.
- Assim que a construção for concluída, verifique se a imagem foi criada com sucesso:
docker images
Você deverá ver a imagem my-nginx listada na saída.
Executar e Testar a Imagem Personalizada
Vamos executar um contêiner baseado em nossa nova imagem e testá-lo.
- No terminal do WebIDE, inicie um contêiner usando o seguinte comando:
docker run -d -p 8080:80 --name my-nginx-container my-nginx
Entendendo este comando:
docker run: Este comando cria e inicia um novo contêiner.-d: Esta flag executa o contêiner em modo "detached" (em segundo plano).-p 8080:80: Isso mapeia a porta 8080 do seu host para a porta 80 no contêiner.--name my-nginx-container: Isso atribui um nome ao nosso contêiner.my-nginx: Este é o nome da imagem que estamos usando para criar o contêiner.
- Verifique se o contêiner está em execução:
docker ps
Você deverá ver my-nginx-container listado na saída. Este comando mostra todos os contêineres em execução.
- Para visualizar o conteúdo da página web, use o comando
curl:
curl http://localhost:8080
Você deverá ver o conteúdo HTML do arquivo index.html exibido no terminal.
Se você estiver curioso sobre o que o curl faz, ele é uma ferramenta para transferir dados de ou para um servidor. Neste caso, estamos usando-o para buscar o conteúdo do nosso servidor web.
Você também pode navegar até o topo da VM do LabEx, clicar em + para criar um novo servidor web e inserir a porta 8080 para visualizar o conteúdo.

Adicionar Software Personalizado à Imagem
Nesta etapa, você modificará sua imagem Docker para incluir softwares adicionais. Adicionaremos o editor de texto nano como exemplo, pois ele não está incluído na imagem base nginx.
- No WebIDE, abra o
Dockerfile. Você pode fazer isso clicando emDockerfileno painel do File Explorer. - Modifique o conteúdo do
Dockerfilepara:
FROM nginx
RUN apt-get update && apt-get install -y nano
COPY index.html /usr/share/nginx/html/
Este Dockerfile adiciona uma nova instrução RUN que atualiza o índice de pacotes e instala o pacote nano usando o gerenciador de pacotes apt-get.
Entendendo a nova linha:
RUN apt-get update && apt-get install -y nano: Esta linha atualiza a lista de pacotes (apt-get update) e, em seguida, instala onano(apt-get install -y nano). A flag-yresponde automaticamente "yes" a quaisquer prompts durante a instalação.
- Salve o arquivo no WebIDE pressionando Ctrl+S (ou Cmd+S no Mac).
- No terminal do WebIDE, reconstrua a imagem Docker com uma nova tag:
docker build -t my-nginx-nano .
Este comando constrói uma nova imagem Docker com a tag my-nginx-nano que inclui o editor nano.
- Verifique se a nova imagem foi criada:
docker images
Você deverá ver a imagem my-nginx-nano listada na saída.
Testar a Imagem Personalizada com Nano
Nesta etapa, você executará um contêiner baseado em sua nova imagem e confirmará que o pacote nano está disponível dentro dele.
- No terminal do WebIDE, inicie um novo contêiner usando o seguinte comando:
docker run -d --name nano-container my-nginx-nano
Este comando inicia um novo contêiner baseado na imagem my-nginx-nano e o nomeia como nano-container.
- Execute o seguinte comando para verificar a versão do
nanoinstalada dentro do contêiner:
docker exec nano-container nano --version
Este comando executa nano --version dentro do contêiner em execução para que você possa confirmar que o pacote está instalado.
Entendendo este comando:
docker exec: Isso executa um comando em um contêiner em execução.nano-container: Este é o nome do nosso contêiner.nano --version: Isso imprime a versão donanoinstalada de dentro do contêiner.
- Você deverá ver uma saída que começa com
GNU nano, o que confirma que a imagem personalizada agora inclui o editor.
Usar Variáveis de Ambiente na Imagem
Nesta etapa, modificaremos nossa imagem Docker para usar variáveis de ambiente para personalização.
No WebIDE, abra o
Dockerfilenovamente.Modifique o conteúdo do
Dockerfilepara:
FROM nginx
ENV NGINX_PORT 9000
RUN sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf
COPY index.html /usr/share/nginx/html/
Este Dockerfile adiciona uma instrução ENV que define a variável NGINX_PORT como 9000. Ele também inclui uma instrução RUN que modifica a configuração do Nginx para usar esta porta.
Entendendo as novas linhas:
ENV NGINX_PORT 9000: Isso define uma variável de ambienteNGINX_PORTcom o valor9000.RUN sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf: Isso usa osedpara substituir a porta padrão (80) pela nossa variável de ambiente no arquivo de configuração do Nginx.
Salve o arquivo no WebIDE.
No terminal do WebIDE, reconstrua a imagem Docker com uma nova tag:
docker build -t my-nginx-env .
- Execute um contêiner baseado na nova imagem:
docker run -d -p 9000:9000 --name env-container my-nginx-env
Este comando inicia um novo contêiner baseado na imagem my-nginx-env e mapeia a porta 9000 no host para a porta 9000 no contêiner. Observe que a variável de ambiente já está definida no Dockerfile, portanto, não é necessário defini-la novamente no comando docker run.
- Verifique se o servidor web está em execução na porta especificada:
curl http://localhost:9000
Você deverá ver o conteúdo HTML do arquivo index.html exibido no terminal.
Usar ENTRYPOINT no Dockerfile
Nesta etapa, aprenderemos como usar a instrução ENTRYPOINT em um Dockerfile e usar uma porta diferente (9100).
No WebIDE, abra o
Dockerfilenovamente.Modifique o conteúdo do
Dockerfilepara:
FROM nginx
COPY index.html /usr/share/nginx/html/
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh"]
Este Dockerfile remove a variável de ambiente e o comando sed. Em vez disso, lidaremos com a configuração em tempo de execução usando um script ENTRYPOINT. Isso torna nossa imagem mais flexível.
- Crie um novo arquivo chamado
start.shno mesmo diretório com o seguinte conteúdo:
#!/bin/bash
## Set a default port if NGINX_PORT is not set
export NGINX_PORT=${NGINX_PORT:-9100}
## Replace the port in the nginx configuration
sed -i "s/listen[[:space:]]*80;/listen $NGINX_PORT;/g" /etc/nginx/conf.d/default.conf
echo "Starting Nginx on port $NGINX_PORT"
nginx -g 'daemon off;'
Este script define uma porta padrão, modifica a configuração do Nginx na inicialização do contêiner, imprime uma mensagem mostrando em qual porta o Nginx será executado e, em seguida, inicia o Nginx.
Salve ambos os arquivos no WebIDE.
No terminal do WebIDE, reconstrua a imagem Docker com uma nova tag:
docker build -t my-nginx-entrypoint .
- Execute um contêiner baseado na nova imagem. Definiremos a porta como 9100 usando uma variável de ambiente.
docker run -d -p 9100:9100 -e NGINX_PORT=9100 --name entrypoint-container my-nginx-entrypoint
- Verifique os logs do contêiner para ver a mensagem de inicialização:
docker logs entrypoint-container
Você deverá ver a mensagem "Starting Nginx on port 9100" na saída.
- Verifique se o servidor web está em execução corretamente na nova porta:
curl http://localhost:9100
Você deverá ver o conteúdo HTML do arquivo index.html exibido no terminal.
Resumo
Neste laboratório, você aprendeu como criar imagens Docker personalizadas que agregam valor às suas aplicações. Você começou criando uma imagem simples com um servidor web, depois progrediu para adicionar softwares personalizados e usar variáveis de ambiente para configuração. Ao longo do laboratório, você utilizou o WebIDE (VS Code) para editar arquivos, tornando o processo mais intuitivo e amigável.
Aqui está um resumo do que você realizou:
- Configurou um ambiente de projeto e aprendeu comandos básicos de terminal.
- Criou uma imagem Docker simples com Nginx e uma página HTML personalizada.
- Construiu e executou contêineres Docker, aprendendo sobre mapeamento de portas e nomeação de contêineres.
- Modificou uma imagem Docker para incluir softwares adicionais (curl).
- Usou o
docker execpara executar comandos dentro de um contêiner. - Incorporou variáveis de ambiente em sua imagem Docker para facilitar a configuração.



