文章目录
- 前言:公有仓库和私有仓库
- 公共镜像仓库
- 私有镜像仓库
- 一、搭建 Docker 镜像仓库
- 1.1 搭建简化版的镜像仓库
- 1.2 搭建带有图形化界面的镜像仓库
- 1.3 配置 Docker 信任地址
- 二、向私有镜像仓库推送和拉取镜像
- 2.1 推送本地镜像到私有仓库
- 2.2 拉取私有仓库中的镜像
前言:公有仓库和私有仓库
在 Docker 生态系统中,镜像仓库(Docker Registry)扮演着关键的角色,用于存储和分享 Docker 镜像。镜像仓库有公共的和私有的两种形式,每种形式都有其特定的应用场景。
公共镜像仓库
- Docker Hub
Docker Hub 是 Docker 公共仓库,是最大的 Docker 镜像仓库之一。它提供了大量的公共镜像供用户使用。你可以在 Docker Hub 上找到官方的基础镜像,也可以找到其他用户分享的各种应用和工具的镜像。
- 国内云服务商提供的公共仓库
由于 Docker Hub 在国内访问速度较慢,一些国内的云服务商提供了类似于 Docker Hub 的公开服务。例如,网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等,都提供了稳定、快速的公共镜像仓库。
私有镜像仓库
- 为什么搭建私有镜像仓库?
虽然公共仓库提供了大量的镜像供用户使用,但在一些特定的场景下,企业或个人可能希望搭建自己的私有 Docker Registry。主要原因包括:
- 安全性: 一些敏感的应用或数据不适合存储在公共仓库中,因此需要一个受控的、私有的存储环境。
- 带宽控制: 在一些特殊网络环境下,使用公共仓库的下载速度可能不理想,搭建私有仓库可以更好地控制镜像的拉取速度。
- 定制需求: 企业可能有自己特殊的镜像需求,需要在内部构建和管理特定版本的镜像。
- Docker Registry
Docker Registry 是 Docker 提供的官方仓库服务,支持用户搭建自己的私有镜像仓库。你可以将 Docker Registry 部署在自己的服务器上,并通过简单的配置来实现私有仓库的搭建。
搭建私有 Docker Registry 的详细步骤可以参考官方文档:Docker Registry 部署。
- 私有 Docker Registry 在企业中的应用
在企业内部,私有 Docker Registry 的应用非常广泛。它不仅为企业提供了更加安全和可控的镜像管理环境,还支持企业内部的持续集成和持续部署流程。通过搭建私有仓库,企业可以更好地管理和定制自己的镜像,确保应用的稳定和安全运行。
总的来说,选择使用公共仓库还是搭建私有仓库,取决于具体的使用场景和需求。在实际应用中,有时候也会采用公共仓库和私有仓库结合的方式,根据实际需求灵活选择。
一、搭建 Docker 镜像仓库
在 Docker 生态系统中,镜像仓库(Docker Registry)用于存储和管理 Docker 镜像。你可以选择使用公共仓库,比如 Docker Hub,也可以搭建私有的 Docker Registry,方便自己团队或组织内部使用。
官网地址:https://hub.docker.com/_/registry。
1.1 搭建简化版的镜像仓库
Docker 官方提供了一个简化版的 Docker Registry 镜像,具备完整的仓库管理功能,但缺乏图形化界面。下面是一个简单的搭建命令:
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry
这个命令中的参数说明:
-
-d
: 后台运行容器。 -
--restart=always
: 设置容器总是在 Docker 启动时重新启动。 -
--name registry
: 为容器指定一个名字,这里是registry
。 -
-p 5000:5000
: 将主机的 5000 端口映射到容器的 5000 端口。 -
-v registry-data:/var/lib/registry
: 挂载数据卷registry-data
到容器内的/var/lib/registry
目录,用于持久化存储镜像数据。 -
registry
: 使用的镜像名称。
通过上述命令,就成功运行了一个 Docker Registry 服务。访问 http://主机IP:5000/v2/_catalog
可以查看当前私有镜像服务中包含的镜像。
1.2 搭建带有图形化界面的镜像仓库
有一些第三方工具可以为 Docker Registry 提供图形化界面,使得镜像的管理更加直观。一个常用的工具是 docker-registry-ui
。通过 Docker Compose,我们可以很容易地搭建一个带有图形化界面的 Docker Registry 服务。以下是一个简单的 docker-compose.yml
文件:
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=私有仓库
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
这个 docker-compose.yml
文件包括两个服务:registry
和 ui
。其中,registry
使用官方 Docker Registry 镜像,并挂载数据卷;ui
使用 docker-registry-ui
镜像,并配置了环境变量,包括私有仓库的标题和地址。
1.3 配置 Docker 信任地址
因为私服采用的是 HTTP 协议,默认不被 Docker 信任,所以需要进行配置。编辑 Docker 守护进程配置文件:
# 打开要修改的文件
vim /etc/docker/daemon.json
添加如下内容:
"insecure-registries": ["http://主机IP:8080"]
保存并退出。重载 Docker 守护进程配置并重启 Docker:
systemctl daemon-reload
systemctl restart docker
通过以上步骤,就成功搭建了一个简化版的 Docker 镜像仓库,并且还可以使用 Docker Compose 部署一个带有图形化界面的 Docker Registry。
然后通过浏览器访问:http://主机IP:8080/
,就可以看到私有镜像查看的 UI 界面了。
二、向私有镜像仓库推送和拉取镜像
2.1 推送本地镜像到私有仓库
- 例如,现在要把本地的镜像
nginx
,重新tag
为nginx:1.0
,注意,名称前缀为私有仓库的地址:192.168.150.101:8080/
。
docker tag nginx:latest 192.168.211.128:8080/nginx:1.0
其含义是给本地镜像打上一个新标签,使其适应私有仓库地址。
- 然后再把它推送到私有仓库:
docker push 192.168.211.128:8080/nginx:1.0
其含义是将标签过的镜像推送到私有仓库。
- 推送成功后,就可以在私有仓库的图形化界面中看到相应的镜像。
2.2 拉取私有仓库中的镜像
拉取镜像是将远程仓库中的镜像下载到本地使用的过程。使用 Docker 命令可以很方便地从私有仓库中拉取镜像。
推送本地镜像到私有仓库的过程已经很详细了。接下来,我们来看一下拉取镜像的步骤。
现在私有仓库中有一个镜像 nginx:1.0
,我们可以通过以下命令将其拉取到本地:
docker pull 192.168.211.128:8080/nginx:1.0
这个命令的含义是从指定的私有仓库地址拉取标签为 1.0
的 nginx
镜像。
拉取成功后,就可以在本地使用这个镜像。
例如,拉取私有仓库镜像的整个步骤:
- 首先删除本地的
nginx
镜像 - 从私有仓库拉取镜像
可以直接在私有仓库的 UI 界面直接复制拉取镜像的命令:
执行在终端中执行这个命令,发现拉取成功了: