在Mac上使用Docker创建Go的执行环境
安装Docker for Mac
在Mac上使用Docker
从这里下载并安装最新版本。
安装完成后,可以在终端中检查版本。
版本
$ 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
启动容器
一旦启动后,可以提供相应的图像并执行启动操作。
如果使用 “ps” 命令状态显示为 “Up”,则表示一切正常!!
$ 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
容器的音量设置
由先前创建的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
确认设置卷之前的挂载路径。
没有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
确认挂载后的卷的设置位置。
由于出现了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
ハローワールド!!