Conectar Contêineres com Link

DockerBeginner
Pratique Agora

Introdução

O Docker é uma ferramenta poderosa para implantar aplicações, mas pode parecer complexo inicialmente. Este desafio irá guiá-lo através da conexão de contêineres Docker para criar uma aplicação multi-contêiner. Começaremos com exemplos simples e progrediremos gradualmente para uma aplicação mais complexa. Mesmo que você seja novo no Docker, achará fácil acompanhar. Exploraremos como fazer com que os contêineres se comuniquem entre si, o que é um aspecto fundamental para construir aplicações robustas com o Docker.

Criar uma Imagem com Dockerfile

Antes de podermos conectar contêineres, precisamos ter pelo menos uma aplicação conteinerizada. Nesta etapa, você criará um Dockerfile para sua imagem my-app. Este Dockerfile definirá o ambiente e a aplicação a ser executada dentro do contêiner.

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 conteinerizar.

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 o contêiner 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 utilizemos neste exemplo, mantenha a instrução).
    • Execute app.py quando o contêiner iniciar.

    Crie um arquivo chamado app.py em 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 em 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 contêiner 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á sendo executada corretamente.

    Aplicação web rodando no navegador

Conectando Dois Contêineres Docker

Agora que temos uma aplicação conteinerizada, vamos prosseguir para a conexão de contêineres. Nesta etapa, aprenderemos como conectar dois contêineres Docker, permitindo que eles se comuniquem entre si. Este processo é fundamental para criar aplicações multi-serviço dentro do Docker.

Tarefa

Conecte um contêiner de servidor web Apache com um contêiner de banco de dados MySQL.

Requisitos

  • Você precisará de dois contêineres Docker: um rodando Apache e outro rodando 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 contêiner anterior.

Exemplo de Resultado

Acesse o MySQL a partir do contêiner Apache:

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

    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 contêiner 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. Conecte o contêiner Apache ao contêiner MySQL. Nota: Para esta etapa, não é esperado nenhum output de comando direto, mas a conexão estará visível nas variáveis de ambiente do contêiner. Você pode inspecionar o contêiner 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 contêiner my_app (você precisará adaptar o comando se tiver conectado 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)]>
    

Conectando Múltiplos Contêineres Docker e Usando Variáveis de Ambiente

Com base na etapa anterior, esta parte adiciona duas novas ideias: um contêiner de aplicação que se conecta a ambos os serviços e o contêiner que recebe as configurações de conexão através de variáveis de ambiente. Na Etapa 2, você apenas provou que contêineres conectados podem alcançar um ao outro. Nesta etapa, você deve iniciar o my_app2 com ambas as opções --link e as variáveis de ambiente que descrevem os hosts MySQL e Apache.

Tarefa

Inicie três contêineres: um rodando Apache, um rodando MySQL e um rodando 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 contêineres Docker: Apache, MySQL e uma aplicação personalizada.
  • Inicie o my_app2 com ambos os links e estas variáveis de ambiente: DB_HOST=mysql, DB_USER=root, DB_PASSWORD=password e APACHE_HOST=apache.
  • Instale o curl dentro do my_app2 antes de testar a conexão com o Apache, pois a imagem my-app não o inclui por padrão.
  • O Docker deve estar instalado em sua máquina.

Exemplo de Resultado

  1. Inicie um contêiner Apache e um contêiner MySQL conforme descrito na Etapa 2.

  2. Inicie um contêiner 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. Entre no my_app2, instale o curl e execute curl http://apache/ para confirmar que o contêiner Apache conectado está acessível.

    <html>
      <body>
        <h1>It works!</h1>
      </body>
    </html>
    

Resumo

Neste desafio, você aprendeu como conectar contêineres Docker para criar aplicações multi-contêiner. Progredimos de um único contêiner para pares conectados e, finalmente, para uma configuração de três contêineres. Agora você tem uma compreensão de como aproveitar as conexões de contêineres e o comando docker exec para permitir a comunicação entre diferentes serviços, permitindo que você construa aplicações mais complexas. Continue experimentando e divirta-se!

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar