搭建Docker私有镜像仓库

发布时间:2025-01-11 人气:177次

虚拟机的安装及docker容器的安装使用

什么是私有镜像仓库


1.1 Docker镜像仓库分两类:公用仓库和私有仓库


1.2 公用镜像仓库:DockerHub、网易云镜像仓库、DaoCloud镜像仓库、阿里云镜像仓库等


1.3 私有镜像仓库:本地搭建,局部范围内使用的仓库


为什么需要私人镜像仓库


2.1 企业镜像大多带有商业机密,不希望对外公开


2.2 镜像操作(例如上传、下载),效率更高


这段内容解释了私有镜像仓库的概念和为什么企业需要使用私有镜像仓库。私有镜像仓库是企业内部使用的,可以保护商业机密,并且提高镜像操作的效率。


实现私人镜像仓库


3.0 准备工作,需要准备两台虚拟机,大家可以自行克隆上章节所用的虚拟机


为了方便大家可以给虚拟机改名sudo vi /etc/hostname后重启sudo reboot


111.168.56.134 -> docker-registry 私人镜像仓库服务器

111.168.56.133 -> docker 测试镜像 push 和 pull 的工作站

3.1 Docker Registry


Docker 官方的 Docker Registry 是一个基础版的镜像仓库,具备仓库管理的完整功能,但是没有图形化 UI 界面

官网文档:https://docs.docker.com/registry/

-> docker pull registry:latest -> mkdir -p registry/data && cd registry -> docker run -d  --restart=always  --name registry  -p 5000:5000  -v ./data:/var/lib/registry  registry:latest # 测试 http://私有仓库IP:5000/v2/_catalog # 查看镜像仓库中所有的镜像


这段内容是关于如何搭建一个私有 Docker 镜像仓库的命令行步骤:


使用 docker pull registry:latest 命令拉取 Docker Registry 的最新镜像。

使用 mkdir -p registry/data && cd registry 创建并进入 registry 目录,同时创建一个 data 子目录用于存储镜像数据。

使用 docker run 命令启动一个 Docker Registry 容器,设置为守护进程模式(-d),始终重启(--restart=always),并映射端口 5000将宿主机的5000端口映射到容器上(-p 5000:5000),使用docker inspect registry(查看镜像的详细信息)命令查看registry容器暴露的端口是不是5000。同时,将主机的 ./data 目录挂载到容器的 /var/lib/registry 目录(-v ./data:/var/lib/registry),并指定容器名称为 registry。

测试私有镜像仓库是否搭建成功,可以通过访问 http://私有仓库IP:5000/v2/_catalog 来查看仓库中所有的镜像。这里的 私有仓库IP 需要替换为实际的服务器 IP 地址。

注意:在CentOS 8系统中,管理防火墙通常使用firewalld服务。以下是如何在firewalld中开放5000端口的步骤:


使用firewall-cmd命令开放5000端口


firewall-cmd是firewalld的命令行工具,用于管理防火墙规则。要开放5000端口,可以使用以下命令:


sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent


这里的参数解释如下:


--zone=public:指定防火墙区域,通常使用public区域。如果你有其他特定的区域配置,可以相应地修改。

--add-port=5000/tcp:添加5000端口,协议为TCP。如果你需要开放UDP端口,可以使用5000/udp。

--permanent:使规则永久生效,即在防火墙重启后仍然有效。

3. 重新加载防火墙配置


添加规则后,需要重新加载firewalld的配置,以使规则生效:


sudo firewall-cmd --reload


4. 验证端口是否开放


为了确保5000端口已经成功开放,可以使用以下命令查看防火墙状态和规则:


sudo firewall-cmd --list-all


这个命令会列出当前防火墙的所有规则,包括开放的端口。你应该能在输出中看到5000端口已经开放。


使用netstat命令查看监听的端口:


sudo netstat -tuln | grep 5000


如果5000端口已经开放,你应该能看到类似以下的输出:


tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN


通过以上步骤,你可以在CentOS 8系统中成功开放5000端口。


直接关闭防火墙firewalld服务,可以使用以下命令:


sudo systemctl stop firewalld


禁用firewalld服务的开机自启


sudo systemctl disable firewalld


查看防火墙的状态


sudo systemctl status firewalld


私人镜像仓库常用操作


4.0 配置 Docker 客户端以使用 HTTP


docker私有仓库默认是基于https传输的,需要在客户端做相关设置不使用https传输=ErrorInfo Error response from daemon:Get "https://111.168.56.134:5000/v2/": http: server gave HTTP response to HTTPS client


Solve:


vim /etc/docker/daemon.json # 修改客户端docker配置 "insecure-registries": ["私有仓库IP:5000"] systemctl daemon-reload && systemctl restart docker # 重新加载配置,重启docker


"insecure-registries": ["111.168.56.134:81"]


这个配置项指定了 Docker 守护进程允许访问的“不安全”镜像仓库。

insecure-registries 允许 Docker 守护进程访问那些没有启用 HTTPS 或者使用自签名证书的私有仓库。在这种情况下,111.168.56.134:81 是一个不使用 HTTPS 的本地或私有 Docker 镜像仓库。

如果没有这个配置,Docker 默认只允许访问使用 HTTPS 协议的仓库,以保证安全性。通过设置 insecure-registries,你可以让 Docker 访问使用 HTTP 的私有仓库或自签名证书的仓库。

