1 基本流程
(1)编写Go工程代码
(2)可用性测试
(3)编写Dockerfile
(4)使用Dockerfile构建Docker镜像
(5)查看构建结果并运行
(6)测试新建的Docker镜像
2 操作实现
2.1 编写Go工程代码
go-docker #项目根目录 - core #代码目录 - main.go #具体代码文件 - go.mod #mod文件 - Dockerfile #Dockerfile文件 - main #go build ./core/main.go 命令编译后的二进制文件 复制代码
2.2 具体代码
package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello Docker")) }) log.Print("go docker project is running...") http.ListenAndServe(":8888", nil) } 复制代码
2.3 可用性测试
运行:
go run ./core/main.go 复制代码
测试(在宿主机上):
curl http://127.0.0.1:8888 复制代码
2.4 编写Dockerfile
#依赖镜像(母镜像),可以先使用docker search命令搜索 FROM golang:latest #作者信息 MAINTAINER YMX "1712229564@qq.com" #Docker工作目录 WORKDIR $GOPATH/src/go-docker #将当前目录添加到Docker ADD . $GOPATH/src/go-docker #在Docker工作目录下执行命令 RUN go build ./core/main.go #暴露端口 EXPOSE 8888 #编译后在根目录下生成而非./core目录下,最终运行Docker的初始命令 ENTRYPOINT ["./main"] 复制代码
2.5 使用Dockerfile构建Docker镜像
基本语法:
docker build -t [镜像名] [Dockerfile所在目录] 复制代码
具体演示:
docker build -t go-docker-latest . 复制代码
2.6 查看构建结果并运行
root ~ % docker images REPOSITORY TAG IMAGE ID CREATED SIZE go-docker-latest latest 453fb231s245 9 minutes ago 953MB root ~ % docker run -d -p 8888:8888 go-docker-latest a4a1f3b753913325b908bedf3d74ad1d0056223d8412524 复制代码
2.7 测试新建的Docker镜像
root ~ % docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4a1f3b75391 go-docker-latest "./main" 42 seconds ago Up 42 seconds 0.0.0.0:8888->8888/tcp jovial_z root ~ % curl http://127.0.0.1:8888 Hello Docker%