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を組み合わせた環境構築をしていきます。
誤字やバージョンの違いなどで、機能しなくなることがあるかと思うので、
何かお気づきの際は、コメント欄からお知らせください。