16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker for MacでGoの実行環境を作る

Last updated at Posted at 2018-02-05

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でコンテナが停止してしまう。

docker-compose.yml
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で好きなパスに変更可能。

docker-compose.yml
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を作成

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?