Docker 07 repository

一、什么是仓库

用来管理docker镜像的仓库

二、为什么需要仓库?

  1. 快速交付: 应用开发完成后可以直接打包成镜像并上传到仓库,可以在任何装有Docker的机器上下载该镜像,并运行为一个容器。
  2. 重复利用: 可以更方便的在其他机器上下载镜像、运行容器
  3. 创建私服: 避免暴露在外网、并提高下载速度(公司内网)

三、常见的仓库

  1. Docker Hub
  2. Aliyun
  3. 自主搭建(私服仓库)

1. Nexus (maven私服)

#创建持久化目录
mkdir /opt/docker/nexus
#开放权限(docker文件目的是为了给nexus数据共享,而当前操作的账户是宿主机root,最高权限,而docker里面访问可能没有权限,所以干脆开放个高权限)
chmod 777 -R /opt/docker

#启动nexus容器, INSTALL4J_ADD_VM_PARAMS 是设置jvm参数的,内存最小小球256m,不设置默认占用2G,太耗费内存
# ❌️ 2026年09月20日星期日 此命令报错,经查验nexus3:latest版本会报错
docker run -d --restart=always -p 8868:8081 -p 5000:5000 -p 5001:5001 -e INSTALL4J_ADD_VM_PARAMS="-Xms256m -Xmx512m -XX:MaxDirectMemorySize=512m" --name nexus -v /opt/docker/nexus:/nexus-data sonatype/nexus3

docker run -d --restart=always -p 8868:8081 -p 5000:5000 -p 5001:5001 -e INSTALL4J_ADD_VM_PARAMS="-Xms256m -Xmx512m -XX:MaxDirectMemorySize=512m" --name nexus -v /opt/docker/nexus:/nexus-data sonatype/nexus3:3.60.0

# ✅️正确启动版本 sonatype/nexus3:3.60.0
docker run -d \
  --name nexus \
  --restart=always \
  -p 8081:8081 \
  -p 8082-8084:8082-8084 \
  -p 5000:5000  \
  -p 5001:5001 \
  -v /opt/docker/nexus:/nexus-data \
  -e NEXUS_CONTEXT=nexus \
  -e INSTALL4J_ADD_VM_PARAMS="-Xms256m -Xmx512m -XX:MaxDirectMemorySize=512m"  \
  sonatype/nexus3:3.60.0


# 查看启动日志
docker logs -f -n 50 nexus
-------------------------------------------
Started Sonatype Nexus 0SS 3.37.3-02
-------------------------------------------

# 浏览器访问
ip:8868


#查看默认密码
docker exec -it nexus /nexus-data/admin.password



参考文献:https://developer.baidu.com/article/detail.html?id=4554942

# 创建持久化存储目录
mkdir -p /opt/nexus-data
sudo chown -R 200:200 /opt/nexus-data
sudo chmod -R 755 /opt/nexus-data

# 启动容器(Docker)
docker run -d \
  --name nexus3 \
  -p 8081:8081 \
  -p 8082-8084:8082-8084 \
  -v /opt/nexus-data:/nexus-data \
  -e NEXUS_CONTEXT=nexus \
  sonatype/nexus3:3.60.0

登录Sonatype Nexus Repository Manager

创建名称叫docker的Blob Store
image

Blob Stores
image

docker-snapshots: 映射5000端口号(上传) 设置私服Host仓库
image

docker-central
私服Host仓库原来是没有任何东西的,直接去下载是不能下载到任何东西的。除了公司自己内部的项目,还需要像jdk,centos,mysql等各种第三方的开源容器镜像,此时就需要设置一个代理仓库,通过这个代理仓库去第三方平台去拉取(eg: Docker Hub 或 阿里云 & 腾讯云)
image

docker-public:映射5001端口号(下载)
image

最终结果(类比Maven)
image

设置 /etc/docker/daemon.json

将nexus私服仓库的地址是一个普通访问的地址,不像https等有认证,所以需要在。
docker里面默认将除docker认证的服务意外,所有的其他非https的非认证服务,会被直接报错。是docker不让访问,所以需要修改docker配置。

{
  "registry-mirrors": ["https://xxxxx.com"],
  "insecure-registries":["192.168.113.121:5000", "192.168.113.121:5001"]
}

重启服务,登录私服

systemctl restart docker
# 登录nexus管理员账户:admin
docker login -u admin 172.21.0.16:5000
Password: (在此处输入nexus设置的密码)
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@VM-0-16-centos docker]# 

# 查看本地现有docker镜像
docker images 
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
sonatype/nexus3   latest    f0f4c1c8dc43   41 hours ago   669MB
sonatype/nexus3   3.60.0    0b14bd3acc13   3 years ago    552MB

