Docker 如何创建自己的镜像(多阶段构建) Dockerfile文件的使用

本教程教大家如何使用Dockerfile文件创建自己的镜像,我们使用一个简短的go代码作为演示,它的作用是开启一个http端口,下面是我们的go代码

package main

import (
    "log"
    "github.com/gin-gonic/gin"
)

func main() {
    g := gin.Default()
    g.GET("/hello:name", func(c *gin.Context) {
        log.Println("hello")
        name := c.Param("name")
        c.String(200, "Hello %s", name)
    })
    g.Run(":3000")
}

拿到代码后要先确保电脑安装了go的环境,如果有我们运行下面的命令,先来运行一下看看效果

go mod init test
go mod download
go run .
curl http://127.0.0.1:3000/hello:name
# 输出
Hello name

输出如上就表示运行成功了,下面我们开始讲解如何使用docker制作一个容器来运行这个代码

# syntax=docker/dockerfile:1

FROM golang:1.23.4 AS build-go

WORKDIR /app

# 设置国内镜像源
ENV GOPROXY=https://goproxy.cn,direct

COPY go.mod go.sum ./
RUN go mod download

COPY *.go ./

RUN CGO_ENABLED=0 GOOS=linux go build -o /docker-go-test

FROM alpine

WORKDIR

COPY --from=build-go /docker-go-test /docker-go-test

EXPOSE 3000

CMD ["/docker-go-test"]

我们使用多阶段构建的形式来制作镜像,这种方式的好处是使程序运行在一个更稳定的环境中,还可以大大减少镜像的大小,接下来我们逐行解析

  • 第一行是- 指定使用 Dockerfile 的版本 1 语法。这是必须添加的并且必须在第一行!!!
  • FROM 指定一个镜像作为基础镜像,这里使用了golang:1.23.4,AS的作用是命名当前阶段
  • WORKDIR 创建一个目录并设置为工作目录,以后的操作都在这个目录
  • ENV 设置环境变量,这里的作用是使用go的国内镜像
  • COPY 主要用于将宿主机的文件复制到镜像中,这里将mod和sum文件拷贝到app中
  • RUN 用于执行指定命令
  • 第二个FROM表示进入的第二阶段,一阶段用于构建我们的程序,二阶段用于运行也是最终阶段
  • 这里我们设置了一个/工作目录
  • –from表示文件来自哪里,不设置这个默认为宿主机,这里我们设置了来自一阶段,将构造好的二进制文件拷贝到二阶段
  • EXPOSE 暴力3000端口用于外部访问
  • CMD 是启动容器时运行的命令,这里我们启动docker-go-test
    Dokcerfile文件解释完了,我们再使用docker build命令构建镜像
docker build --tag docker-go-test .

–tag 指定镜像的名字,最后我们使用run命令来运行镜像

# 运行镜像
docker run -p 3123:3000 --name go-test -d docker-go-test
# 测试
curl http://127.0.0.1:3123/hello:789
# 输出
Hello 789
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值