Docker镜像仓库
Docker 镜像仓库(Docker Registry)是用于存储和分发 Docker 镜像的服务。它可以帮助企业和开发者更方便地管理和共享镜像。常见的 Docker 镜像仓库实施方案包括:
- 镜像保存为压缩包
- 使用 Registry 镜像仓库(官方私有仓库)
- 使用 Harbor 镜像仓库(企业级私有仓库)
- 使用公有云镜像服务(如阿里云)未来在写,留个悬念
1. 镜像保存为压缩包
如果不想使用镜像仓库,可以直接将 Docker 镜像保存为压缩文件,以便在不同环境之间传输和使用。
操作步骤:
-
查看当前镜像,确认导出镜像的名字以及版本:
docker images# 输出类似于这样的结果 REPOSITORY TAG IMAGE ID CREATED SIZE wordpress_mysql latest 1471ea5a136c 22 hours ago 726MB wordpress_nginx latest c728551200c4 2 days ago 407MB ubuntu 22.04 560582227a09 8 weeks ago 69.2MB busybox latest 82c58a5c5b73 5 months ago 4.04MB -
导出镜像为 tar 文件:
# [自己自定义名字] [镜像名:镜像版本] docker save -o wordpress_nginx.tar wordpress_nginx:latest -
传输到目标机器(使用scp命令,U盘传输,FTP服务),只要能将这个文件传过去就OK
-
在目标机器上加载镜像:
# [刚才传输的文件名] docker load -i wordpress_nginx.tar
适用场景:
- 适用于 离线环境 或 临时镜像传输
- 适用于 无法搭建 Registry 或 只需少量镜像共享
2. 使用 Registry 镜像仓库(官方私有仓库)
首先先解决一个问题,什么是 Registry 镜像,今天学的时候有些困惑,为了避免学了就忘,向未来的自己解释一下:
什么是 Registry?
Registry 是官网提供的 Docker镜像仓库 ,用于存储和分发Docker镜像。它的核心是
registry:2这个Docker镜像,它的本质是一个 基于 HTTP API 的服务,而不是一个物理的文件目录。大白话就是,你可以把自己的镜像存在了 Registry 这个容器中。为什么 Registry 是一个 Docker 镜像?
- 方便部署:
- 容器化方式:其实这也是蛮巧妙的一个方式,当 Registry 被打包成一个镜像,那么用户就可以直接使用
docker run命令运行,而不需要手动安装一套复杂的软件。- 跨平台支持:因为这个仓库是一个镜像,所以可以在任何支持 Docker 的环境中运行,避免了不同操作系统之间的兼容性问题,而且如果有突然事件发生,你可以将这个作为镜像的仓库直接打包带走,并在另一台机器搭建,非常方便。
- 与Docker生态深度集成:
- 镜像存储方式:Registry 作为一个 Docker 容器运行,可以直接存储和管理 Docker 镜像,并通过 REST API 提供标准化的镜像管理接口。
- 兼容 Docker CLI:Registry 可以直接使用
docker push和docker pull命令进行交互,不需要额外的客户端软件。- 独立运行,支持扩展
- 支持挂载外部存储:虽然 Registry 作为容器运行,但它的数据是存储在宿主机的挂载目录或远程存储(如 S3、GCS)中的,并不会消失。
- 支持分布式存储:Registry 可以使用云存储、数据库等后端作为存储方式,提高数据安全性和可扩展性。
安装 Docker Registry
-
拉取官方 registry 镜像
docker pull registry:2 -
运行私有仓库
docker run -d -p 5000:5000 --name registry registry:2 -
查看仓库是否启动成功
curl http://localhost:5000/v2/_catalog
上传和下载镜像
-
修改镜像标签(格式:IP/镜像名)
docker tag wordpress_nginx:latest localhost:5000/wordpress_nginx:latest⚠ 这里的修改标签是必须得执行的步骤,就是将 [镜像名:版本] 的格式改成了 [镜像仓库地址/镜像名:版本] 的格式,改成这样方便后面的拉取和上传,其实这个格式有点那个
scp的味道了... -
上传镜像
docker push localhost:5000/wordpress_nginx:latest⚠ 这里会出现一个错误信息/var/lib/docker/overlay2/.../merged: no such file or directory,这是因为在Docker存储空间中的一些残留文件或损坏的文件系统引起的,处理方法就是清理Docker存储空间:
# 执行如下命令可以清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)所以在删除之前需要将运行的镜像给一个tag标签 docker system prune -
本地拉取镜像
docker pull localhost:5000/wordpress_nginx:latest -
局域网拉取镜像
# 首先需要添加一个解析记录 vim /etc/docker/daemon.json { "insecure-registries": ["192.168.17.199:5000"] } # 然后重启docker systemctl restart docker # 最后就可以正常拉取 docker pull 192.168.17.199:5000/wordpress_nginx:latest
适用场景
- 适用于 小型团队内部使用
- 适用于 测试环境
- 需要 基础的镜像管理能力,但对安全性要求不高
3. 使用 Harbor 镜像仓库(企业级私有仓库)
Harbor 是基于 Docker Registry 的企业级镜像仓库,提供 用户权限管理、镜像扫描、Web UI 等功能。
安装 Harbor
-
下载 harbor
wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz -
解压并进入 Harbor 目录
tar -xzf harbor-offline-installer-v2.12.2.tgz cd harbor -
修改配置文件
cp harbor.yml.tmpl harbor.yml vim harbor.yml-
修改
hostname: <服务器IP地址/域名> -
取消
https配置(如果不使用 HTTPS) -
使用
https配置(写入证书地址即可)certificate: /your/certificate/path private_key: /your/private/key/path
-
-
安装 Harbor
./install.sh
上传和下载镜像
-
修改镜像标签
docker tag wordpress_nginx:latest <服务器IP地址/域名>/<项目名称-在HarborL网站里>/<仓库镜像名字>:latest # 例如 docker tag wordpress_nginx:latest firewalld.cn/wordpress/wordpress_nginx:latest -
登陆Harbor
docker login <服务器IP地址/域名> # 例如 docker login firewalld.cn # 输入账号和密码,账号和密码在harbor.yml有写,默认为: user:admin password:Harbor12345 -
上传镜像
docker push firewalld.cn/wordpress/wordpress_nginx:latest -
拉取镜像
docker pull firewalld.cn/wordpress/wordpress_nginx:latest
适用于场景
- 适用于 企业镜像级管理
- 适用于 需要Web界面管理
- 适用于 安全性要求较高的环境
4. 使用公有云镜像服务(阿里云)
阿里云、腾讯云、华为云等提供 公有云 Docker 镜像仓库,支持镜像加速、权限管理等功能。
以下是以阿里云为示例讲解:
1️⃣ 登陆阿里云控制台,进入 容器镜像服务
2️⃣ 创建命名空间和镜像仓库:



