docker 命令:
docker run --rm -v "$PWD":/go/src/github.com/ymmb/test --privileged=true -w /go/src/github.com/ymmb/test golang:1.8.3 go build -v -o test
1.第一次执行会从本地先查找golang:1.8.3镜像,如果没有找到,会从dockerhub上下载该镜像;
如果找到则直接生成container,然后在docker中进行编译,并生成可执行文件。
2.docker run --rm:先从镜像 golang:1.8.3 生成 container, 执行完成后删除 docker 环境,
但是在docker中执行 go build -v -o test 后生成的 test 可执行文件会保留。
3.如果该服务调用了vendor包,则当前目录下必须要vendor目录和包文件,
gopath 路径下也不行,执行 docker必须在main.go的目录下
命令解析:
-v "$PWD":/go/src/github.com/ymmb/test: 将本地的文件夹 "PWD" 和 docker 中
/go/src/github.com/ymmb/test 进行软连接关联(自动生成该目录),这样 docker 中 test 目录和本地 "PWD" 的目录就是一个了。
--privileged=true:privileged 使 container 内的 root 拥有真正的 root 权限,如不加该命令,则没有写入 container 和外界关联目录的权限(踩了这块的坑,docker 执行完成后就是没有保留可执行文件)。
-w /go/src/github.com/ymmb/test:设置容器的工作目录. (docker 中的默认 GOPATH: /go/src/,应当和 -v 所指定的 docker 中的目录一致,并在 -v 关联的 container 外执行该 docker 命令)
go build -v:可以使命令把执行过程中构建的包名打印出来。
(想要在 docker 中执行的命令,可以是 shell 或其他,这里是执行 go 的编译命令)