在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 
ハローワールド!!
广告
将在 10 秒后关闭
bannerAds