Docker | 使用 Docker 部署 Go 程序
Contents
Docker部署编译好的Go web app
一、以ubuntu:14.04
为基础构建Go web app容器
生成Linux平台的可执行程序
1 2 3 4 5 6 7 |
# 开发平台win-64bit, 目标平台linux-64bit # 设置交叉编译参数 $ GOOS=linux GOARCH=amd64 go build -o app #!/bin/sh GOOS=linux GOARCH=amd64 go build -x -o app cp ./app /d/share |
拷贝Go Web App相关文件到工作目录
1 2 |
# 拷贝可执行文件到Ubuntu:/home/docker/godemo $ cp /mnt/hgfs/share/app /home/docker/godemo |
编写Dockerfile文件
|
|
基于Dockerfile构建GoWebApp镜像
|
|
运行容器
1 2 3 4 5 6 |
$ docker run --name godemo -d -p 8000:8000 godemo:v1 # --name godemo, 指定容器名称godemo # -d, 后台运行 # -p, 容器8000端口,映射到宿主机8000 # godemo:v1, 容器运行的基础镜像 |
二、以scratch
为基础构建Go web app容器
步骤与上面操作一致
Dockerfile
|
|
在构建容器时可能出现如下问题:
1 2 3 4 5 6 7 8 9 10 11
$ docker run -it -d -p 8000:8000 goapp:v0 # no such file or directory # Error response from daemon: Cannot start container 79bb9fb62788b4a8c1487695a3219ddf3aa85bde2bc44473838f6f4d1583a204: [8] # System error: no such file or directory # 原因:app文件生成的时候依赖的一些库如libc还是动态链接的,但是scratch镜像完全是空的,什么东西也不包含,所以生成app时候要按照下面的方# 式生成,使生成的app静态链接所有的库: $ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . # 重新生成镜像 $ docker build -t goapp:v0 . $ docker run -it -d -p 8000:8000 goapp:v0
See Also
Thanks to the authors 🙂