Uma das maneiras que gosto de trabalhar é utilizando Docker. Simplesmente por conseguir igualar o ambiente de desenvolvimento de todo um time, sem depender que cada um faça a configuração manualmente em sua máquina, ou seja, apenas uma pessoa precisa configurar o ambiente no container.

No último post falei um pouco sobre a linguagem Go. Então, nesse post vou mostrar passo a passo como montei uma imagem para começar o meu primeiro projeto em Go.

Navegue pelo índice

    1. Escolha do Sistema Operacional

    A primeira coisa a fazer é escolher o S.O. do seu container. No caso, tenho maior familiaridade com sistemas baseado em Debian, então no Dockerfile iniciamos com “FROM ubuntu:18.04”, que é a versão LTS do Ubuntu.

    Para instalarmos o Go, precisamos de alguns pacotes do ubuntu (entre eles o curl e o wget para baixarmos algumas dependências que não estão no pacote do S.O.), pacotes que vão auxiliar no desenvolvimento como git e o vim e/ou alguns pacotes para o build do pacote em Go. Para isso, vamos colocar no Dockerfile assim:

    RUN apt-get update && \
    apt-get install -y \
    build-essential \
    curl \
    gcc \
    git \
    gnupg \
    libc6-dev \
    wget \
    vim

    2. Instalação do Go

    Após instalar essas dependências, vamos começar a instalar o Go. Primeiro vamos configurar as variáveis de ambiente para a instalação do Go setando as seguintes envs:

    ENV GO_INSTALL_DIR="/usr/local/"
    ENV PATH=$PATH:$GO_INSTALL_DIR/go/bin
    ENV GOPATH="/workspace"
    ENV GOBIN="/usr/local/go/bin"

    Depois de setar as variáveis, vamos fazer o download do Go 1.11.1. Para deixar a versão do Go configurada, basta colocá-la em uma env. Feito isso, mudamos a pasta descompactada do Go para a pasta local, usando a env “GO_INSTALL_DIR” que setamos no passo anterior.

    ENV GOLANG_VERSION 1.11.1
    RUN wget “https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz”
    RUN tar zxvf “go${GOLANG_VERSION}.linux-amd64.tar.gz” -C $GO_INSTALL_DIR

    Após isso o Go está pronto para uso.

    3. Configuração do projeto

    Chegou a hora de configurar nosso projeto. Para isso, criaremos uma variável de ambiente onde ficará da pasta do projeto. Criar a pasta, setá-la como pasta de trabalho e copiar os arquivos do projeto para o container, usando os comandos:

    ENV APP_HOME /workspace/src/project
    RUN mkdir -p $APP_HOME
    WORKDIR $APP_HOME
    
    ADD . $APP_HOME

    No meu projeto, achei legal usar o dep, que é um gerenciador de dependências do Go, assim como o Composer no PHP e o Bundler do Ruby. Vamos baixar o dep com o curl e depois rodar o comando para baixar as dependências do projeto. Para isso, usaremos o comando:

    RUN curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
    RUN dep ensure -v

    Após isso, basta expor a porta que você quer usar no seu container. Por padrão ostumo expor a 8080, usando o comando:

    EXPOSE 8080

    Feito isso, seu Dockerfile deve ter ficado exatamente assim

    FROM ubuntu:18.04
    
    RUN apt-get update && \
    apt-get install -y \
    build-essential \
    curl \
    gcc \
    git \
    gnupg \
    libc6-dev \
    wget \
    vim
    
    ENV GO_INSTALL_DIR="/usr/local/"
    ENV PATH=$PATH:$GO_INSTALL_DIR/go/bin
    ENV GOPATH="/workspace"
    ENV GOBIN="/usr/local/go/bin"
    
    RUN wget https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz
    RUN tar zxvf go1.11.1.linux-amd64.tar.gz -C $GO_INSTALL_DIR
    
    RUN curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
    RUN dep ensure -v
    
    ENV APP_HOME /workspace/src/project
    RUN mkdir -p $APP_HOME
    WORKDIR $APP_HOME
    
    ADD . $APP_HOME
    
    EXPOSE 8080

    Com essa imagem, você já é capaz de rodar seu projeto em Go dentro do Docker sem precisar instalar e configurar nada além do Docker em sua máquina local. Desta forma, o ambiente de desenvolvimento de todo o seu time estará configurado de maneira igual para todos.

    4. Vídeo tutorial

    Caso fique alguma dúvida, você pode assistir o vídeo que gravei montando essa mesma imagem e baixar o Dockerfile nesse github. Você também pode usar a imagem oficial do Go disponibilizada no Docker Hub.

    Tem alguma dúvida, sugestão ou quer saber algo mais sobre Docker ou Go? Deixe um comentário!