Docker构建与私有仓库搭建全攻略

一、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
  • CMDENTRYPOINT:指定容器启动时执行的命令,如 CMD ["nginx", "-g", "daemon off;"]

示例 Dockerfile

  1. FROM ubuntu:20.04
  2. RUN apt-get update && apt-get install -y nginx
  3. COPY ./html /usr/share/nginx/html
  4. WORKDIR /usr/share/nginx/html
  5. CMD ["nginx", "-g", "daemon off;"]

1.2 构建镜像

使用 docker build 命令根据 Dockerfile 构建镜像。语法如下:

  1. docker build -t my-nginx:latest .
  • -t:指定镜像标签,格式为 名称:标签
  • .:表示当前目录为构建上下文,Dockerfile 通常位于此。

二、Docker 镜像操作

2.1 镜像标签与推送

构建完成后,可以为镜像打上多个标签,便于管理和版本控制。例如:

  1. docker tag my-nginx:latest myrepo/my-nginx:v1

将镜像推送到远程仓库(如 Docker Hub 或私有仓库):

  1. docker push myrepo/my-nginx:v1

注意:推送前需登录 Docker 仓库,使用 docker login 命令。

2.2 从仓库拉取镜像

从远程仓库拉取镜像:

  1. docker pull myrepo/my-nginx:v1

三、搭建私有镜像仓库

3.1 使用 Docker Registry

Docker 官方提供了 Registry 镜像,可快速搭建私有仓库。

3.1.1 启动 Registry 容器

  1. docker run -d -p 5000:5000 --name registry registry:2
  • -d:后台运行。
  • -p:端口映射,将宿主机的 5000 端口映射到容器的 5000 端口。
  • --name:指定容器名称。

3.1.2 推送与拉取镜像

推送镜像前,需为镜像打上私有仓库的标签:

  1. docker tag my-nginx:latest localhost:5000/my-nginx:latest
  2. docker push localhost:5000/my-nginx:latest

拉取镜像:

  1. docker pull localhost:5000/my-nginx:latest

3.2 使用 Harbor 搭建企业级私有仓库

Harbor 是一个开源的企业级 Docker 镜像仓库,提供了用户管理、访问控制、镜像复制等功能。

3.2.1 安装 Harbor

  1. 下载 Harbor 安装包。
  2. 修改 harbor.yml 配置文件,设置主机名、密码、存储路径等。
  3. 运行安装脚本:
    1. ./install.sh

3.2.2 使用 Harbor

  • 登录 Harbor 管理界面,创建项目。
  • 登录 Docker 客户端到 Harbor:
    1. docker login harbor.example.com
  • 推送与拉取镜像:
    1. docker tag my-nginx:latest harbor.example.com/myproject/my-nginx:latest
    2. docker push harbor.example.com/myproject/my-nginx:latest
    3. docker pull harbor.example.com/myproject/my-nginx:latest

四、高级技巧与最佳实践

4.1 多阶段构建

多阶段构建可以减小最终镜像的大小,只包含运行所需的文件。例如:

  1. # 第一阶段:构建应用
  2. FROM golang:1.18 AS builder
  3. WORKDIR /app
  4. COPY . .
  5. RUN go build -o myapp .
  6. # 第二阶段:运行应用
  7. FROM alpine:latest
  8. WORKDIR /root/
  9. COPY --from=builder /app/myapp .
  10. CMD ["./myapp"]

4.2 镜像优化

  • 使用 .dockerignore 文件排除不必要的文件。
  • 选择轻量级的基础镜像,如 Alpine。
  • 合并 RUN 命令,减少镜像层数。

4.3 安全性考虑

  • 定期更新基础镜像,修复安全漏洞。
  • 使用 Docker 的内容信任机制(DCT)验证镜像签名。
  • 限制 Registry 的访问权限,使用 HTTPS 加密通信。

五、总结

本文详细介绍了如何使用 Docker 构建自定义镜像,并通过 Docker Registry 和 Harbor 搭建私有镜像仓库。通过掌握这些技能,开发者和企业用户可以更高效地管理 Docker 镜像,确保应用部署的安全性和可靠性。随着 Docker 生态的不断发展,持续学习和实践新的技术将有助于提升个人和团队的竞争力。