#通过docker tag 命令给nexus3:3.36.0起别名
docker tag 0b14bd3acc13 172.21.0.16:5000/sonatype/nexus3:3.60.0

# 查看本地现有docker镜像
docker images
REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
sonatype/nexus3                    latest    f0f4c1c8dc43   41 hours ago   669MB
172.21.0.16:5000/sonatype/nexus3   3.60.0    0b14bd3acc13   3 years ago    552MB
sonatype/nexus3                    3.60.0    0b14bd3acc13   3 years ago    552MB


# 推送别名中附带私服ip和地址的容器镜像到私服
docker push 172.21.0.16:5000/sonatype/nexus3:3.60.0

查看docker私服
image

  1. 我们只给非proxy的docker-public(group) 和 docker-snapshots(hosted) 设置了端口号,所以此时只能用 5000和5001。

  2. 但外来三方的镜像只能去proxy的 docker-central 中去找(因为docker-central设置了第三方库的代理url)。

  3. 而5001的docker-public里面又包含了 docker-central 和 docker-snapshots(也许这就是他命名为public的原因吧)

image

  1. 所以上传用5000(Hosted),精准上传到具体Hosted的私服,

  2. 下载用5001(public),即能下载到自己的,又能下载到开源公共的。

  3. 问题是:当既要上传,又要拉取时,就有点麻烦,因为需要多次登录不同的端口号的私服:
    因为上传和下载都需要登录nexus私服,都需要ip和端口号:

docker login -u admin 172.21.0.16:5000
docker login -u admin 172.21.0.16:5001

2. Harbor

除了Docker Hub以外最早的一个比较受欢迎的Docker企业级Registry服务器。阿里云私服、Nexus 就只能当一个仓库使用,在本地push到远程,再从远程拉取,而Harbor可以做到可视化的界面级容器构建

使用前提:
必须要先安装Docker 和 docker-compose

harbor下载
https://github.com/goharbor/harbor/releases#release-v2.15.2

Harbor介绍文章
https://cloud.tencent.com/developer/article/2170708

安装并使用Docker和Docker Compose(阿里云)
https://help.aliyun.com/zh/ecs/user-guide/install-and-use-docker#4787944e3bwid

腾讯云按照Docker
https://cloud.tencent.com.cn/document/product/213/46000#azYB6haoacR0zO9ry1cHx

虽然腾讯云安装Docker只install了 docker-ce,但是阿里云中需要显式install的 docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 也全都被安装了进来

[root@VM-0-16-centos docker]# sudo yum -y install  docker-ce-cli
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 1:docker-ce-cli-26.1.4-1.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@VM-0-16-centos docker]# sudo yum -y install containerd.io
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 containerd.io-1.6.33-3.1.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@VM-0-16-centos docker]# sudo yum -y install  docker-buildx-plugin
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 docker-buildx-plugin-0.14.1-1.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@VM-0-16-centos docker]# sudo yum -y install  docker-compose-plugin
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 docker-compose-plugin-2.27.1-1.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@VM-0-16-centos docker]#

注意
虽然显示有 软件包 docker-compose-plugin-2.27.1-1.el7.x86_64 已安装并且是最新版本,但是docker-compose命令时显示没有此命令

[root@VM-0-16-centos harbor]# docker-compose --version
-bash: docker-compose: 未找到命令
[root@VM-0-16-centos harbor]# docker-compose 
-bash: docker-compose: 未找到命令
[root@VM-0-16-centos harbor]# docker-compose
-bash: docker-compose: 未找到命令
[root@VM-0-16-centos harbor]# yum install -y docker-compose

下载最新harbor包:harbor-offline-installer-v2.15.2.tgz

将harbor-offline-installer-v2.15.2.tgz放置到/opt下

cd /opt
tar -zxvf harbor-offline-installer-v2.15.2.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

修改harbor.yml

# 有域名用域名,没有域名就用ip
hostname: 172.21.0.16

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 8858

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /your/certificate/path
  private_key: /your/private/key/path
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

harbor_admin_password: Harbor12345

执行按照harbor的前置工作

bash prepare

./install.sh

[Step 5]: starting Harbor ...
[+] Running 10/10
 ✔ Network harbor_harbor        Created                                                                                                                                                          0.0s 
 ✔ Container harbor-log         Started                                                                                                                                                          0.3s 
 ✔ Container registry           Started                                                                                                                                                          0.5s 
 ✔ Container harbor-db          Started                                                                                                                                                          0.5s 
 ✔ Container redis              Started                                                                                                                                                          0.5s 
 ✔ Container harbor-portal      Started                                                                                                                                                          0.6s 
 ✔ Container registryctl        Started                                                                                                                                                          0.6s 
 ✔ Container harbor-core        Started                                                                                                                                                          0.7s 
 ✔ Container nginx              Started                                                                                                                                                          0.9s 
 ✔ Container harbor-jobservice  Started                                                                                                                                                          0.8s 
 ✔ ----Harbor has been installed and started successfully.----

