1

准备自定义的程序(略)

golang编译的二进制程序为例
编译文件:(因为在docker中要使用linux的镜像,所以程序也要编译为linux下能用的)

参考golang交叉编译

Mac 下编译 Linux 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下编译 Mac 和 Windows 64位可执行程序

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Windows 下编译 Mac 和 Linux 64位可执行程序

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

编写Dockerfile

创建Dockerfile文件,把刚刚编译的main二进制文件与Dockerfile文件入在同一个目录下。

dir
  --main
  --Dockerfile

Dockerfile内容如下:

FROM alpine
ADD main /usr/local/bin/

创建自定义程序的镜像

cd ${Dockerfile所有目录}

#创建镜像命名为demo_img
docker build -t demo_img .

运行容器

假设刚刚编译的程序需要访问网络,并且启动时要附带参数

假设正常启动程序是这样的:
./main --listen_port=1234
然后就可以通过http://127.0.0.1:1234来访问程序了

那么在容器中可以这样启动:

docker run -d -p 1234:1234 --name demo_main main --listen_port=1234
命令解析:
-d 后台运行
-p 1234:1234 端口映射
--name demo_main 将容器名字设为demo_main
--network host 设置网络模式为host
main --listen_port=1234 程序启动的命令

Chiu
312 声望5 粉丝