Docker 07 repository
一、什么是仓库
用来管理docker镜像的仓库
二、为什么需要仓库?
- 快速交付: 应用开发完成后可以直接打包成镜像并上传到仓库,可以在任何装有Docker的机器上下载该镜像,并运行为一个容器。
- 重复利用: 可以更方便的在其他机器上下载镜像、运行容器
- 创建私服: 避免暴露在外网、并提高下载速度(公司内网)
三、常见的仓库
- Docker Hub
- Aliyun
- 自主搭建(私服仓库)
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

Blob Stores

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

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

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

最终结果(类比Maven)

设置 /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私服

-
我们只给非proxy的docker-public(group) 和 docker-snapshots(hosted) 设置了端口号,所以此时只能用 5000和5001。
-
但外来三方的镜像只能去proxy的 docker-central 中去找(因为docker-central设置了第三方库的代理url)。
-
而5001的docker-public里面又包含了 docker-central 和 docker-snapshots(也许这就是他命名为public的原因吧)

-
所以上传用5000(Hosted),精准上传到具体Hosted的私服,
-
下载用5001(public),即能下载到自己的,又能下载到开源公共的。
-
问题是:当既要上传,又要拉取时,就有点麻烦,因为需要多次登录不同的端口号的私服:
因为上传和下载都需要登录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


教程安装docker-compose

修改/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]#

浙公网安备 33010602011771号