Docker Registry 安装和使用

本文详细介绍了如何搭建和使用Docker私有仓库,包括安装步骤、配置认证方式、提交和上传镜像的过程。并通过实验展示了如何将运行中的项目提交为镜像并上传至私有仓库,最后讨论了数据持久化的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

前言

Docker Hub公共镜像市场

目前Docker官方维护了一个公共镜像仓库https://hub.docker.com,其中已经包括超过15000的镜像。大部分镜像需求,都可以通过在Docker Hub中直接下载镜像来实现。

Docker Registry私有仓库

公共仓库有很多镜像,但下载速度就那样,而且公共镜像缺乏个性化和实用性,毕竟每个公司得项目需求不一样。这样就可以自建一个Docker Registry。优点很明显,自建仓库很多都是局域网内吗,上传下载速度很快,安全性高。

Docker Registry有三个角色,分别是index、registry和registry client。

角色 1 -- Index 

index负责并维护有关用户帐户、镜像的校验以及公共命名空间的信息。它使用以下组件维护这些信息:

  • Web UI
  • 元数据存储
  • 认证服务
  • 符号化

角色 2 --Registry

registry是镜像和图表的仓库。然而,它没有一个本地数据库,也不提供用户的身份认证,由S3、云文件和本地文件系统提供数据库支持。此外,通过Index Auth service的Token方式进行身份认证。

角色 3 --Registry Client

Docker充当registry客户端来负责维护推送和拉取的任务,以及客户端的授权。

实验环境:

docker registry:192.168.1.201

docker clinent:192.168.1.200

首先保证两台宿主机上都已安装docker

 

安装

1:docker hub 公共镜像中有 registry 的镜像,直接从docker hub拉取。此操作在192.168.1.201上执行

1 mkdir /registry
2 docker run -p 5000:5000  --restart=always --name registry -v /registry/:/var/lib/registry -d registry

注:registry容器启动时,会在容器内/var/lib/下面创建一个registry目录,用于存储作为私有仓库接受docker client 上传的镜像。-v:将宿主机/registry/目录挂载到容器内/var/lib/registry目录。

--restart 容器重启方式

  • no,默认策略,在容器退出时不重启容器
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
  •   on-failure:3,在容器非正常退出时重启容器,最多重启3次
  • always,在容器退出时总是重启容器
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

2:验证私有仓库是否搭建成功,使用浏览器访问192.168.1.201:5000/v2/

 

界面显示{},表示docker registry搭建成功

使用

实验目的:将上文档中的wordpress项目上传至私有仓库,在192.168.1.201中运行。

上篇文档中使用docker-compose创建了两个容器mariadb和wordpress ,宿主机为192.168.1.200,这里使用这两个容器作为实验对象。

1:首先将两台实验机hosts解析。

1 cat >>/etc/hosts <<EOF
2 192.168.1.201 hub.com
3 EOF

注:registry和client都要解析。

2:添加认证方式。

docker registry  老版本可以使用http认证,但新版本很早就取消,不提供认证,但是又需要https认证才能实现上传和下载。可以借助nginx ssl 认证。这里先使用强制使用http方式认证。

 cat >>/etc/docker/daemon.json<<EOF
 {
     "registry-mirrors": [
         "http://68cdf6cf.m.daocloud.io"
     ],
     "insecure-registries":["Registry:81"]
 }
 EOF

注:registry和client都要配置,配置完后需要重启docker,再启动registry。

 

3:提交镜像。

docker镜像命名格式为:提交者/镜像名:版本号

例如:Danny/wordpress:1.0  表示这个镜像由Danny用户创建,如果没有用户名,默认为Docker hub 官方创建,名称为wordpress,版本号为1.0。如果没有版本号,默认为最新版。  

提交用户必须和私有仓库IP:port,可以做hosts解析,不然会提交失败。

例如:你的仓库ip为192.168.1.201,registry映射到宿主机上的端口为5000,镜像名为nginx,你的client提交镜像须为:192.168.1.201:5000/nginx

现在将已存储数据的wordpress项目提交为hub.com用户的镜像。

现有wordpress项目mariadb数据库又数据:用户名,密码,页面等等数据。

1:查看正在运行的容器

 2:提交当前运行项目为新的镜像。