# 然后键入密码,不是阿里云账号的密码,是新建镜像仓库的密码,切记,要记住!!!



# 这里我选择本地仓库,如果是别的仓库则可以自己添加

# 至此,这个阿里云的镜像仓库就创建完成了
# 并且,在这个页面有操作指南,认真读!!!
3️⃣ 获取阿里云登录命令
# 上一个截图的操作指南的第一步,在自己的Linux主机中输入,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker login --username=你的阿里云账号 ************.cn-hongkong.personal.cr.aliyuncs.com
4️⃣ 修改镜像标签
# 选择要上传的镜像,然后修改该镜像的标签,这个改标签的过程是为了后续方便上传和拉取,也是必须操作!这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker tag [ImageId] ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
5️⃣ 上传镜像
# 上传镜像到自建的公有云镜像仓库,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker push ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
6️⃣ 拉取镜像
# 拉取镜像,使用另一台机器测试一样是否能拉取,这条命令每个人都不一样需要认真读操作指南,然后自己看第三步!!!
docker pull ************.cn-hongkong.personal.cr.aliyuncs.com/[命名空间]/[仓库名]:[镜像版本号]
7️⃣ 适用场景
- 适用于 公有云环境
- 适用于 无需自行维护镜像仓库
- 适用于 跨区域、多环境部署

浙公网安备 33010602011771号