Docker Composeを使ってGo言語の開発環境を整える

Go言語

Go言語を始めようかと思い、Docker Composeを使って開発環境を作ってみました。

前提

以下のような人を対象にしています。

  • CLIに慣れている
  • Dockerやdocker-composeの一通りの使い方を知っている
  • Dockerfileの利用方法を知っている

基本方針

基本的には、docker-composeを使ってコンテナを立ち上げ、その中でGoのプログラムを実行し、
プログラム終了後にコンテナを閉じます。

Go言語の追加パッケージなどは、Dockerfileに記述します。

docker-composeは通常、複数のコンテナを立ち上げることが多いと思いますので、
Go環境のDockerfileは、docker/app/フォルダ内に作成しています。

今回のファイルの構成は、以下のようになっています。

.
├── docker/
│   └── app/
│   │   └── Dockerfile
│   └── docker-compose.yml
├── src/
│   └── main.go
└── run.sh

各ファイル

Dockerfile

僕としては、将来的にMySQLとの連携を想定しているので、MySQLのパッケージをインストールする処理を追加しています。
今回のサンプルでは必要ありません。

FROM golang:1.13

RUN apt-get update -qq && \
    apt-get install -y default-mysql-client

# additional packages
RUN go get "github.com/go-sql-driver/mysql"

docker-compose.yml

version: '3.3'
services:
  app:
    build: ./app
    volumes:
      - ../src:/go/src/app
    working_dir: /go/src/app
    command: go run main.go

src/main.go

ここにGoのプログラムを書きます。
Goの公式チュートリアルに習って、今回は「Hello, 世界」と表示するプログラムです。

package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}

run.sh

いつも通り、実行用シェルスクリプトを組んでおきます。

#!/bin/bash

cd docker && \
docker-compose up --build # ビルドして実行

docker-compose stop # サービスを停止させる
docker-compose down # コンテナの停止、削除、さらにネットワーク、記憶領域を全て削除

実行結果

以下のように実行結果が表示されます。

$ chmod +x run.sh
$ /run.sh
Creating network "docker_default" with the default driver
Building app
Step 1/3 : FROM golang:1.13
 ---> a1072a078890
Step 2/3 : RUN apt-get update -qq &&     apt-get install -y default-mysql-client
 ---> Using cache
 ---> c5e079e24d40
Step 3/3 : RUN go get "github.com/go-sql-driver/mysql"
 ---> Using cache
 ---> 18ecf7802c47

Successfully built 18ecf7802c47
Successfully tagged docker_app:latest
Creating docker_app_1 ... done
Attaching to docker_app_1
app_1  | Hello, 世界
docker_app_1 exited with code 0
Removing docker_app_1 ... done
Removing network docker_default

全部の実行結果を見せるとわかりにくいですが、
最後の方で「app_1 | Hello, 世界」のように、
正常にプログラムが実行されて結果が得られたことがわかります。

まとめ

いかがでしたでしょうか?
今回はこれで終わりです。

以前の記事で、MySQLの環境設定記事を書いたので、
次回はGoとMySQLを組み合わせた環境構築をしていきます。

誤字やバージョンの違いなどで、機能しなくなることがあるかと思うので、
何かお気づきの際は、コメント欄からお知らせください。

コメント

タイトルとURLをコピーしました