docker commit wordpress_wordpress_1 hub.com:5000/wordpress:1.0
docker commit wordpress_db_1 hub.com:5000/db:1.0

3:上传镜像到私有仓库

docker push hub.com:5000/db:1.0
docker push hub.com:5000/wordpress:1.0

4:查看私有仓库镜像,用浏览器访问http://192.168.1.201:5000/v2/_catalog

 

 可以看到有db,wordpress两个镜像。

5:从私有仓库拉取镜像并启动容器,这里我们还是使用docker-compose启动容器。详情请看上一篇文章。

docker-compose配置文件

wordpress:
  image:
      hub.com:5000/wordpress:1.0
  links:
    - db:mysql
  ports:
    - 80:80
db:
  image:
      hub.com:5000/db:1.0
  environment:
     MYSQL_ROOT_PASSWORD: 123456
  volumes:
    - /docker/db/:/var/lib/mysql

6:测试是否下载并启动成功。

问题来了

我是用的镜像是有数据的镜像commit后的镜像,按理界面因该是我配置好的wordpress界面。现在还是没有数据,说明commit没有把mariadb的数据提交到新的镜像内。

为此我去查了文档:

发现docker默认使用的是文件系统。特征:它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。链接:https://docs.docker.com/storage/volumes/

然后我又去查看了docker commit 官方文档,发现提交操作将不包括容器内安装的卷中包含的任何数据。链接:https://docs.docker.com/engine/reference/commandline/commit/#options

就只有一种可能,就是容器内的mariadb数据存储的目录是以挂载卷方式挂载的。

通过 docker inspect wordpress_db_1 查看到"Mounts"中有如下信息:

我将宿主机/docker-compose/mysql/目录挂载到容器内的/var/lib/mysql,存储数据全部写到挂载宿主机目录下。

如果我启动不挂载目录的话,他还是将宿主机的目录挂载到容器内用于保存数据存储目录中。

到这里,原因知道了。

192.168.1.200数据库是挂载到宿主机上的,我把它拷到192.168.1.201挂载的目录上应该就行了吧。

192.168.1.201:关闭wordpress和mariadb

192.168.1.200:将数据库挂载目录中文件scp到192.168.1.201数据库挂载目录。

然后启动192.168.1.201的wordpress项目

测试

 

转载于:https://www.cnblogs.com/big-cousin/p/10116396.html

在虚拟机中安装 Docker Registry 是一个常见的需求,特别是在构建私有镜像仓库时。以下是详细的安装步骤相关说明: ### 安装 Docker Registry Docker Registry 是一个用于存储分发 Docker 镜像的服务。可以通过 Python 的包管理工具 `pip` 来安装 Docker Registry。以下是具体步骤: 1. **确保虚拟机已安装 Python pip** 在大多数 Linux 发行版中,Python `pip` 可能已经预装。如果没有,请使用以下命令安装: ```bash sudo apt-get update sudo apt-get install python3-pip ``` 2. **安装 Docker Registry** 使用 `pip` 安装 Docker Registry: ```bash sudo pip install docker-registry ``` 这将安装最新稳定版本的 Docker Registry(0.7.3 为写作时的版本)[^2]。 3. **配置 Docker Registry** 安装完成后,需要对 Docker Registry 进行基本配置。默认情况下,Registry 会在本地运行,并监听 5000 端口。可以通过修改配置文件 `/etc/docker/registry/config.yml` 来调整设置,例如更改端口、启用 TLS 加密等。 4. **启动 Docker Registry** 启动 Docker Registry 服务: ```bash docker run -d -p 5000:5000 --restart=always --name registry registry:2 ``` 这条命令会启动一个名为 `registry` 的容器,并将其绑定到主机的 5000 端口上。 5. **验证安装** 可以通过访问 `http://<虚拟机IP>:5000/v2/` 来验证 Docker Registry 是否正常运行。如果返回空响应,则表示服务已经成功启动。 6. **推送拉取镜像** 推送本地镜像到私有 Registry 前,需要先给镜像打标签: ```bash docker tag <镜像ID> <虚拟机IP>:5000/<镜像名称> ``` 然后推送镜像到 Registry: ```bash docker push <虚拟机IP>:5000/<镜像名称> ``` 其他用户可以通过以下命令从该 Registry 拉取镜像: ```bash docker pull <虚拟机IP>:5000/<镜像名称> ``` ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值