Docker for Macをインストール
Docker for Mac
ここから最新のバージョンをダウンロードしてインストールする。
インストール後はターミナルからバージョン確認してみる。
バージョン
$ docker --version
Docker version 17.12.0-ce, build c97c6d6
$ docker-compose --version
docker-compose version 1.18.0, build 8dd22a9
$ docker-machine --version
docker-machine version 0.13.0, build 9ba6da9
Goのコンテナを用意
docker-compose.ymlを作る
Docker Hub から最新のGolangイメージを選んで記述。
軽いのがいいのでalpine linuxを選択。
以下の内容でコンテナ起動はできるが、tty: true を指定しない場合は起動してすぐにExit 0でコンテナが停止してしまう。
version: "3"
services:
golang:
image: golang:1.9.3-alpine3.7
tty: true
コンテナを起動
upしたらイメージ持ってきて起動までしてくれる。
psコマンドでStateがUpになっていればOK!!
$ docker-compose up -d
Creating network "golangtest_default" with the default driver
Pulling golang (golang:1.9.3-alpine3.7)...
1.9.3-alpine3.7: Pulling from library/golang
ff3a5c916c92: Pull complete
f32d2ea73378: Pull complete
1106a361a438: Pull complete
1cb2a7f46753: Pull complete
7188bdf7ba91: Pull complete
ea18811c70a0: Pull complete
Digest: sha256:2ccdba55ff3f76bde1cf282cb34a1669408ec34420081005eae85ab16252f182
Status: Downloaded newer image for golang:1.9.3-alpine3.7
Creating golangtest_golang_1 ... done
$ docker-compose ps
Name Command State Ports
---------------------------------------------
golangtest_golang_1 /bin/sh Up
コンテナの中に入ってみる
alpineなのでbashじゃなくてash
$ docker-compose exec golang ash
/go # go version
go version go1.9.3 linux/amd64
コンテナのVolume設定
先程作ったdocker-compose.ymlの設定だけだと自分のMacで修正したコードがコンテナには反映されないのでvolumesを追加。
:の左がホスト、右がコンテナのパスになっているので、./ => docker-compose.ymlと同じ階層のファイルがコンテナの/goにマウントされる。
volume先のディレクトリはコンテナに設定されているGOPATHの場所を指定します。
デフォルトは/goが設定されていますが、environmentで好きなパスに変更可能。
version: "3"
services:
golang:
image: golang:1.9.3-alpine3.7
tty: true
volumes:
- ./:/go
environment:
- "GOPATH=/go"
デフォルトのGOPATHを確認
見にくいけど /go が入っている
$ docker-compose exec golang ash
/go # echo $GOPATH
/go
volumes設定前のマウント先を確認
docker-compose.ymlがない
$ docker-compose exec golang ash
/go # pwd
/go
/go # ls -la
total 16
drwxrwxrwx 4 root root 4096 Jan 23 22:49 .
drwxr-xr-x 1 root root 4096 Feb 5 14:24 ..
drwxrwxrwx 2 root root 4096 Jan 23 22:49 bin
drwxrwxrwx 2 root root 4096 Jan 23 22:49 src
コンテナを起動しなおす
$ docker-compose up -d
Recreating golangtest_golang_1 ... done
volumes設定後のマウント先を確認
docker-compose.ymlが現れたので正常にマウントされている
$ docker-compose exec golang ash
/go # pwd
/go
/go # ls -la
total 12
drwxr-xr-x 4 root root 128 Feb 5 14:07 .
drwxr-xr-x 1 root root 4096 Feb 5 14:26 ..
-rw-r--r-- 1 root root 148 Feb 5 14:26 docker-compose.yml
適当にGoのコードを動かす
docker-compose.ymlと同じ階層にmain.goを作成
package main
import "fmt"
func main() {
fmt.Println("ハローワールド!!")
}
コンテナ上で動かす
ハローワールド!!
とりあえず簡単にgoが動く環境ができた!!
$ docker-compose exec golang ash
/go # pwd
/go
/go # ls -la
total 12
drwxr-xr-x 4 root root 128 Feb 5 14:07 .
drwxr-xr-x 1 root root 4096 Feb 5 14:26 ..
-rw-r--r-- 1 root root 148 Feb 5 14:26 docker-compose.yml
-rw-r--r-- 1 root root 84 Feb 5 14:08 main.go
/go # go run main.go
ハローワールド!!