- 背景
- 目录结构
- 先写个简单的http服务
- 写Dockerfile文件
最近在学习docker相关的知识,今天使用Dockerfile简单构建了一个go应用程序,仅作记录
目录结构-main --main.go Dockerfile先写个简单的http服务
编辑我们的/main/main.go文件:
package main
import "net/http"
func main() {
http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("hello"))
})
http.ListenAndServe(":9000", nil)
}
写Dockerfile文件
接下来写我们的Dockerfile文件
FROM golang:1.16-alpine AS builder # COPY复制文件或目录到容器指定目录 COPY main /src # 切换容器中当前执行的工作目录 WORKDIR /app RUN GOPROXY=https://goproxy.cn CGO_ENABLE=0 GOOS=linux go build -o api-service /src/main.go ## FROM alpine:latest as final # 从builder中复制编译好的可执行文件 COPY --from=builder /app/api-service /app/ WORKDIR /app/ # 暴露9000端口 EXPOSE 9000 CMD ["./api-service"]
OK,至此我们的Dockerfile就简单的编写完成了,下面就可以打包了,在Dockerfile同级目录下执行:
docker build -t api-service-img .
此处我们打包镜像并命名为 api-service-img,接下来我们查看并运行镜像:
[#]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE api-service-img latest 87f310a93cdc 37 minutes ago 11.7MB
[#]$ docker run -d -p 9000:9000 --name api-service api-service-img bcdb17603bd696baa20c70ff7abba7e88626c9653f0586d79b006b9f3568af4b
[#]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bcdb17603bd6 api-service-img "./api-service" 3 minutes ago Up 3 minutes 0.0.0.0:9000->9000/tcp api-service
[#]$ docker exec -it api-service /bin/sh
/app # ls
api-service
/app # ps
PID USER TIME COMMAND
1 root 0:00 ./api-service
11 root 0:00 /bin/sh
18 root 0:00 ps
访问一下浏览器的9000端口,验证一下是否能访问到我们的容器:
OK,至此一个简单的go应用构建镜像就完成了。



