Conectar Containers com Link

DockerBeginner
Pratique Agora

Introdução

O Docker é uma ferramenta poderosa para implantar aplicações, mas inicialmente pode parecer complexo. Este desafio guiará você na vinculação de containers Docker para criar uma aplicação multi-container. Começaremos com exemplos simples e progrediremos gradualmente para uma aplicação mais complexa. Mesmo que você seja novo no Docker, achará este guia fácil de seguir. Exploraremos como fazer os containers se comunicarem entre si, o que é um aspecto fundamental na construção de aplicações robustas com Docker.

Criar uma Imagem com Dockerfile

Antes de podermos vincular containers, precisamos ter pelo menos uma aplicação containerizada. Nesta etapa, você criará um Dockerfile para sua imagem my-app. Este Dockerfile definirá o ambiente e a aplicação que será executada dentro do container.

Tarefa

O objetivo desta etapa é criar um Dockerfile para sua imagem my-app.

Requisitos

  • O Docker deve estar instalado em sua máquina.
  • Você deve ter uma aplicação my-app existente que deseja containerizar.

Exemplo de Resultado

  1. Crie os arquivos necessários para o desafio:

    Crie um novo arquivo chamado Dockerfile no caminho /home/labex/project/ com o seguinte conteúdo:

    • Use python:3.7-slim como imagem base.
    • Defina o diretório de trabalho como /app.
    • Copie o conteúdo do diretório atual para dentro do container em /app.
    • Instale os pacotes necessários.
    • Exponha a porta 80 para o mundo exterior.
    • Defina uma variável de ambiente (embora não a usemos neste exemplo, mantenha a instrução).
    • Execute o app.py quando o container iniciar.

    Crie um arquivo chamado app.py no seu diretório de projeto /home/labex/project/ com o seguinte conteúdo:

    import os
    
    os.system("wssh --address='0.0.0.0' --port=80")

    Crie um arquivo chamado requirements.txt no seu diretório de projeto /home/labex/project/ com o seguinte conteúdo:

    webssh==1.6.2
    labex:project/ $ pwd
    /home/labex/project
    labex:project/ $ ll
    total 12K
    -rw-r--r-- 1 labex labex 59 Jan 24 15:21 app.py
    -rw-r--r-- 1 labex labex 163 Jan 24 15:19 Dockerfile
    -rw-r--r-- 1 labex labex 14 Jan 24 15:21 requirements.txt
  2. Use o comando docker build para construir a imagem my-app.

    labex:project/ $ docker images | grep my-app
    my-app latest 266edf714faf 30 seconds ago 170MB
  3. Inicie um novo container usando a imagem my-app e observe o mapeamento de portas.

    labex:project/ $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    11f06f08d2d3 my-app "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:8080- hopeful_elgamal > 80/tcp
  4. Abra um navegador web e navegue até http://localhost:8080 para verificar se sua aplicação está rodando corretamente.

    Aplicação web rodando no navegador
✨ Verificar Solução e Praticar

Vinculando Dois Containers Docker

Agora que temos uma aplicação containerizada, vamos passar para a vinculação de containers. Nesta etapa, aprenderemos como vincular dois containers Docker, permitindo que eles se comuniquem entre si. Este processo é fundamental para criar aplicações de múltiplos serviços no Docker.

Tarefa

Vincular um container de servidor web Apache com um container de banco de dados MySQL.

Requisitos

  • Você precisará de dois containers Docker: um executando Apache e outro executando MySQL.
  • O Docker deve estar instalado em sua máquina.

Dica

  • Lembre-se de abrir um novo terminal para iniciar esta etapa, para que não haja conflito com o container anterior.

Exemplo de Resultado

Acessar o MySQL a partir do container Apache:

  1. Inicie um container Apache chamado my_apache baseado na imagem httpd, mapeando a porta 80 do host para a porta 80 do container.

    labex:project/ $ docker ps | grep my_apache
    a91a93216e84 httpd "httpd-foreground" 52 seconds ago Up 47 seconds 0.0.0.0:80- my_apache > 80/tcp
  2. Inicie um container MySQL chamado my_mysql, definindo a variável de ambiente MYSQL_ROOT_PASSWORD como password, usando a imagem mysql.

    labex:project/ $ docker ps | grep mysql
    0cb864cf97c6 mysql "docker-entrypoint.s…" 42 seconds ago Up 35 seconds 3306/tcp, 33060/tcp my_mysql
  3. Vincule o container Apache ao container MySQL.
    Nota: Para esta etapa, não é esperado um output direto de comando, mas o link estará visível nas variáveis de ambiente do container. Você pode inspecionar o container com o comando docker inspect my_apache.

    labex:project/ $ docker ps | grep my_app
    859c201b7267 my-app "python app.py" 53 seconds ago Up 52 seconds 80/tcp my_app
  4. Use o comando docker exec para acessar a interface de linha de comando do MySQL a partir do container my_app (você precisará adaptar o comando se tiver feito a vinculação de forma diferente).

    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.3.0 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MySQL [(none)]>
✨ Verificar Solução e Praticar

Vinculando Múltiplos Containers Docker e Usando Variáveis de Ambiente

Com base na etapa anterior, exploraremos agora como vincular múltiplos containers e aproveitar as variáveis de ambiente para configuração. Esta etapa mostra como criar ambientes multi-container mais complexos e flexíveis.

Tarefa

Inicie três containers: um executando Apache, um executando MySQL e um executando uma aplicação personalizada. A aplicação personalizada deve ser capaz de acessar tanto o MySQL quanto o Apache.

Requisitos

  • Você precisará de três containers Docker: Apache, MySQL e uma aplicação personalizada.
  • O Docker deve estar instalado em sua máquina.

Exemplo de Resultado

  1. Inicie um container Apache e um MySQL conforme descrito na Etapa 2.

  2. Inicie um container de aplicação personalizada chamado my_app2 que possa acessar tanto o MySQL quanto o Apache.

    labex:project/ $ docker ps | grep app2
    8945b42659a6 my-app "python app.py" 15 seconds ago Up 15 seconds 80/tcp my_app2
  3. Use o curl para acessar a aplicação personalizada através do container Apache.

    <html>
      <body>
        <h1>It works!</h1>
      </body>
    </html>
✨ Verificar Solução e Praticar

Resumo

Neste desafio, você aprendeu como vincular containers Docker para criar aplicações multi-container. Progredimos de um único container para pares vinculados e, finalmente, para uma configuração de três containers. Agora você entende como utilizar links de containers e o comando docker exec para permitir a comunicação entre diferentes serviços, capacitando-o a construir aplicações mais complexas. Continue experimentando e divirta-se!