在这种配置下,Docker 会忽略 SSL 证书验证,直接与指定的仓库进行通信。

4.1 推送镜像


4.1.0重做镜像Tag 


docker pull alpine           这个镜像很小方便拉取,我这里使用这个演示

docker tag images:tag 私有仓库IP:5000/images:tag docker tag alpine 111.168.56.134:5000/myalpine


制作镜像难免有制作错误的,下面讲解一下怎么删除镜像,了解一下即可


需要要删除镜像 111.168.55.133:5000/myalpine,可以使用以下命令:


docker rmi 111.168.55.134:5000/myalpine 如果该镜像被其他容器使用,删除时会遇到错误。在这种情况下,可以使用 -f 强制删除: docker rmi -f 111.168.56.133:5000/myalpine 删除后,使用 docker images 命令可以验证该镜像是否已被移除。


4.1.1推送镜像


docker push 私有仓库IP:5000/images:tag docker push 111.168.56.134:5000/myalpine


4.1.2测试


ls data/docker/registry/v2/repositories/  # 私有仓库服务器上执行 http://私有仓库IP:5000/v2/catalog       # 客户端上执行


这段内容描述了如何将 Docker 镜像推送到私有仓库的步骤:


使用 docker tag 命令为本地镜像打上新的标签,以匹配私有仓库的地址和镜像名称。

使用 docker push 命令将镜像推送到私有仓库。

测试镜像是否成功推送,可以通过列出私有仓库服务器上的镜像存储目录或通过浏览器访问私有仓库的 catalog 接口来检查。

请注意,这里的 私有仓库IP:5000 需要替换为实际的私有仓库服务器 IP 地址和端口号。


在客户机中拉取


打标签( docker tag)一个镜像时,实际上并没有创建新的镜像,而是为现有的镜像分配了一个新的标签。镜像的 ID 是唯一的,代表镜像的内容。


1.png

4.1.3拉取镜像:


方便演示使用myalpine操作,


先删除本地镜像


docker rmi 111.168.56.134:5000/myalpine


从私有仓库拉取


docker pull 111.168.56.134:5000/myalpine


图示:

拉取镜像.png

Docker Registry UI的使用


带UI的Registry镜像是第三方基于官方镜像制作出来,因此构建后会涉及到2个镜像,建议采用docker-compose方式编排


GitHub官网: https://github.com/Joxit/docker-registry-ui


-> mkdir -p registry/data && cd registry  创建目录,我们上面已经创建好了 -> vi docker-compose.yml


创建docker-compose.yml 配置文件:


version: "3.8"


services:


  registry:


    image: registry


    volumes:


      - ./data:/var/lib/registry


  registry-ui:


    image: joxit/docker-registry-ui:1.5-static # static是静态接口版,还有个标准版不带static后缀


    ports:


      - 81:80


    environment:


      - REGISTRY_TITLE=不凋不败的私有仓库 # docker私有仓库的标题


      - REGISTRY_URL=http://registry:5000 # docker私有仓库的url


      - DELETE_IMAGES=true


      - CATALOG_ELEMENTS_LIMIT=1000   # 必要


    depends_on:


      - registry




使用 docker-compose 来部署一个带有图形用户界面的 Docker Registry。它包括两个服务:一个是 Docker Registry 本身,另一个是第三方的 UI 界面。通过 docker-compose.yml 文件定义了服务的配置,包括使用的镜像、端口映射、环境变量等。最后,使用 docker compose up -d 命令启动服务,并通过浏览器访问 http://私有仓库IP:81 来查看 UI 界面。这里的 私有仓库IP 需要替换为实际的服务器 IP 地址。


配置 Docker registry UI:


REGISTRY_TITLE=不凋不败的私有仓库

REGISTRY_URL=http://registry:5000设置 Docker registry 的 URL,即 registry 服务的地址,registry 是 Docker Compose 服务的名称,它会解析为容器的 IP 地址。

DELETE_IMAGES=true

CATALOG_ELEMENTS_LIMIT=1000

启动服务


docker compose up -d http://私有仓库IP:81  # 测试


测试ok


修改测试机的http访问镜像端口,从5000改为81


# vi /etc/docker/daemo.json


{




"dns": ["8.8.8.8", "8.8.4.4"],


"registry-mirrors": [




        "https://do.nark.eu.org",


        "https://dc.j8.work",


        "https://docker.m.daocloud.io",


        "https://dockerproxy.com",




        "https://docker.nju.edu.cn",


        "https://registry.aliyuncs.com",


        "https://mirror.ccs.tencentyun.com",


        "https://docker.mirrors.ustc.edu.cn",


        "https://hub-mirror.c.163.com"


],


"insecure-registries": ["192.168.55.134:81"]


 }


重新加载配置,重启docker:


systemctl daemon-reload && systemctl restart docker # 重新加载配置,重启docker


创建镜像:


[root@192 ~]# docker tag alpine 111.168.56.134:81/myalpine-ui

2.png

推送镜像到私有镜像仓库:


docker push 111.168.56.134:81/myalpine-ui


3.png

查看推送成功


4.png大家可以测试一下删除了拉取pull操作,无疑肯定也是成功的

选择订阅-通过 Docker 订阅在协作、安全性和支持之间找到完美的平衡!
在线客服
联系方式

热线电话

18221674630

上班时间

周一到周五

公司电话

18221674630

二维码
线
获取免费体验资格

提交后,我们将在3个小时内与您联系