Docker系列08—搭建使用私有docker registry
本文收录在
1、了解docker registry
1.1 介绍
- registry 用于保存docker 镜像,包括镜像的层次结构和元数据。
- 启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;
- 拉取镜像时,如果不知道registry仓库地址,默认从docker hub搜索拉取镜像
1.2 分类
- sponsor registry:第三方的registry,供客户和docker社区使用;
- mirror registry:第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;
- vendor registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
- private registry:通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽
1.3 registry组成(repository和index)
(1)repository
- 由特定的docker镜像的所有迭代版本组成的镜像仓库;
-
一个registry中可以存在多个repository:
- repository可分为“顶层仓库”和“用户仓库”
- 用户仓库名称格式为“用户名/仓库名”
- 每个仓库可以包含多个tag(标签),每个标签对应一个镜像
(2)index
- 维护用户账户、镜像的校验以及公共命名空间的信息
- 相当于为registry提供了一个完成用户认证等功能的检索接口
1.4 拉取上传仓库镜像
(1)拉取镜像
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
- registry:仓库服务器地址:不指定默认是docker hub
- port:端口;默认是443,因为是https协议
- namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省
- name:仓库名
- tag:标签名;默认是latest版本
(2)上传镜像
docker push [options] name[:tag]
1.5 知名docker仓库
例:docker pull quay.io/coreos/flannel:v0.10.0-amd64
博主前面的文章已经详细介绍过,从第三方的registry 上传拉取镜像了;这篇就是详细讲解如果搭建私有registry ,并在私有registry上传拉取镜像了。
2、搭建私有仓库 distribution
2.1 distribution 介绍
docker提供的开源registry,但是很简单,只能作为存储镜像的仓库,没有额外的功能;如管理页面等
2.2 安装启动 distribution
两种方案安装,我采用的是方案2
2.2.1 方案1:使用yum安装(直接从extras 源中下载安装)
[root@docker2 ~]# yum info docker-distribution
已加载插件:fastestmirror
loading mirror speeds from cached hostfile
可安装的软件包
名称 :docker-distribution
架构 :x86_64
版本 :2.6.2
发布 :2.git48294d9.el7
大小 :3.5 m
源 :extras/7/x86_64
简介 : docker toolset to pack, ship, store, and deliver content
网址 :https://github.com/docker/distribution
协议 : asl 2.0
描述 : docker toolset to pack, ship, store, and deliver content
[root@docker2 ~]# yum -y install docker-distribution
2.2.2 方案2:拉取镜像,作为容器安装
(1)拉取镜像
[root@docker2 ~]# docker pull registry:2.6.2
2.6.2: pulling from library/registry
d6a5679aa3cf: pull complete
ad0eac849f8f: pull complete
2261ba058a15: pull complete
f296fda86f10: pull complete
bcd4a541795b: pull complete
digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8
status: downloaded newer image for registry:2.6.2
(2)启动registry 容器
[root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2
a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119
[root@docker2 ~]# docker port registry
5000/tcp -> 0.0.0.0:5000
[root@docker2 ~]# ss -nutlp |grep 5000
tcp listen 0 128 :::5000 :::* users:(("docker-proxy",pid=4901,fd=4))
[root@docker2 ~]# docker inspect -f {{."mounts"}} registry
[{bind /data/registry /var/lib/registry true rprivate}]
注:
- -p 5000:5000:将容器中的5000端口,暴露在宿主机的5000端口
- -v /data/registry:/var/lib/registry:指定宿主机存储的位置为 /data/registry
- -d:后台运行容器
2.3 从私有仓库上传下载镜像
2.3.1 将本地的镜像上传到私有仓库
(1)先将本地仓库打上合适的标签
[root@docker1 ~]# docker tag busybox:latest 192.168.10.102:5000/busybox:v0.1
[root@docker1 ~]# docker image ls
repository tag image id created size
192.168.10.102:5000/busybox v0.1 758ec7f3a1ee 13 days ago 1.15 mb
busybox latest 758ec7f3a1ee 13 days ago 1.15 mb
(2)尝试删除镜像
[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1
the push refers to a repository [192.168.10.102:5000/busybox]
get https://192.168.10.102:5000/v1/_ping: http: server gave http response to https client
上传镜像失败;原因:docker 上传下载默认只支持https协议,搭建的私有仓库是http协议。
(3)修改重启docker服务
[root@docker1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["192.168.10.102:5000"]
}
[root@docker1 ~]# systemctl restart docker
注:就是将私有仓库认证为安全仓库:"insecure-registries": [""]
(4)再次上传镜像,成功
[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1
the push refers to a repository [192.168.10.102:5000/busybox]
23bc2b70b201: pushed
v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
(5)在私有仓库的服务器上验证
[root@docker2 ~]# ls /data/registry/docker/registry/v2/
blobs repositories
(6)从私有仓库拉取镜像,先删除再拉取
[root@docker1 ~]# docker rmi 192.168.10.102:5000/busybox:v0.1
untagged: 192.168.10.102:5000/busybox:v0.1
untagged: 192.168.10.102:5000/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
[root@docker1 ~]# docker image ls
repository tag image id created size
busybox latest 758ec7f3a1ee 2 weeks ago 1.15 mb
[root@docker1 ~]# docker pull 192.168.10.102:5000/busybox:v0.1
v0.1: pulling from busybox
digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
status: downloaded newer image for 192.168.10.102:5000/busybox:v0.1
[root@docker1 ~]# docker image ls
repository tag image id created size
192.168.10.102:5000/busybox v0.1 758ec7f3a1ee 2 weeks ago 1.15 mb
3、安装搭建私有仓库 harbor
3.1 认识 harbor
3.1.1 harbor 介绍
- harbor gitlab项目地址:
- harbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源docker distribution。使注册表更接近构建和运行环境可以提高图像传输效率。harbor支持在注册表之间复制映像,还提供高级安全功能,如用户管理,访问控制和活动审计。
- harbour由cloud native computing foundation(cncf)托管。如果您是一个希望帮助塑造云原生技术发展的组织,请考虑加入cncf。有关谁参与以及harbour如何扮演角色的详细信息,请阅读cncf 公告。
3.1.2 harbor 特征
- 云本机注册表:harbour 支持容器映像和helm图表,可用作云本机环境(如容器运行时和业务流程平台)的注册表。
- 基于角色的访问控制:用户和存储库通过“项目”进行组织,用户可以对项目下的图像拥有不同的权限。
- 基于策略的映像复制:可以基于具有多个过滤器(存储库,标记和标签)的策略在多个注册表实例之间复制(同步)映像。如果遇到任何错误,harbor将自动重试进行复制。非常适合负载平衡,高可用性,多数据中心,混合和多云场景。
- 漏洞扫描:harbor定期扫描图像并警告用户漏洞。
- ldap / ad支持:harbor与现有企业ldap / ad集成以进行用户身份验证和管理,并支持将ldap组导入harbor并为其分配适当的项目角色。
- 图像删除和垃圾收集:可以删除图像,并可以回收它们的空间。
- 公证:可以确保图像的真实性。
- 图形用户门户:用户可以轻松浏览,搜索存储库和管理项目。
- 审计:跟踪存储库的所有操作。
- restful api:适用于大多数管理操作的restful api,易于与外部系统集成。
- 易于部署:提供在线和离线安装程序。
3.1.3 harbor 配置参数
(1)参数介绍
① 配置参数位于文件harbor.cfg中。
② 在harbor.cfg中有两类参数,必需参数和可选参数。
- required参数:需要在配置文件中设置这些参数。如果用户更新它们harbor.cfg并运行install.sh脚本以重新安装harbor,它们将生效。
- 可选参数:这些参数对于更新是可选的,即用户可以将它们保留为默认值,并在启动harbour后在web portal上更新它们。如果它们已经启用harbor.cfg,它们只会在首次启动harbour时生效。harbor.cfg将忽略对这些参数的后续更新。
③ 注意:如果您选择通过portal设置这些参数,请务必在harbour启动后立即执行此操作。特别是,您必须在harbour中注册或创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除默认管理员用户外), 无法更改auth_mode。
④ 请注意,至少需要更改hostname属性。
(2)必需参数
- hostname:目标主机的主机名,用于访问portal和注册表服务。它应该是目标计算机的ip地址或完全限定的域名(fqdn),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名 - 外部客户端需要访问注册表服务!
- ui_url_protocol :( http或https。默认为http)用于访问portal和令牌/通知服务的协议。如果启用了公证,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用https访问配置harbor。
- db_password:用于db_auth的postgresql数据库的root密码。更改此密码以用于任何生产用途!
- max_job_workers :(默认值为10)作业服务中的最大复制工作者数。对于每个映像复制作业,工作程序将存储库的所有标记同步到远程目标。增加此数量可以在系统中实现更多并发复制作业。但是,由于每个工作者都消耗一定量的网络/ cpu / io资源,请根据主机的硬件资源仔细选择该属性的值。
- customize_crt:(on or off. default is on),如果此属性on,在准备脚本创建注册表的令牌生成/验证私钥和根证书。当外部源提供密钥和根证书时,将此属性设置为off。有关详细信息,请参阅自定义密钥和港口令牌服务证书。
- ssl_cert:ssl证书的路径,仅在协议设置为https时应用。
- ssl_cert_key:ssl密钥的路径,仅在协议设置为https时应用。
- secretkey_path:用于加密或解密复制策略中远程注册表密码的密钥路径。
- log_rotate_count:日志文件在被删除之前会被轮换log_rotate_count次。如果count为0,则删除旧版本而不是旋转。
- log_rotate_size:仅当日志文件大于log_rotate_size字节时才会轮换日志文件。如果大小后跟k,则假定大小以千字节为单位。如果使用m,则大小以兆字节为单位,如果使用g,则大小为千兆字节。尺寸100,尺寸100k,尺寸100m和尺寸100g都是有效的。
- http_proxy:为clair配置http代理,例如http://my.proxy.com:3128。
- https_proxy:为clair配置https代理,例如http://my.proxy.com:3128。
- no_proxy:为clair配置无代理,例如127.0.0.1,localhost,core,registry。
(3)可选参数
-
电子邮件设置:harbor需要这些参数才能向用户发送“密码重置”电子邮件,并且仅在需要该功能时才需要。另外,请注意,在默认情况下ssl连接时没有启用-如果你的smtp服务器需要ssl,但不支持starttls,那么你应该通过设置启用ssl email_ssl = true。如果电子邮件服务器使用自签名证书或不受信任证书,则设置email_insecure = true
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_identity =
- email_username = sample_admin@mydomain.com
- email_password = abc
- email_from = admin sample_admin@mydomain.com
- email_ssl = false
- email_insecure = false
- harbor_admin_password:管理员的初始密码。此密码仅在harbor首次启动时生效。之后,将忽略此设置,并且应在portal中设置管理员密码。请注意,默认用户名/密码为admin / harbor12345
- auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于ldap身份验证,请将其设置为ldap_auth。重要信息:从现有harbor实例升级时,必须确保在启动新版本的harbor之前auth_mode相同harbor.cfg。否则,用户可能无法在升级后登录。
- ldap_url:ldap端点url(例如ldaps://ldap.mydomain.com)。 仅在auth_mode设置为ldap_auth时使用。
- ldap_searchdn:具有搜索ldap / ad服务器权限的用户的dn(例如uid=admin,ou=people,dc=mydomain,dc=com)。
- ldap_search_pwd:ldap_searchdn指定的用户密码。
- ldap_basedn:查找用户的基本dn,例如ou=people,dc=mydomain,dc=com。 仅在auth_mode设置为ldap_auth时使用。
- ldap_filter:用于查找用户的搜索过滤器,例如(objectclass=person)。
- ldap_uid:用于在ldap搜索期间匹配用户的属性,它可以是uid,cn,email或其他属性。
- ldap_scope:搜索用户的范围,0-ldap_scope_base,1-ldap_scope_onelevel,2-ldap_scope_subtree。默认值为2。
- ldap_timeout:连接ldap服务器时超时(以秒为单位)。默认值为5。
- ldap_verify_cert:验证来自ldap服务器的证书。默认为true。
- ldap_group_basedn:在ldap / ad中查找组的基本dn,例如ou=group,dc=mydomain,dc=com。
- ldap_group_filter:搜索ldap / ad组的过滤器,例如objectclass=group。
- ldap_group_gid:用于命名ldap / ad组的属性,它可以是cn,name。
- ldap_group_scope:搜索ldap组的范围。0-ldap_scope_base,1-ldap_scope_onelevel,2-ldap_scope_subtree。默认值为2。
- self_registration :( 打开或关闭。默认打开)启用/禁用用户注册他/她自己的能力。禁用时,新用户只能由管理员用户创建,只有管理员用户可以在harbor中创建新用户。 注意:当auth_mode设置为ldap_auth时,始终禁用自注册功能,并忽略此标志。
- token_expiration:令牌服务创建的令牌的到期时间(以分钟为单位),默认为30分钟。
- project_creation_restriction:用于控制用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,这样只有管理员才能创建项目。
(4)配置存储后端(可选)
默认情况下,harbor将图像存储在本地文件系统中。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,如s3,openstack swift,ceph等。这些参数是注册表的配置。
- registry_storage_provider_name:注册表的存储提供程序名称,可以是filesystem,s3,gcs,azure等。默认为filesystem。
- registry_storage_provider_config:存储提供程序配置的逗号分隔“key:value”对,例如“key1:value,key2:value2”。默认为空字符串。
- registry_custom_ca_bundle:自定义根ca证书的路径,它将注入到注册表和图表存储库容器的信任库中。当用户使用自签名证书托管内部存储时,通常需要这样做。
例如,如果使用openstack swift作为存储后端,则参数可能如下所示:
registry_storage_provider_name = swift
registry_storage_provider_config = “ username:admin,password:admin_pass,authurl:http:// keystone_addr:35357 / v3 / aut
注意:有关注册表存储后端的详细信息,请参阅“ 。
3.2 安装主机的先决条件
3.2.1 硬件
资源 | 容量 | 描述 |
---|---|---|
cpu | 最小2 cpu | 4 cpu是首选 |
内存 | 最小4gb | 8gb是首选 |
磁盘 | 最小40gb | 160gb是首选 |
3.2.2 软件
软件 | 版 | 描述 |
---|---|---|
python | 2.7或更高版本 | 请注意,您可能必须在linux发行版(gentoo,arch)上安装python,默认情况下不安装python解释器 |
docker engine | 版本1.10或更高版本 | 有关安装说明,请参阅:: |
docker compose | 版本1.6.0或更高版本 | 有关安装说明,请参阅:: |
openssl | 最新的是首选 | 为harbor生成证书和密钥 |
3.2.3 网络端口
端口 | 协议 | 描述 |
---|---|---|
443 | https | harbor门户和核心api将接受此端口上的https协议请求 |
4443 | https | 只有在启用“公证”时才需要连接到dock的docker content trust服务 |
80 | http | harbor端口和核心api将接受此端口上的http协议请求 |
3.2.4 添加一块50g 新硬盘(如果磁盘足够,可忽略)
博主也是太长时间没有进行硬盘添加的操作了,熟悉一遍
(1)查询添加的磁盘的名字
$ fdisk -l
disk /dev/sdb: 53.7 gb, 53687091200 bytes, 104857600 sectors
units = sectors of 1 * 512 = 512 bytes
sector size (logical/physical): 512 bytes / 512 bytes
i/o size (minimum/optimal): 512 bytes / 512 bytes
(2)对磁盘进行分区
$ fdisk /dev/sdb
command (m for help): m
command (m for help): n
partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
using default response p
partition number (1-4, default 1):
first sector (2048-104857599, default 2048):
using default value 2048
last sector, +sectors or +size{k,m,g} (2048-104857599, default 104857599):
using default value 104857599
partition 1 of type linux and of size 50 gib is set
command (m for help): w
the partition table has been altered!
calling ioctl() to re-read partition table.
syncing disks.
(3)磁盘文件格式化
$ [root@centos7-1 ~]# mkfs.ext3 /dev/sdb1
(4)挂载磁盘
$ vim /etc/fstab 设为开机自动挂载
/dev/sdb1 /data ext3 defaults 0 0
$ mount -a 挂载磁盘
(5)验证
[root@centos7-1 ~]# df -h /data
filesystem size used avail use% mounted on
/dev/sdb1 50g 52m 47g 1% /data
3.2.5 安装docker编排工具 docker compose
方案1:直接yum安装
[root@docker2 ~]# yum -y install docker-compose
方案2:在github上选择自己需要的版本下载安装
$ curl -l https://github.com/docker/compose/releases/download/1.23.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
cpython version: 3.6.7
openssl version: openssl 1.1.0f 25 may 2017
3.4 安装搭建harbor
3.4.1 下载harbor 安装包
资源可以下载的很慢,我已经将1.7.1版本放入我的网盘了,需要的私聊
[root@docker2 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz
[root@docker2 ~]# tar -c /data/ -xvf harbor-offline-installer-v1.7.1.tgz
3.4.2 配置harbor 服务
(1)修改harbor.cfg 配置文件
[root@docker2 ~]# cd /data/harbor/
[root@docker2 harbor]# grep "^[^#]" harbor.cfg
_version = 1.7.0
hostname = docker2
ui_url_protocol = http
max_job_workers = 2
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = na
log_rotate_count = 50
log_rotate_size = 200m
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,core,registry
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
harbor_admin_password = harbor12345
auth_mode = db_auth
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 2
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
self_registration = on
token_expiration = 30
project_creation_restriction = everyone
db_host = postgresql
db_password = along
db_port = 5432
db_user = postgres
redis_host = redis
redis_port = 6379
redis_password = along
redis_db_index = 1,2,3
clair_db_host = postgresql
clair_db_password = along
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
clair_updaters_interval = 12
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
registry_custom_ca_bundle =
主要修改了:
hostname:主机名
max_job_workers:最大cpu数,小于等于自己服务器的硬件
(2)定义docker-compose.yml 文件(可省略)
docker-compose.yml 文件是docker 编排时,对容器的一些操作:
① 端口
ports:
- 80:80
- 443:443
- 4443:4443
② 众多存储器路径
如:volumes:
- /data/registry:/storage:z
在生产环境中,尽量将容器的存储卷定义在空间较为充足的磁盘;
自己根据实际情况进行修改;
3.4.3 安装启动harbor
[root@docker2 harbor]# ./install.sh
[step 0]: checking installation environment ...
note: docker version: 18.03.1
note: docker-compose version: 1.23.2
[step 1]: loading harbor images ...
loaded image: goharbor/registry-photon:v2.6.2-v1.7.1
loaded image: goharbor/harbor-migrator:v1.7.1
loaded image: goharbor/harbor-adminserver:v1.7.1
loaded image: goharbor/harbor-core:v1.7.1
loaded image: goharbor/harbor-log:v1.7.1
loaded image: goharbor/harbor-jobservice:v1.7.1
loaded image: goharbor/notary-server-photon:v0.6.1-v1.7.1
loaded image: goharbor/clair-photon:v2.0.7-v1.7.1
loaded image: goharbor/harbor-portal:v1.7.1
loaded image: goharbor/harbor-db:v1.7.1
loaded image: goharbor/redis-photon:v1.7.1
loaded image: goharbor/nginx-photon:v1.7.1
loaded image: goharbor/harbor-registryctl:v1.7.1
loaded image: goharbor/notary-signer-photon:v0.6.1-v1.7.1
loaded image: goharbor/chartmuseum-photon:v0.7.1-v1.7.1
[step 2]: preparing environment ...
generated and saved secret to file: /data/secretkey
generated configuration file: ./common/config/nginx/nginx.conf
generated configuration file: ./common/config/adminserver/env
generated configuration file: ./common/config/core/env
generated configuration file: ./common/config/registry/config.yml
generated configuration file: ./common/config/db/env
generated configuration file: ./common/config/jobservice/env
generated configuration file: ./common/config/jobservice/config.yml
generated configuration file: ./common/config/log/logrotate.conf
generated configuration file: ./common/config/registryctl/env
generated configuration file: ./common/config/core/app.conf
generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
the configuration files are ready, please use docker-compose to start the service.
[step 3]: checking existing instance of harbor ...
[step 4]: starting harbor ...
creating network "harbor_harbor" with the default driver
creating harbor-log ... done
creating registry ... done
creating harbor-db ... done
creating registryctl ... done
creating harbor-adminserver ... done
creating redis ... done
creating harbor-core ... done
creating harbor-portal ... done
creating harbor-jobservice ... done
creating nginx ... done
✔ ----harbor has been installed and started successfully.----
now you should be able to visit the admin portal at http://docker2.
for more details, please visit https://github.com/goharbor/harbor .
3.4.3 安装后验证
(1)打开了一些端口
[root@docker2 harbor]# ss -nutlp |grep docker
tcp listen 0 128 127.0.0.1:1514 *:* users:(("docker-proxy",pid=1440,fd=4))
tcp listen 0 128 :::80 :::* users:(("docker-proxy",pid=2204,fd=4))
tcp listen 0 128 :::443 :::* users:(("docker-proxy",pid=2192,fd=4))
tcp listen 0 128 :::4443 :::* users:(("docker-proxy",pid=2181,fd=4))
(2)harbor实际就是启动了一些docker服务
[root@docker2 ~]# docker ps
container id image command created status ports names
def22a8eeb9a goharbor/nginx-photon:v1.7.1 "nginx -g 'daemon of…" 2 hours ago up 2 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
a410a38479fa goharbor/harbor-portal:v1.7.1 "nginx -g 'daemon of…" 2 hours ago up 2 hours (healthy) 80/tcp harbor-portal
e25f87eb80db goharbor/harbor-jobservice:v1.7.1 "/harbor/start.sh" 2 hours ago up 2 hours harbor-jobservice
2be7211535a2 goharbor/harbor-core:v1.7.1 "/harbor/start.sh" 2 hours ago up 2 hours (healthy)
相关文章:
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
上一篇: javascript--作用域解析
发表评论