Docker 多阶段构建学习笔记

准备工作#

  • centos 7
  • docker>=19.03
  • 镜像:golang:1.22 golang:1.22-alpine

Golang文件#

package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
if err := http.ListenAndServe(":8080", nil); err != nil {
panic(err)
}
}

Dockerfile#

FROM golang:1.22 as go1 # 使用golang:1.22为第一阶段的基础镜像,别名为go1
WORKDIR /app # 设定工作目录
COPY . . # 将dockerfile所在目录的文件拷贝到/app下
RUN go mod init demo&&CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . && chmod +x main # 编译main.go文件并输出可执行文件main
FROM golang:1.22-alpine as go2 #使用golang:1.22-alpine为第二阶段的镜像,别名为go2
WORKDIR /app
COPY --from=go1 /app/main . # --from 引用第一阶段go1的最终产物`main`文件,并将该文件复制到/app目录下
EXPOSE 8080 # 对外开放8080端口
CMD [ "./main" ] # 运行main文件

构建镜像#

--platform : 指定平台

-t: 指定tag

docker buildx build --platform linux/amd64 -t go_demo1:0.1 .

构建指定阶段镜像#

--target 某一阶段的别名

docker buildx build --platform linux/amd64 --target go1 -t go_demo1:0.1 .

启动容器#

docker run -itd -p 8080:8080 go_demo1:0.1

作者:jruing

出处:https://www.cnblogs.com/jruing/p/18297339

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Jruing  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-07-11 Golang学习笔记-判断
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示