Docker - 私有仓库
Docker - 私有仓库
Section titled “Docker - 私有仓库”Docker Hub 对于公共镜像来说非常出色,但组织通常需要一个私有仓库来存储专有或敏感的容器镜像。Docker 提供了一个官方的 registry 镜像,您可以将其作为容器运行来托管您自己的私有仓库。
运行官方 Docker Registry 容器
Section titled “运行官方 Docker Registry 容器”步骤 1:使用 docker run 启动仓库容器。
docker run -d -p 5000:5000 --restart=always --name local-registry registry:2命令解释:
-d:在分离模式下运行容器(后台运行)。-p 5000:5000:将 Docker 主机上的 5000 端口映射到容器内的 5000 端口(仓库默认监听的端口)。--restart=always:确保仓库容器在停止或 Docker 守护进程重启时自动重启。--name local-registry:为容器指定一个方便的名称。registry:2:指定官方 Docker registry 镜像,版本 2(最新稳定版)。
步骤 2:使用 docker ps 验证仓库容器是否正在运行。
docker ps您应该会看到 local-registry 容器被列出。
使用私有仓库
Section titled “使用私有仓库”要使用您的私有仓库,您需要适当地为您的镜像打标签 (tag),然后推送它们。
步骤 3:为一个现有镜像打标签 (tag) 以指向您的私有仓库。假设您有一个本地镜像名为 my-app:1.0。
# 为 'my-app:1.0' 打标签使其指向 'localhost:5000/my-private-app:1.0'docker tag my-app:1.0 localhost:5000/my-private-app:1.0为私有仓库打标签的格式是:<仓库主机>:<仓库端口>/<镜像名称>:<标签>。由于我们的仓库运行在同一主机上并监听 5000 端口,因此我们使用 localhost:5000。
步骤 4:将打好标签的镜像推送到您的私有仓库。
docker push localhost:5000/my-private-app:1.0Docker 会将镜像层 (image layers) 上传到您正在运行的 local-registry 容器。
从私有仓库拉取
Section titled “从私有仓库拉取”步骤 5:为了测试拉取,首先删除镜像的本地副本(可选)。
# 删除指向私有仓库的特定标签docker rmi localhost:5000/my-private-app:1.0
# 也可以选择删除原始标签 (如果没有其他标签指向它)# docker rmi my-app:1.0步骤 6:现在,从您的私有仓库拉取镜像。
docker pull localhost:5000/my-private-app:1.0Docker 会从您的 local-registry 容器下载镜像层 (image layers)。您可以使用 docker images 验证它已恢复。
重要注意事项
Section titled “重要注意事项”- 安全性(HTTP vs HTTPS): 默认情况下,registry 容器运行在 HTTP 上。Docker 客户端默认期望 registry 使用 HTTPS 以确保安全。要从像
localhost:5000这样的非安全 registry 推送/拉取,您通常需要在 Docker 守护进程(在 Linux 上通过/etc/docker/daemon.json或 Docker Desktop 设置)中配置信任此 registry。请在 Docker 文档中搜索insecure-registries。 - 存储: 基本的
registry:2容器将镜像层存储在容器的文件系统内。如果容器被移除,镜像会丢失。为了持久化存储,您应该将卷 (volume) 挂载到容器内的/var/lib/registry路径下:docker run -d -p 5000:5000 --restart=always --name local-registry -v registry-data:/var/lib/registry registry:2(这使用了一个命名卷registry-data)。 - 身份验证/授权: 默认的 registry 没有身份验证。对于生产环境使用,您需要配置 TLS (HTTPS),并且可能需要添加身份验证(例如 Basic Auth、Token Auth)。
- UI: 基本的 registry 没有 Web UI。Portus、Harbor 或 Docker Trusted Registry(商业版)等工具提供了 UI 和额外功能。
- 网络访问: 如果您需要从其他机器访问该 registry,请在打标签、推送和拉取时将
localhost替换为 Docker 主机的 IP 地址或一个可解析的主机名,并确保防火墙规则允许访问 5000 端口。