Como executar um programa Go em um contêiner Docker

DockerBeginner
Pratique Agora

Introdução

O Docker revolucionou a forma como os desenvolvedores constroem, empacotam e implantam aplicações. Neste tutorial, você aprenderá como executar um programa Go dentro de um contêiner Docker, garantindo um ambiente de execução consistente e confiável.

Introdução ao Docker

Docker é uma plataforma popular de contentores que permite aos desenvolvedores empacotar suas aplicações e todas as suas dependências em um único contêiner portátil. Este contêiner pode então ser facilmente implantado e executado em qualquer sistema que tenha o Docker instalado, independentemente do sistema operacional subjacente ou da infraestrutura.

O que é Docker?

Docker é uma plataforma de software de código aberto que automatiza a implantação, escalonamento e gerenciamento de aplicações dentro de contêineres de software. Os contêineres são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar uma aplicação, incluindo o código, o tempo de execução, as ferramentas de sistema e as bibliotecas.

Por que usar Docker?

Docker oferece vários benefícios para desenvolvedores e profissionais de TI:

  1. Consistência: Os contêineres Docker garantem que as aplicações funcionem da mesma forma, independentemente da infraestrutura subjacente.
  2. Portabilidade: Os contêineres Docker podem ser facilmente movidos entre diferentes ambientes, como desenvolvimento, testes e produção.
  3. Escalabilidade: O Docker facilita o escalonamento de aplicações para cima ou para baixo, dependendo da carga de trabalho.
  4. Eficiência: Os contêineres Docker são leves e usam menos recursos do que as máquinas virtuais tradicionais, tornando-os mais eficientes de executar.

Começando com Docker

Para começar com Docker, você precisará instalar o motor Docker em seu sistema. Você pode baixar e instalar o Docker no site oficial do Docker (https://www.docker.com/get-started). Depois de instalar o Docker, você pode começar a criar e executar contêineres Docker.

graph TD
    A[Instalar Docker] --> B[Criar Imagem Docker]
    B --> C[Executar Contêiner Docker]
    C --> D[Implantar Aplicação]

Tabela 1: Comandos da CLI do Docker

Comando Descrição
docker build Construir uma imagem Docker a partir de um Dockerfile
docker run Executar um contêiner Docker
docker ps Listar contêineres Docker em execução
docker images Listar imagens Docker
docker push Empurrar uma imagem Docker para um repositório
docker pull Puxar uma imagem Docker de um repositório

Agora que você tem uma compreensão básica do Docker, vamos prosseguir para a construção de uma aplicação Go em um contêiner Docker.

Construindo uma Aplicação Go em Docker

Criando uma Aplicação Go

Vamos começar criando uma aplicação Go simples. Crie um novo arquivo chamado main.go com o seguinte conteúdo:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, LabEx!")
    })

    fmt.Println("Iniciando servidor na porta :8080")
    http.ListenAndServe(":8080", nil)
}

Esta aplicação Go escuta na porta 8080 e responde com a mensagem "Hello, LabEx!" quando uma solicitação é feita para o URL raiz (/).

Construindo uma Imagem Docker

Para executar esta aplicação Go em um contêiner Docker, precisamos criar uma imagem Docker. Crie um novo arquivo chamado Dockerfile com o seguinte conteúdo:

FROM golang:1.18-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]

Este Dockerfile:

  1. Usa a imagem oficial golang:1.18-alpine como imagem base.
  2. Define o diretório de trabalho para /app.
  3. Copia o código da aplicação Go para o contêiner.
  4. Compila a aplicação Go e cria um executável chamado main.
  5. Define o comando para executar o executável main quando o contêiner é iniciado.

Construindo a Imagem Docker

Para construir a imagem Docker, execute o seguinte comando no mesmo diretório do Dockerfile:

docker build -t my-go-app .

Este comando constrói uma imagem Docker com a tag my-go-app.

Verificando a Imagem Docker

Você pode listar as imagens Docker disponíveis em seu sistema executando o seguinte comando:

docker images

Você deve ver a imagem my-go-app na lista.

Agora que temos uma imagem Docker para nossa aplicação Go, vamos executá-la em um contêiner Docker.

Executando a Aplicação Go em Docker

Executando o Contêiner Docker

Para executar a aplicação Go em um contêiner Docker, use o seguinte comando:

docker run -p 8080:8080 my-go-app

Este comando:

  1. Executa a imagem Docker my-go-app.
  2. Mapeia a porta 8080 do contêiner para a porta 8080 do host, permitindo que você acesse a aplicação a partir da sua máquina local.
graph TD
    A[Host Docker] --> B[Contêiner Docker]
    B --> C[Aplicação Go]
    A --"HTTP 8080"--> B

Verificando o Contêiner em Execução

Você pode listar os contêineres Docker em execução usando o seguinte comando:

docker ps

Você deve ver o contêiner my-go-app na lista.

Acessando a Aplicação Go

Para acessar a aplicação Go em execução no contêiner Docker, abra um navegador web e navegue para http://localhost:8080. Você deve ver a mensagem "Hello, LabEx!" exibida.

Parando o Contêiner Docker

Para parar o contêiner Docker em execução, use o seguinte comando:

docker stop <id_do_contêiner>

Substitua <id_do_contêiner> pelo ID do contêiner em execução, que você pode encontrar executando o comando docker ps.

Conclusão

Neste tutorial, você aprendeu como:

  1. Criar uma aplicação Go simples.
  2. Construir uma imagem Docker para a aplicação Go.
  3. Executar a aplicação Go em um contêiner Docker.
  4. Acessar a aplicação Go em execução no contêiner Docker.

Ao containerizar suas aplicações Go com Docker, você garante uma implantação consistente e confiável em diferentes ambientes, facilitando o desenvolvimento, testes e implantação de suas aplicações.

Resumo

Ao final deste tutorial, você terá um bom entendimento de como construir uma aplicação Go dentro de um contêiner Docker e executá-la, facilitando a distribuição e implantação do seu software em diferentes ambientes. A tecnologia de contentores do Docker simplifica o processo de desenvolvimento e implantação, permitindo que você se concentre na escrita de um ótimo código.