💫3.4 仓库 Registry

3.4.1 基本概念

是什么?

镜像仓库:用于管理 Docker 的镜像

为什么需要?

  • 快速交付:当应用开发完成后,直接打包为一个镜像,将镜像上传到仓库后,可以在任何装有 Docker 的机器上下载该镜像,并运行为一个容器
  • 便于镜像的重复利用

能干什么?

  • 实现快速交付,可以更方便在其他机器上下载镜像运行容器
  • 可以存储公司内部私有镜像,避免暴露到外网
  • 提升镜像下载速度

3.4.2 常见的仓库

3.4.2.1 Docker Hub

官方站点:https://hub.docker.com

img

3.4.2.2 Aliyun

阿里云镜像仓库

3.4.2.2.1 本地镜像发布到阿里云流程

img

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
  • 创建仓库镜像
  1. 选择控制台,进入容器镜像服务
  2. 选择个人实例
  3. 命名空间
  4. 仓库名称
  5. 进入管理界面获取脚本
  • 将镜像推送到阿里云

将继续推送到阿里云 registry

  • 管理界面脚本

img

  • 脚本实例
# 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][镜像版本号]参数。

img

img

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
~ docker history 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
~ docker exec -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
# 查看镜像的历史记录
$ docker history 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 -c set -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
$ docker ps -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
$ curl 127.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
# 开放权限
$ chmod 777 -R /opt/docker

# 启动 nexus 容器
# 5000 数据上传容器内的端口 5001 是进行仓库拉取镜像的端口
$ docker run -d --restart=always \
  -p 10880:8081 -p 5000:5000 -p 5001:5001 \
  --name nexus \
  -v /opt/docker/nexus:/nexus-data \
  sonatype/nexus3
# nexus 第一次启动会比较慢,需要一定时间进行初始化过程
$ docker logs -f -n 200 nexus

# 查看默认密码
$ docker exec -it nexus cat /nexus-data/admin.password
d775567d-c1b5-492b-a481-96f011d80415

img

  • 右上角点击"Sign in"进行登录。用户名:admin/密码:d775567d-c1b5-492b-a481-96f011d80415[需要查看文件得到]
  • 根据向导进行配置即可。

img

img

  • maven-pulibc 是一个分组,所有的访问都可以从 maven-pulibc 进行访问
  • maven-release 是发布后的 jar 包(即测试通过后的 jar 包)
  • maven-snapshots 是测试代码存放的位置
  • maven-central 是一个只读的位置,是一个代理,可以将请求发送到配置阿里云镜像仓库

Type 类型:

  • hosted 会把代码数据提交上来并保存在私服仓库的本地
  • proxy 是连接远程的 Maven 仓库,访问远程的代理
  • group 是将创建的 Repository 仓库进行聚合在一起

创建存储器

img

img

创建 Docker 仓库

img

img

  • 创建 docker(hosted) 仓库

img

  • 创建 docker(proxy) 代理仓库[ 配置好代理地址即可创建主机 ]

img

  • 创建 docker(group) 分组

img

img

💫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 容器的状态
$ docker ps
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

img

img

拉取镜像

$ docker pull 10.0.0.30:5000/alpine:v1.0.0
v1.0.0: Pulling from alpine
Digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3
Status: Downloaded newer image for 10.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 for 10.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 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。

img

作为一个企业级私有 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 安装

sudo curl -L "http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链:

sudo ln -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

img

$ docker-compose ps
      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)

img

Harbor WebUI 用户名:admin

Harbor WebUI 密码:Harbor12345

img

💫3.4.2.3.3 Harbor 的使用
  • 创建用户[ 后续用户可以登录到 Harbor 仓库中 ]

img

  • 创建项目[ 在Harbor中的"项目"选择"新建项目" ]

img

  • 项目中可以添加相应的成员信息

img

修改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 -A 4 "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 容器的状态
$ docker ps
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-compose ps
      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

img

img

拉取镜像

# 可以使用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 date for 10.0.0.30:20880/web_cloud/alpine@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3

img

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 仓库路径/镜像名称:版本
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