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
ハローワールド!!