💫3.4 仓库 Registry
3.4.1 基本概念
是什么?
镜像仓库:用于管理 Docker 的镜像
为什么需要?
- 快速交付:当应用开发完成后,直接打包为一个镜像,将镜像上传到仓库后,可以在任何装有 Docker 的机器上下载该镜像,并运行为一个容器
- 便于镜像的重复利用
能干什么?
- 实现快速交付,可以更方便在其他机器上下载镜像运行容器
- 可以存储公司内部私有镜像,避免暴露到外网
- 提升镜像下载速度
3.4.2 常见的仓库
3.4.2.1 Docker Hub
3.4.2.2 Aliyun
阿里云镜像仓库
3.4.2.2.1 本地镜像发布到阿里云流程
3.4.2.2.2 镜像的生成方法
- 基于当前容器创建一个新的镜像,新功能增强
$ docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
- 使用 Dockerfile 文件
3.4.2.2.3 将本地镜像推送到阿里云
- 本地镜像素材原型
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu v1.0 a8375a7783cc 9 hours ago 174MB
- 阿里云开发者平台
https://promotion.aliyun.com/ntms/act/kubernetes.html
- 创建仓库镜像
- 选择控制台,进入容器镜像服务
- 选择个人实例
- 命名空间
- 仓库名称
- 进入管理界面获取脚本
- 将镜像推送到阿里云
将继续推送到阿里云 registry
- 管理界面脚本
- 脚本实例
# 1. 登录阿里云Docker Registry
$ docker login --username=kubedragonzw registry.cn-shenzhen.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码
# 3. 将镜像推送到Registry
$ docker login --username=kubedragonzw registry.cn-shenzhen.aliyuncs.com
$ docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:[镜像版本号]
$ docker push registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:[镜像版本号]# docker tag myubuntu:v1.0 registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/myubuntu:v1.0# docker push registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/myubuntu:v1.0
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
3.4.2.2.4 将阿里云上的镜像下载到本地
# 3. 从Registry中拉取镜像
$ docker pull registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/ubuntu:[镜像版本号]
~ docker pull registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/ubuntu:1.0
~ dockerhistory registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/ubuntu:1.0
IMAGE CREATED CREATED BY SIZE COMMENT
e3587595bab1 44 minutes ago /bin/bash 105MB 添加VIM软件
<missing>9 months ago /bin/sh -c#(nop) CMD ["bash"] 0B<missing>9 months ago /bin/sh -c#(nop) ADD file:5d68d27cc15a80653… 72.8MB
~ docker run -itd--name au1 registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/ubuntu:1.0 /bin/bash
~ dockerexec-it au1 /bin/bash
root@10dc9cc87e81:/# vim --version
VIM - Vi IMproved 8.1(2018 May 18, compiled Feb 01 2022 09:16:32)# docker pull docker push registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:[镜像版本号]# 拉取镜像
$ docker pull registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:v2.0
# 查看镜像的历史记录
$ dockerhistory registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:v2.0
IMAGE CREATED CREATED BY SIZE COMMENT
7e52ca924574 3 hours ago nginx -g daemon off;1.23kB nginx container
<missing>16 months ago /bin/sh -c#(nop) CMD ["nginx" "-g" "daemon… 0B<missing>16 months ago /bin/sh -c#(nop) STOPSIGNAL SIGQUIT 0B<missing>16 months ago /bin/sh -c#(nop) EXPOSE 80 0B<missing>16 months ago /bin/sh -c#(nop) ENTRYPOINT ["/docker-entr… 0B<missing>16 months ago /bin/sh -c#(nop) COPY file:09a214a3e07c919a… 4.61kB<missing>16 months ago /bin/sh -c#(nop) COPY file:0fd5fca330dcd6a7… 1.04kB<missing>16 months ago /bin/sh -c#(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB<missing>16 months ago /bin/sh -c#(nop) COPY file:65504f71f5855ca0… 1.2kB<missing>16 months ago /bin/sh -cset-x&& addgroup --system -… 61.1MB
<missing>16 months ago /bin/sh -c#(nop) ENV PKG_RELEASE=1~bullseye 0B<missing>16 months ago /bin/sh -c#(nop) ENV NJS_VERSION=0.7.1 0B<missing>16 months ago /bin/sh -c#(nop) ENV NGINX_VERSION=1.21.5 0B<missing>16 months ago /bin/sh -c#(nop) LABEL maintainer=NGINX Do… 0B<missing>16 months ago /bin/sh -c#(nop) CMD ["bash"] 0B<missing>16 months ago /bin/sh -c#(nop) ADD file:09675d11695f65c55… 80.4MB# 将镜像运行成容器
$ docker run -it--name nginx-demo -d-P registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:v2.0
$ dockerps-l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af6fcf5626c1 registry.cn-shenzhen.aliyuncs.com/dragonzw_personal_images/nginx:v2.0 "/docker-entrypoint.…"8 seconds ago Up 7 seconds 0.0.0.0:32770->80/tcp nginx-demo
$ curl127.0.0.1:32770
<h1>Welcome to My Nginx ...</h1>
🌈3.4.2.3 自主搭建(私服仓库)
💫3.4.2.3.1 Nexus 的简介和搭建
Nexus
Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用 Nexus 你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个 Artifact。Nexus 是一套 “开箱即用” 的系统不需要数据库,它使用文件系统加 Lucene 来组织数据。Nexus 使用 ExtJS 来开发界面,利用 Restlet 来提供完整的 REST APIs,通过 m2eclipse 与 Eclipse 集成使用。Nexus 支持 WebDAV 与 LDAP 安全身份认证。
# 创建持久化目录
$ mkdir-p /opt/docker/nexus
# 开放权限
$ chmod777-R /opt/docker
# 启动 nexus 容器# 5000 数据上传容器内的端口 5001 是进行仓库拉取镜像的端口
$ docker run -d--restart=always \-p10880:8081 -p5000:5000 -p5001:5001 \--name nexus \-v /opt/docker/nexus:/nexus-data \
sonatype/nexus3
# nexus 第一次启动会比较慢,需要一定时间进行初始化过程
$ docker logs -f-n200 nexus
# 查看默认密码
$ dockerexec-it nexus cat /nexus-data/admin.password
d775567d-c1b5-492b-a481-96f011d80415
- 右上角点击"Sign in"进行登录。
用户名:admin/密码:d775567d-c1b5-492b-a481-96f011d80415[需要查看文件得到]
- 根据向导进行配置即可。
- maven-pulibc 是一个分组,所有的访问都可以从 maven-pulibc 进行访问
- maven-release 是发布后的 jar 包(即测试通过后的 jar 包)
- maven-snapshots 是测试代码存放的位置
- maven-central 是一个只读的位置,是一个代理,可以将请求发送到配置阿里云镜像仓库
Type 类型:
- hosted 会把代码数据提交上来并保存在私服仓库的本地
- proxy 是连接远程的 Maven 仓库,访问远程的代理
- group 是将创建的 Repository 仓库进行聚合在一起
创建存储器
创建 Docker 仓库
- 创建 docker(hosted) 仓库
- 创建 docker(proxy) 代理仓库[ 配置好代理地址即可创建主机 ]
- 创建 docker(group) 分组
💫3.4.2.3.2 Nexus 的使用
修改Docker 配置文件
# 在Docker机制中,默认除Docker认证服务以外的其他非https协议直接禁用# 5000 数据上传容器内的端口 5001 是进行仓库拉取镜像的端口
$ vim /etc/docker/daemon.json
{"registry-mirrors":["https://po13h3y1.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","http://f1361db2.m.daocloud.io"],
"insecure-registries":["http://10.0.0.30:5000","http://10.0.0.30:5001"],
"exec-opts":["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{"max-size":"100m"},
"storage-driver":"overlay2"}# 重启 Docker 服务
$ systemctl daemon-reload && systemctl restart docker# 查看 Nexus 容器的状态
$ dockerps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2decf8b528ae sonatype/nexus3 "sh -c ${SONATYPE_DI…"41 minutes ago Up 11 seconds 0.0.0.0:5000-5001->5000-5001/tcp, 0.0.0.0:10880->8081/tcp nexus
# 查看容器的日志
$ docker logs nexus
# 使用 Nexus 账号和密码进行登录
$ docker login --username admin --password Admin@h3c 10.0.0.30:5000
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
Nexus 完成镜像管理命令
推送镜像
$ docker pull alpine:latest
# 拉取镜像并推送镜像到Nexus的仓库
$ docker tag alpine:latest 10.0.0.30:5000/alpine:v1.0.0
$ docker push 10.0.0.30:5000/alpine:v1.0.0
The push refers to repository [10.0.0.30:5000/alpine]
8d3ac3489996: Pushed
v1.0.0: digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3 size: 528
拉取镜像
$ docker pull 10.0.0.30:5000/alpine:v1.0.0
v1.0.0: Pulling from alpine
Digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Status: Downloaded newer image for10.0.0.30:5000/alpine:v1.0.0
10.0.0.30:5000/alpine:v1.0.0
$ docker login --username admin --password Admin@h3c 10.0.0.30:5001
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
$ docker pull 10.0.0.30:5001/alpine:v1.0.0
v1.0.0: Pulling from alpine
Digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Status: Downloaded newer image for10.0.0.30:5000/alpine:v1.0.0
10.0.0.30:5001/alpine:v1.0.0
注意:
Nexus 中的 5000 是代表
docker-snapshots
的仓库,现在下载的镜像刚好是
docker-snapshots
的仓库的镜像,故可以正常下载;
但是如果下载的镜像不在
docker-snapshots
的仓库中,是真正的 Nginx / Tomcat 的镜像,那么就无法在
docker-snapshots
的仓库中进行下载,就需要在
docker-central
的仓库中下载,
docker-central
的仓库并没有配置访问路径,只配置了
docker-public
分组,
docker-public
是配置
5001
端口。
所以要实现找到本地仓库镜像就下载,找不到就去远程DockerHub等进行下载,就需要登录到 5001 的下载。
Nexus 将上传和下载分成了两个不同的端口,上传镜像就使用 5000 端口,为了方便下载则使用 5001 端口
💫3.4.2.3.3 Harbor 的简介和搭建
Harbor
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,可以用来构建企业内部的Docker镜像仓库。
它在Docker的开源项目 Distribution的基础上,添加了一些企业需要的功能特性,如镜像同步复制、漏洞扫描和权限管理等。
Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理 (RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。
作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
- 基于角色的访问控制 - 用户与 Docker 镜像仓库通过 “项目” 进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
- 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
- 部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台 (OVA 方式) 虚拟设备。
# 除了 Docker Hub 以外最早的一个比较受欢迎的 Docker 企业级 Registry 服务器。# 使用 Harbor 必须要先安装 docker 以及 docker-compose
Docker Compose
Compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 安装
sudocurl-L"http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname-s)-$(uname-m)"-o /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
sudochmod +x /usr/local/bin/docker-compose
创建软链:
sudoln-s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose--version
🌈注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。
- 安装 Harbor
$ wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz
$ tar-zxvf harbor-offline-installer-v2.8.0.tgz
$ cd harbor/
# 编辑harbor.yml
$ cp-av harbor.yml.tmpl harbor.yml
$ vim harbor.yml
hostname: 10.0.0.30
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 20880# HTTPS协议进行注释# 进行安装Harbor应用(进行预编译)
$ bash prepare
# 进行Harbor的安装
$ bash install.sh
$ docker-composeps
Name Command State Ports
---------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh 13 Up (healthy)
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy)127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy)
nginx nginx -g daemon off; Up (healthy)0.0.0.0:20880->8080/tcp
redis redis-server /etc/redis.conf Up (healthy)
registry /home/harbor/entrypoint.sh Up (healthy)
registryctl /home/harbor/start.sh Up (healthy)
Harbor WebUI 用户名:admin
Harbor WebUI 密码:Harbor12345
💫3.4.2.3.3 Harbor 的使用
- 创建用户[ 后续用户可以登录到 Harbor 仓库中 ]
- 创建项目[ 在Harbor中的"项目"选择"新建项目" ]
- 项目中可以添加相应的成员信息
修改Docker 配置文件
# 在Docker机制中,默认除Docker认证服务以外的其他非https协议直接禁用# 5000 数据上传容器内的端口 5001 是进行仓库拉取镜像的端口
$ vim /etc/docker/daemon.json
{"registry-mirrors":["https://po13h3y1.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","http://f1361db2.m.daocloud.io"],
"insecure-registries":["http://10.0.0.30:20880"],
"exec-opts":["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{"max-size":"100m"},
"storage-driver":"overlay2"}# 重启 Docker 服务
$ systemctl daemon-reload && systemctl restart docker# 查看 Docker 受信任的仓库地址
$ docker info |grep-A4"Insecure Registries"
Insecure Registries:
10.0.0.30:20880
10.0.0.30:5000
10.0.0.30:5001
127.0.0.0/8
# 查看 Harbor 容器的状态
$ dockerps
974f2e26ae4c goharbor/harbor-jobservice:v2.8.0 "/harbor/entrypoint.…"20 minutes ago Restarting (2) Less than a second ago harbor-jobservice
d83ad739e189 goharbor/nginx-photon:v2.8.0 "nginx -g 'daemon of…"20 minutes ago Exited (128)43 seconds ago 0.0.0.0:20880->8080/tcp nginx
f10f8e72f4fe goharbor/harbor-core:v2.8.0 "/harbor/entrypoint.…"20 minutes ago Exited (128)43 seconds ago harbor-core
2021486d3b04 goharbor/redis-photon:v2.8.0 "redis-server /etc/r…"20 minutes ago Up 28 seconds (health: starting) redis
e6794c64cd5b goharbor/registry-photon:v2.8.0 "/home/harbor/entryp…"20 minutes ago Up 29 seconds (health: starting) registry
651c0103f8fb goharbor/harbor-db:v2.8.0 "/docker-entrypoint.…"20 minutes ago Up 28 seconds (health: starting) harbor-db
c051eca3ae33 goharbor/harbor-registryctl:v2.8.0 "/home/harbor/start.…"20 minutes ago Exited (137)33 seconds ago registryctl
adcece30aac6 goharbor/harbor-portal:v2.8.0 "nginx -g 'daemon of…"20 minutes ago Up 28 seconds (health: starting) harbor-portal
6c5ed1f7f802 goharbor/harbor-log:v2.8.0 "/bin/sh -c /usr/loc…"20 minutes ago Up 29 seconds (health: starting)127.0.0.1:1514->10514/tcp harbor-log
# 直接重新部署 Harbor(进入到harbor根目录)
$ docker-compose down &&docker-compose up -d
$ docker-composeps
Name Command State Ports
------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (health: starting)
harbor-db /docker-entrypoint.sh 13 Up (health: starting)
harbor-jobservice /harbor/entrypoint.sh Up (health: starting)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (health: starting)127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (health: starting)
nginx nginx -g daemon off; Up (health: starting)0.0.0.0:20880->8080/tcp
redis redis-server /etc/redis.conf Up (health: starting)
registry /home/harbor/entrypoint.sh Up (health: starting)
registryctl /home/harbor/start.sh Up (health: starting)# 使用 Harbor 账号和密码进行登录
$ docker login --username admin --password Harbor12345 10.0.0.30:20880
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
Harbor 完成镜像管理命令
推送镜像
$ docker pull alpine:latest
$ docker tag alpine:latest 10.0.0.30:20880/web_cloud/alpine:v1.0.0
$ docker push 10.0.0.30:20880/web_cloud/alpine:v1.0.0
The push refers to repository [10.0.0.30:20880/web_cloud/alpine]
8d3ac3489996: Pushed
v1.0.0: digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3 size: 528
拉取镜像
# 可以使用WebUI提示的拉取命令# 别的机器执行会报错
$ docker pull 10.0.0.30:20880/web_cloud/alpine@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Error response from daemon: Get https://10.0.0.30:20880/v2/: http: server gave HTTP response to HTTPS client
# 因为并没有在别的机器daemon.json文件里面配置安全访问的仓库地址
$ vim /etc/docker/daemon.json
{"registry-mirrors":["https://po13h3y1.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","http://f1361db2.m.daocloud.io"],
"insecure-registries":["http://10.0.0.30:20880"],
"exec-opts":["native.cgroupdriver=systemd"],
"log-driver":"json-file",
"log-opts":{"max-size":"100m"},
"storage-driver":"overlay2"}# 重启 Docker 服务
$ systemctl daemon-reload && systemctl restart docker# 建议使用可读性较好的标签命令进行下载(因为是私库所以需要使用用户名和密码进行登录)
$ docker login --username admin --password Harbor12345 10.0.0.30:20880
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
# 拉取镜像
$ docker pull 10.0.0.30:20880/web_cloud/alpine:v1.0.0
$ docker pull 10.0.0.30:20880/web_cloud/alpine@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3: Pulling from web_cloud/alpine
Digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Status: Image is up to datefor10.0.0.30:20880/web_cloud/alpine@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
3.4.3 仓库的使用
3.4.3.1 配置
在
/etc/docker/damon.json
文件中加入
*insecure*-registries: ["仓库访问地址"]
3.4.3.2 认证
docker login -u 用户名 仓库地址
3.4.3.3 推送镜像到仓库
第一步:基于镜像打标签
阿里云:
docker tag <image id> registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:版本
私服仓库:
docker tag <image id> 仓库路径/镜像名称:版本
第二步:推送
docker push <tagName>[:版本]
3.4.3.4 从仓库拉取镜像
登录:
docker login -u用户名 仓库地址
docker pull 仓库路径/镜像名称:版本
版权归原作者 Dark_Ice_ 所有, 如有侵权,请联系我们删除。