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