笙默札记

笙默札记

从零开始编写Dockerfile,构建你的自定义Docker镜像

13
2025-06-25

什么是Dockerfile?

Dockerfile是一个文本文件,包含了一系列指令,用于构建Docker镜像。通过Dockerfile,你可以定义镜像的基础环境、安装的软件以及配置细节。

Dockerfile基本语法

  1. FROM:指定基础镜像

  2. RUN:执行命令

  3. COPY:复制文件或目录到镜像

  4. CMD:指定容器启动时运行的命令

  5. EXPOSE:声明容器监听的端口

编写示例Dockerfile

以下是一个简单的示例Dockerfile,用于创建一个基于Nginx的自定义镜像:

# 使用官方Nginx作为基础镜像

FROM nginx:latest

# 维护者信息

LABEL maintainer="yourname@example.com"

# 复制本地的HTML文件到镜像中的Nginx默认目录

COPY index.html /usr/share/nginx/html/

# 暴露80端口

EXPOSE 80

# 启动Nginx服务

CMD ["nginx", "-g", "daemon off;"]

构建镜像

使用docker build命令构建镜像:

docker build -t mynginx:1.0

这会在当前目录查找Dockerfile并构建名为mynginx:1.0的镜像。

运行自定义镜像

使用构建的镜像运行容器:

docker run -d -p 8080:80 mynginx:1.0

访问http://localhost:8080,应该可以看到自定义的Nginx欢迎页面。

版本控制和优化

  • 版本控制:使用标签(tag)管理镜像版本。

  • 多阶段构建:在Dockerfile中使用多阶段构建来优化镜像大小。

  • 缓存利用:合理安排指令顺序以提高缓存利用率,减少构建时间。

多阶段构建示例

以下是一个包含多阶段构建的Dockerfile示例,用于构建一个Go应用程序:

# 第一阶段:构建Go应用
FROM golang:1.16 as builder

WORKDIR /app
COPY . .

# 构建可执行文件
RUN go build -o myapp .

# 第二阶段:创建运行时镜像
FROM alpine:latest

WORKDIR /root/
COPY --from=builder /app/myapp .

# 运行应用程序
CMD ["./myapp"]

  • 0