Harbor在没有docker-compse命令的情况下成功运行起来,可能是有了docker-compose-plugin,所以也可以成功运行了。

Harbor被安装在了Docker里


[root@VM-0-16-centos docker]# docker images
REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
sonatype/nexus3                    latest    f0f4c1c8dc43   45 hours ago   669MB
goharbor/harbor-exporter           v2.15.2   39b7682c8b7d   2 months ago   162MB
goharbor/valkey-photon             v2.15.2   e7847c15d1eb   2 months ago   225MB
goharbor/trivy-adapter-photon      v2.15.2   00f2535bcde4   2 months ago   484MB
goharbor/harbor-registryctl        v2.15.2   8b1493c7a7d9   2 months ago   226MB
goharbor/registry-photon           v2.15.2   b702cdd9489d   2 months ago   146MB
goharbor/harbor-log                v2.15.2   53002f96b6d8   2 months ago   223MB
goharbor/harbor-jobservice         v2.15.2   460b146d96ed   2 months ago   238MB
goharbor/harbor-core               v2.15.2   06396e2c823b   2 months ago   256MB
goharbor/harbor-portal             v2.15.2   b04a2d729c56   2 months ago   208MB
goharbor/harbor-db                 v2.15.2   8af219aa23d9   2 months ago   348MB
goharbor/prepare                   v2.15.2   55b74fd32bf2   2 months ago   261MB
goharbor/nginx-photon              v2.15.2   8376dcaf5c2f   2 months ago   199MB
172.21.0.16:5000/my-nexus          latest    0b14bd3acc13   3 years ago    552MB
172.21.0.16:5000/sonatype/nexus3   3.60.0    0b14bd3acc13   3 years ago    552MB
sonatype/nexus3                    3.60.0    0b14bd3acc13   3 years ago    552MB
[root@VM-0-16-centos docker]# 
[root@VM-0-16-centos docker]# docker ps
CONTAINER ID   IMAGE                                 COMMAND                   CREATED          STATUS                   PORTS                                                                                                      NAMES
8da172404b77   goharbor/nginx-photon:v2.15.2         "nginx -g 'daemon of…"   52 minutes ago   Up 3 minutes (healthy)   0.0.0.0:8858->8080/tcp, :::8858->8080/tcp                                                                  nginx
6b2afb294ef3   goharbor/harbor-jobservice:v2.15.2    "/harbor/entrypoint.…"   52 minutes ago   Up 2 minutes (healthy)                                                                                                              harbor-jobservice
194ca5263310   goharbor/harbor-core:v2.15.2          "/harbor/entrypoint.…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              harbor-core
d509699bb76f   goharbor/harbor-registryctl:v2.15.2   "/home/harbor/start.…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              registryctl
cc2949d1b4d4   goharbor/registry-photon:v2.15.2      "/home/harbor/entryp…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              registry
3d71f6710976   goharbor/harbor-db:v2.15.2            "/docker-entrypoint.…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              harbor-db
26b95563946b   goharbor/valkey-photon:v2.15.2        "valkey-server /etc/…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              redis
06faf6f1195d   goharbor/harbor-portal:v2.15.2        "nginx -g 'daemon of…"   52 minutes ago   Up 3 minutes (healthy)                                                                                                              harbor-portal
4f76756de43d   goharbor/harbor-log:v2.15.2           "/bin/sh -c /usr/loc…"   52 minutes ago   Up 3 minutes (healthy)   127.0.0.1:1514->10514/tcp                                                                                  harbor-log
c54413e55843   sonatype/nexus3:3.60.0                "/opt/sonatype/nexus…"   4 hours ago      Up 3 minutes             0.0.0.0:5000-5001->5000-5001/tcp, :::5000-5001->5000-5001/tcp, 0.0.0.0:8868->8081/tcp, :::8868->8081/tcp   nexus
[root@VM-0-16-centos docker]# 

安装完成后浏览器运行:ip/8858

image

image


教程安装docker-compose
image

修改/ect/docker/daemon.json文件, 添加172.21.0.8858 端口

{
"insecure-registries": ["172.21.0.16:5000","172.21.0.16:5001", "172.21.0.16.8858"]
}

推送本地镜像到Harbor

1. 登录docker仓库:Harbor

[root@VM-0-16-centos docker]# docker login -u admin 172.21.0.16:8858
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@VM-0-16-centos docker]# 

2. 本地镜像打Tag

posted @ 2026-09-20 15:53  超轶绝尘  阅读(9)  评论(0)    收藏  举报