实践环境
从docker官仓pull下来的centos:latest镜像,run起来之后执行yum install epel-release && yum install golang装好go,但未配置go相关环境变量。然后commit 生成带go的新镜像,命名为centos:golang
实践目标
通过Dockerfile 和 docker build命令,在centos:golang镜像的基础上进一步封装,创建新镜像centos:autorungoapp
Dockerfile需要完成:
- 设置新镜像的go环境变量
- 本地的$GOPATH/src/test/testgo.go拷贝到镜像内的目标路径
- 编译镜像内的testgo.go形成executable_file testgo
- 设置【运行容器时,自动run testgo】
实践过程
创建镜像需要的context
Dockerfile:
FROM centos:golang
COPY testgo.go /goLearn/src/testgo.go
# 配置环境变量
ENV GOROOT=/usr/lib/golang GOPATH=/goLearn PATH=$PATH:$GOROOT/bin
# build .go. note: chmod is needed or testgo permission will be rw-r--r--
RUN cd /goLearn/src/ && go build -o testgo ./testgo.go && chmod 777 testgo
# run go
CMD cd /goLearn/src/ && ./testgo
testgo.go 打印接收的数字输入,遇到0退出
注意,go程序的入口是main(),因此testgo.go必须包含main(),也就是必须归属package main
package main
import (
"fmt"
)
func main() {
var num int
for true {
fmt.Scanf("%d", &num)
fmt.Println("num = ", num)
if num == 0 {
break
}
}
}
docker build
镜像centos:autorungoapp成功创建
docker run && docker ps 创建/运行容器并查询运行状态
ca容器已经成功在后台跑起来
检查testgo进程
testgo进程running
over
有疑问加站长微信联系(非本文作者)