一、Docker 镜像构建基础
1.1 Dockerfile 编写指南
Dockerfile 是构建 Docker 镜像的蓝图,它定义了镜像的每一层如何构建。一个典型的 Dockerfile 包含以下指令:
FROM:指定基础镜像,如FROM ubuntu:20.04。RUN:执行命令,如RUN apt-get update && apt-get install -y nginx。COPY:复制文件到镜像中,如COPY ./app /app。WORKDIR:设置工作目录,如WORKDIR /app。CMD或ENTRYPOINT:指定容器启动时执行的命令,如CMD ["nginx", "-g", "daemon off;"]。
示例 Dockerfile:
FROM ubuntu:20.04RUN apt-get update && apt-get install -y nginxCOPY ./html /usr/share/nginx/htmlWORKDIR /usr/share/nginx/htmlCMD ["nginx", "-g", "daemon off;"]
1.2 构建镜像
使用 docker build 命令根据 Dockerfile 构建镜像。语法如下:
docker build -t my-nginx:latest .
-t:指定镜像标签,格式为名称:标签。.:表示当前目录为构建上下文,Dockerfile 通常位于此。
二、Docker 镜像操作
2.1 镜像标签与推送
构建完成后,可以为镜像打上多个标签,便于管理和版本控制。例如:
docker tag my-nginx:latest myrepo/my-nginx:v1
将镜像推送到远程仓库(如 Docker Hub 或私有仓库):
docker push myrepo/my-nginx:v1
注意:推送前需登录 Docker 仓库,使用 docker login 命令。
2.2 从仓库拉取镜像
从远程仓库拉取镜像:
docker pull myrepo/my-nginx:v1
三、搭建私有镜像仓库
3.1 使用 Docker Registry
Docker 官方提供了 Registry 镜像,可快速搭建私有仓库。
3.1.1 启动 Registry 容器
docker run -d -p 5000:5000 --name registry registry:2
-d:后台运行。-p:端口映射,将宿主机的 5000 端口映射到容器的 5000 端口。--name:指定容器名称。
3.1.2 推送与拉取镜像
推送镜像前,需为镜像打上私有仓库的标签:
docker tag my-nginx:latest localhost:5000/my-nginx:latestdocker push localhost:5000/my-nginx:latest
拉取镜像:
docker pull localhost:5000/my-nginx:latest
3.2 使用 Harbor 搭建企业级私有仓库
Harbor 是一个开源的企业级 Docker 镜像仓库,提供了用户管理、访问控制、镜像复制等功能。
3.2.1 安装 Harbor
- 下载 Harbor 安装包。
- 修改
harbor.yml配置文件,设置主机名、密码、存储路径等。 - 运行安装脚本:
./install.sh
3.2.2 使用 Harbor
- 登录 Harbor 管理界面,创建项目。
- 登录 Docker 客户端到 Harbor:
docker login harbor.example.com
- 推送与拉取镜像:
docker tag my-nginx:latest harbor.example.com/myproject/my-nginx:latestdocker push harbor.example.com/myproject/my-nginx:latestdocker pull harbor.example.com/myproject/my-nginx:latest
四、高级技巧与最佳实践
4.1 多阶段构建
多阶段构建可以减小最终镜像的大小,只包含运行所需的文件。例如:
# 第一阶段:构建应用FROM golang:1.18 AS builderWORKDIR /appCOPY . .RUN go build -o myapp .# 第二阶段:运行应用FROM alpine:latestWORKDIR /root/COPY --from=builder /app/myapp .CMD ["./myapp"]
4.2 镜像优化
- 使用
.dockerignore文件排除不必要的文件。 - 选择轻量级的基础镜像,如 Alpine。
- 合并
RUN命令,减少镜像层数。
4.3 安全性考虑
- 定期更新基础镜像,修复安全漏洞。
- 使用 Docker 的内容信任机制(DCT)验证镜像签名。
- 限制 Registry 的访问权限,使用 HTTPS 加密通信。
五、总结
本文详细介绍了如何使用 Docker 构建自定义镜像,并通过 Docker Registry 和 Harbor 搭建私有镜像仓库。通过掌握这些技能,开发者和企业用户可以更高效地管理 Docker 镜像,确保应用部署的安全性和可靠性。随着 Docker 生态的不断发展,持续学习和实践新的技术将有助于提升个人和团队的竞争力。