第19章 Docker 镜像私有仓库安装与配置及使用
文章目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXIJRnPk-1599612182233)(assets/v2-ad0613da551f0819983ebb3715311033_1200x500.jpg)]
基于 Harbor 搭建 Docker 私有镜像仓库
极乐小程序商店(http://store.dreawer.com/)
什么是 Harbor?
第一次使用这个的时候是刚进公司处理的第一个任务的时候,发现 Harbor 就是一个用于存储和分发 Docker 镜像的企业级Registry 服务器。
网上找到一个 Harbor 的架构图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUyghPTo-1599612182238)(assets/v2-119e23a21244d919d98e5384d95921d8_hd.jpg)]
Harbor 是 VMware 公司开源的企业级 DockerRegistry 项目,项目地址为 https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的 registry 为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 Docker Compose 来对它进行部署。
安装 Docker
因为系统是 CentOS 7.3 ,内核啥的都已经是 3.10,所以不用担心内核升级的问题,一些操作啥的在 7.x 上操作也很方便。
yum update //系统版本更新
vim /etc/yum.repos.d/docker.repo //添加以下内容
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
//下面安装 Docker 引擎
yum install docker-engine -y
//安装docker引擎,此步也可作为更新docker版本的操作:先#systemctl stop docker 停止docker服务,再#yum install docker-engine 更新docker版本
systemctl enable docker.service
systemctl start docker //启动docker守护进程
docker info //查看docker运行情况
docker -v //查看版本信息
修改 Docker 配置文件 /etc/default/docker 如下:
DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io" //换成国内的镜像加速源,不然拉取镜像简直龟速,不想在吐槽了
使用 service docker restart 重启 Docker 服务即可。
或者用官方提供的方式:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ef017c13.m.daocloud.io
安装 Docker-compose
如果是想直接命令安装也行,
下载指定版本的docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
对二进制文件赋可执行权限
chmod +x /usr/local/bin/docker-compose
测试下docker-compose是否安装成功
docker-compose --version
出现如下
docker-compose version 1.17.1, build 6d101fb
但是,这种方法简直龟速,幸好还有种方法,
见这里:https://docs.docker.com/compose/install/#install-compose
这种需要通过 Python 的 pip 安装
安装 PIP
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -vxf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2
python2.7 setup.py install //因为服务器自带 Python 2.7
easy_install-2.7 pip
安装 DOCKER COMPOSE
pip install docker-compose
docker-compose --version //测试安装是否成功
安装 Harbor
wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
离线安装包,也是龟速,把这个下载链接用迅雷下载,速度却贼快,嘿嘿,然后再传到服务器上去,整个过程快很多!
tar -zxvf harbor-offline-installer-v1.1.2.tgz
解压缩之后,进入目录下会看到 harbor.cfg 文件,该文件就是 Harbor 的配置文件。
## Configuration file of Harbor
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 115.159.227.249 #这里我先配置我的服务器IP地址
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123
#Maximum number of job workers in job service
max_job_workers = 3
#Determine whether or not to generate certificate for the registry's token.
#If the value is on, the prepare script creates new root cert and private key
#for generating token to access the registry. If the value is off the default key/cert will be used.
#This flag also controls the creation of the notary signer's cert.
customize_crt = on
#The path of cert and key files for nginx, they are applied only the protocol is set to https
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#The path of secretkey storage
secretkey_path = /data
#Admiral's url, comment this attribute, or set its value to NA when Harbor is standalone
admiral_url = NA
#NOTES: The properties between BEGIN INITIAL PROPERTIES and END INITIAL PROPERTIES
#only take effect in the first boot, the subsequent changes of these properties
#should be performed on web ui
#************************BEGIN INITIAL PROPERTIES************************
#Email account settings for sending out password resetting emails.
#Email server uses the given username and password to authenticate on TLS connections to host and act as identity.
#Identity left blank to act as username.
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
##The initial password of Harbor admin, only works for the first time when Harbor starts.
#It has no effect after the first launch of Harbor.
# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth
#The url for an ldap endpoint.
ldap_url = ldaps://ldap.mydomain.com
#A user's DN who has the permission to search the LDAP/AD server.
#If your LDAP/AD server does not support anonymous search, you should configure this DN and ldap_search_pwd.
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
#the password of the ldap_searchdn
#ldap_search_pwd = password
#The base DN from which to look up a user in LDAP/AD
ldap_basedn = ou=people,dc=mydomain,dc=com
#Search filter for LDAP/AD, make sure the syntax of the filter is correct.
#ldap_filter = (objectClass=person)
# The attribute used in a search to match a user, it could be uid, cn, email, sAMAccountName or other attributes de
pending on your LDAP/AD ldap_uid = uid
#the scope to search for users, 1-LDAP_SCOPE_BASE, 2-LDAP_SCOPE_ONELEVEL, 3-LDAP_SCOPE_SUBTREE
ldap_scope = 3
#Timeout (in seconds) when connecting to an LDAP Server. The default value (and most reasonable) is 5 seconds.
ldap_timeout = 5
# 是否开启自注册
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
#Determine whether the job service should verify the ssl cert when it connects to a remote registry.
#Set this flag to off when the remote registry uses a self-signed or untrusted certificate.
verify_remote_cert = on
#************************END INITIAL PROPERTIES************************
启动 harbor,修改完配置文件后,在的当前目录执行./install.sh,Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务。
启动完成后,我们访问刚设置的 hostname 即可,http://115.159.227.249/,默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射。
登录 Web Harbor , 输入用户名 admin,默认密码(或已修改密码)登录系统。
我们可以看到系统各个模块如下:
项目:新增/删除项目,查看镜像仓库,给项目添加成员、查看操作日志、复制项目等
日志:仓库各个镜像create、push、pull等操作日志
系统管理
- 用户管理:新增/删除用户、设置管理员等
- 复制管理:新增/删除从库目标、新建/删除/启停复制规则等
- 配置管理:认证模式、复制、邮箱设置、系统设置等
其他设置
- 用户设置:修改用户名、邮箱、名称信息
- 修改密码:修改用户密码
注意:非系统管理员用户登录,只能看到有权限的项目和日志,其他模块不可见。
我们要尝试下能不能把自己 Docker 里面的镜像 push 到 Harbor 的 library 里来(默认这个 library 项目是公开的,所有人都可以有读的权限,都不需要 docker login 进来,就可以拉取里面的镜像)。
注意:
为了后面留坑,我这里先 在自己的 docker.service 中添加仓库:(这是个坑,建议你先按照我说的做,不然下面可能会一直登录不上)
vim /usr/lib/systemd/system/docker.service
里面的这行修改为:(其实就是添加 --insecure-registry 115.159.227.249 )
ExecStart=/usr/bin/dockerd --insecure-registry 115.159.227.249
添加完了后重新启动 docker:
systemctl daemon-reload && systemctl enable docker && systemctl start docker
启动 docker 服务:
service docker start
登录:(为了测试下能否登录成功)
admin登录
$ docker login 115.159.227.249
Username: admin
Password:
Login Succeeded
打 tag 并 push
docker tag ubuntu:15.10 115.159.227.249/library/ubuntu:15.10 //给我的镜像打个 tag
docker push 115.159.227.249/library/ubuntu
The push refers to a repository [115.159.227.249/library/ubuntu]
98d59071f692: Pushed
af288f00b8a7: Pushed
4b955941a4d0: Pushed
f121afdbbd5d: Pushed
15.10: digest: sha256:ec89c4a90f45f5e103860191890f48d8379e0504a2881ff706aef0768dc0321b size: 1150
上传完毕后,登录Web Harbor,选择项目 library,就可以看到我刚 push 的镜像了。
同理,你也可以测试下从 Harbor pull 镜像到你的 Docker 中去,这里就不继续演示了。
原文作者:zhisheng
原文地址:基于 Harbor 搭建 Docker 私有镜像仓库
版权说明:本文由极乐科技合作博主原创,转载请注明作者与出处,谢谢!
一元抢购微信小程序>>>链接地址
使用docker Registry快速搭建私有镜像仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReEL2ZPO-1599612182241)(assets/1665641dcbbced69)]
当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作。这类的镜像仓库就是docker默认的公共仓库,所有人都可以直接查看或下载、使用,但是呢,基于网络原因,下载速度有限制比较慢。因此,我们在公司内部内网环境中使用dokcer,一般不会将镜像文件上传到公网公共库中。但内部共享使用就是个问题,所以,私有仓库就由此产生了。
什么是私有仓库?
私有仓库,就是本地(内网环境)组建的一个与公网公共库功能相似的镜像仓库。组建好之后,我们就可以将打包好的镜像提交到私有仓库中,这样内网其它用户也可以使用这个镜像文件。
本文使用官方提供的registry镜像来组建企业内网的私有镜像仓库
环境介绍
两台安装好docker环境的主机
- 服务端:192.168.56.76 私有仓库服务器在,运行registry容器
- 客户端:192.168.3.83 测试客户端,用于上传、下载镜像文件
安装布署过程
下载官方registry镜像文件
[root@master ~]# docker pull registry
Using default tag: latest
Trying to pull repository docker.io/library/registry ...
latest: Pulling from docker.io/library/registry
81033e7c1d6a: Pull complete
b235084c2315: Pull complete
c692f3a6894b: Pull complete
ba2177f3a70e: Pull complete
a8d793620947: Pull complete
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for docker.io/registry:latest
[root@master ~]# docker images |grep registry
docker.io/registry latest d1fd7d86a825 5 months ago 33.3 MB
运行registry容器
[root@master ~]# mkdir /docker/registry -p
[root@master ~]# docker run -itd -v /docker/registry/:/docker/registry -p 5000:5000 --restart=always --name registry registry:latest
26d0b91a267f684f9da68f01d869b31dbc037ee6e7bf255d8fb435a22b857a0e
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26d0b91a267f registry:latest "/entrypoint.sh /e..." 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry
参数说明
1)-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
2)-v:把宿主机的/docker/registry目录绑定到容器/docker/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
3)-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
4)–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
5)–name registry:创建容器命名为registry,可自定义任何名称;
6)registry:latest:这个是刚才pull下来的镜像;
查看远程仓库镜像文件
[root@master ~]# curl http://localhost:5000/v2/_catalog
{"repositories":[]}
同样也可以使用浏览器访问http://server-ip:5000/v2/_catalog, 结果相同,都是空的没有任何文件。
客户端操作
修改下载的镜像源,两个选其一
[root@slave1 ~]# vim /etc/docker/daemon.json
#docker官方的
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
#阿里云的
{
"registry-mirrors": ["https://k88tl1nc.mirror.aliyuncs.com"]
}
[root@slave1 ~]# systemctl restart docker
下载测试镜像
[root@slave1 ~]# docker pull nginx
Using default tag: latest
Trying to pull repository docker.io/library/nginx ...
latest: Pulling from docker.io/library/nginx
683abbb4ea60: Pull complete
6ff57cbc007a: Pull complete
162f7aebbf40: Pull complete
Digest: sha256:636dd2749d9a363e5b57557672a9ebc7c6d041c88d9aef184308d7434296feea
Status: Downloaded newer image for docker.io/nginx:latest
给镜像打TAG
[root@slave1 ~]# docker tag nginx:latest 192.168.56.76:5000/nginx:v1
[root@slave1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.56.76:5000/nginx v1 649dcb69b782 8 hours ago 109 MB
docker.io/nginx latest 649dcb69b782 8 hours ago 109 MB
上传镜像
[root@slave1 ~]# docker push 192.168.56.76:5000/nginx:v1
The push refers to a repository [192.168.56.76:5000/nginx]
Get https://192.168.56.76:5000/v1/_ping: http: server gave HTTP response to HTTPS client
#注意这里出现报错提示,从提示信息可以看出需要使用https的方式才能上传,解决方案如下:
[root@slave1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["192.168.56.20:5000"]
}
#添加私有镜像服务器的地址,注意书写格式为json,有严格的书写要求,需要重启docker服务生效配置
[root@slave1 ~]# systemctl restart docker
[root@slave1 ~]# docker push 192.168.56.76:5000/nginx:v1
The push refers to a repository [192.168.56.76:5000/nginx]
6ee5b085558c: Pushed
78f25536dafc: Pushed
9c46f426bcb7: Pushed
v1: digest: sha256:edad5e71815c79108ddbd1d42123ee13ba2d8050ad27cfa72c531986d03ee4e7 size: 948
重新查看镜像仓库
[root@master ~]# curl http://localhost:5000/v2/_catalog
{"repositories":["nginx"]}
[root@master ~]# curl http://localhost:5000/v2/nginx/tags/list
{"name":"nginx","tags":["v1"]}
#查看有哪些版本
测试下载镜像
#首先删除客户端主机之前从公共库下载下来的镜像文件
[root@slave1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.56.76:5000/nginx v1 649dcb69b782 10 hours ago 109 MB
docker.io/nginx latest 649dcb69b782 10 hours ago 109 MB
[root@slave1 ~]# docker image rmi -f 649dcb69b782
Untagged: 192.168.56.76:5000/nginx:v1
Untagged: 192.168.56.76:5000/nginx@sha256:edad5e71815c79108ddbd1d42123ee13ba2d8050ad27cfa72c531986d03ee4e7
Untagged: docker.io/nginx:latest
Untagged: docker.io/nginx@sha256:636dd2749d9a363e5b57557672a9ebc7c6d041c88d9aef184308d7434296feea
Deleted: sha256:649dcb69b782d4e281c92ed2918a21fa63322a6605017e295ea75907c84f4d1e
Deleted: sha256:bf7cb208a5a1da265666ad5ab3cf10f0bec1f4bcb0ba8d957e2e485e3ac2b463
Deleted: sha256:55d02c20aa07136ab07ab47f4b20b97be7a0f34e01a88b3e046a728863b5621c
Deleted: sha256:9c46f426bcb704beffafc951290ee7fe05efddbc7406500e7d0a3785538b8735
[root@slave1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
#此时客户端所有的镜像文件全部删除
[root@slave1 ~]# docker pull 192.168.56.76:5000/nginx:v1
Trying to pull repository 192.168.56.76:5000/nginx ...
v1: Pulling from 192.168.56.76:5000/nginx
683abbb4ea60: Pull complete
6ff57cbc007a: Pull complete
162f7aebbf40: Pull complete
Digest: sha256:edad5e71815c79108ddbd1d42123ee13ba2d8050ad27cfa72c531986d03ee4e7
Status: Downloaded newer image for 192.168.56.76:5000/nginx:v1
[root@slave1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.56.76:5000/nginx v1 649dcb69b782 11 hours ago 109 MB
#可以看出,客户端已正常从远端服务器拉取到所需要的镜像文件,其它内网服务器也可以正常共享这台镜像服务器上的镜像文件,不用去公网拉取。
注:之前分享的几篇资源文章,由于一些原因(链接失效或版权原因)很多资源被取消了,故民工哥重新整理了一份(包括JAVA开发、大数据、Hadoop、zookeeper、移动端开发、系统运维、数据库、Python、微服务、架构师、Docker容器、K8S等众多视频资源),公众号后台回复:“干货” 即可获得全部高达800GB的视频资源。
作者:民工哥技术之路
链接:https://juejin.im/post/5bbbf72c5188255c554710ca
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.创建一个 docker 用户组
docker 守护进程绑定到一个 unix socket 而不是 tcp 端口。默认情况下,这个 unix socket 的所有者是 root,其他用户需要通过 sudo 的方式访问。因为 docker 守护进程总是以 root 用户运行。
为避免使用 docker 命令的时候必须使用 sudo,我们可以创建一个 docker 用户组,然后将你的用户添加到这个组里面。当 docker 守护进程启动时,它会让 docker 用户组对该 unix socket 有可读可写的权限。
当然如果你只会使用 root 账号登录使用 docker 命令,也可略过这个步骤,对后续进程不会有影响。
创建用户组并添加用户的步骤如下:
2.1,使用 sudo 权限登录进系统
2.2,创建 docker 用户组
$ sudo groupadd docker
2.3,将你的用户添加到 docker 组
$ sudo usermod -aG docker your_username
2.4,退出登录然后再登录进来
这确保你的账号有正确的权限
2.5,不使用 sudo 来执行 docker 命令,验证是否正确
$ docker run hello-world
2.6 让 docker 守护进程开机自启动
为了确保当你重启系统的时候,docker 可以自动启动,执行如下指令:
$ sudo chkconfig docker on
关于 docker 守护进程的更多定制化配置,可以参阅:https://docs.docker.com/engine/admin/systemd/
完成了上面的步骤,就可以使用 docker 命令行工具对我们搭建的 registry 做各种操作了,如 push / pull。然而还是不够方便,比如不能直观的查看 registry 中的资源情况,如果有一个 ui 工具,能够看到仓库中有哪些镜像、每个镜像的版本是多少,就好了,下面就介绍 ui 的搭建过程。
部署WebUI
目前找到了两个 web ui,一个是 docker-registry-frontend,另一个是 hyper/docker-registry-web。
这两个 ui 功能差不多,只需任选其一就可以了。截止到我安装的时候,docker-registry-frontend 的功能还不完善,没有删除镜像的功能,只能浏览。后一个同时具备 删除和浏览 的功能。这两个 ui 的搭建过程下面都会讲。
docker-registry-frontend 安装与配置
1、先安装 docker-compose
这是一个脚本,直接从 https://github.com/docker/compose/releases 下载一个合适的版本,然后拷贝到 /usr/local/bin 目录中,再改下执行权限就可以了。
2、从 github 中下载 docker-registry-frontend 源码
$ git clone https://github.com/kwk/docker-registry-frontend.git
3、修改配置,默认情况下 docker registry 监听你主机的 5000 端口,ui 监听你主机的 8443 端口。而我的主机这两个端口从外部都不能访问,所以要分别修改这两个端口到 10050 和 10080。除了端口,还需要根据你的需要修改仓库中的镜像文件保存的位置,我的镜像要保存到 /var/lib/registry。
frontend:
image: konradkleine/docker-registry-frontend:v2
#build: ../
links:
- registry:registry
ports:
# Publish the frontend's port 443 on the IP 0.0.0.0 on port 8443
* - "0.0.0.0:10080:443"*
volumes:
- ./frontend/certs/frontend.crt:/etc/apache2/server.crt:ro
- ./frontend/certs/frontend.key:/etc/apache2/server.key:ro
environment:
# The front-end is SSL protected
- ENV_USE_SSL=yes
- ENV_DOCKER_REGISTRY_HOST=registry
- ENV_DOCKER_REGISTRY_PORT=5000
# The registry is SSL protected as well
- ENV_DOCKER_REGISTRY_USE_SSL=1
启动
$ docker-compose up -d
ps:上面这个指令其实是根据 docker-compose.yml 中的配置启动两个容器(fronted 和 registry,这两个容器是独立的,通过 REST API 交互信息),如果在安装 web ui 前,你的 private docker registry 已经在运行了,也可以去掉上面文件中的 registry 字段,但注意要指定对应的ip和端口信息。
然后就能够访问 https://localhost:10080
hyper/docker-registry-web 安装与配置
目标是: registry 监听主机的 10050 端口,ui 监听主机的 10080 端口。
1、创建工作目录
$ mkdir -p hyper-docker-registry-web-config/frontend hyper-docker-registry-web-config/registry
$ cd hyper-docker-registry-web-config
2、建一个用于 registry 的配置文件
$ vim registry/config.yml
version: 0.1
log:
level: info
formatter: text
fields:
service: registry-srv
environment: production
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
delete:
# 要在 ui 上能够删除镜像,enable 的值必须是 true
enabled: true
http:
addr: :5000
debug:
addr: :5001
3、新建一个用于 ui 的配置文件
$ vim frontend/config.yml
registry:
# Docker registry url
url: http://registry-srv:5000/v2
# Docker registry fqdn
name: localhost:10050
# To allow image delete, should be false
readonly: false
auth:
# Disable authentication
enabled: false
4、新建一个启动脚本
$ vim startup.sh
#! /bin/bash
# registry 监听主机的 10050 端口,并将镜像文件存储在主机的 /var/lib/registry/storage 中。
docker run -d -p 10050:5000 --restart=always --name registry-srv -v $(pwd)/registry/:/etc/docker/registry:ro -v /var/lib/registry/storage:/var/lib/registry registry:2
# ui 监听主机的 10080 端口
docker run -d -p 10080:8080 --name registry-web --link registry-srv -v $(pwd)/frontend/:/conf/:ro hyper/docker-registry-web
5、启动
$ chmod +x startup.sh
$ ./startup.sh
除了使用 shell 脚本启动,这里其实也可以写一个 docker-compose.yml 配置文件,然后使用 docker-compose 工具启动这两个容器。
等启动完成,就可以通过 http://localhost:10080 访问 ui,且可以在 ui 上浏览/删除镜像了。
OK,到这里,仓库和 ui
使用方法
假设上述的部署在 172.20.30.35 这台机器上进行的。
需要修改【你的机器】上的2个文件:
1、在 /etc/hosts 中加入:172.20.30.35 docker.midea.registry.hub
2、修改 /etc/sysconfig/docker,添加或修改下面3个字段的值:
ADD_REGISTRY='--add-registry docker.midea.registry.hub:10050'
DOCKER_OPTS="--insecure-registry docker.midea.registry.hub:10050"
INSECURE_REGISTRY='--insecure-registry docker.midea.registry.hub:10050'
3、然后重启你的 docker daemon:
$ service docker restart 或 $ systemctl restart docker.service
4、push 镜像
$ docker tag your-image docker.midea.registry.hub:10050/your-image
$ docker push docker.midea.registry.hub:10050/your-image
然后就可以使用这个私有registry了。
OVER~~
konradkleine/docker-registry-frontend镜像安装与配置
拉取镜像并启动运行容器
$ docker run \
-d -v /docker/registry/:/docker/registry --name registry \
-e ENV_DOCKER_REGISTRY_HOST=192.168.56.76 \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
-p 5000:80 \
konradkleine/docker-registry-frontend:v2
此命令启动容器并将容器的专用端口转发80到主机的端口5000。确保为注册表指定了正确的URL。
应用程序运行时,您可以打开浏览器并导航到[http://localhost:5000]。
docker管理工具protainer
Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。
介绍
Portainer(基于 Go) 是一个轻量级的Web管理界面,可让您轻松管理 Docker 主机 或 Swarm 集群。
Portainer 的使用意图是简单部署。 它包含可以在任何 Docker 引擎上运行的单个容器(Docker for Linux 和 Docker for Windows)。
Portainer 允许您管理 Docker 容器、image、volume、network 等。 它与独立的 Docker 引擎和 Docker Swarm 兼容。
官网 https://portainer.io/)
GitHub https://github.com/portainer/portainer
Doc https://portainer.readthedocs.io/en/stable/
部署
方法一
$ docker volume create portainer_data $ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer方法二
使用Portainer管理Swarm集群,在swarm中部署$ docker volume create portainer_data $ docker service create \ --name portainer \ --publish 9000:9000 \ --replicas=1 \ --constraint 'node.role == manager' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=volume,src=portainer_data,dst=/data \ portainer/portainer \ -H unix:///var/run/docker.sock方法三
通过docker compose部署
docker-composer.yml内容version: '3' services: portainer: image: portainer/portainer ports: - "9000:9000" command: -H unix:///var/run/docker.sock volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data deploy: replicas: 1 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" stop_grace_period: 1m30s volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] volumes: portainer_data:
测试
浏览器访问localhost:9000测试
参考
https://hub.docker.com/_/registry/
https://hub.docker.com/r/konradkleine/docker-registry-frontend/
https://blog.csdn.net/mideagroup/article/details/52052618
r_data:/data
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
volumes:
portainer_data:
### 测试
浏览器访问`localhost:9000`测试
## 参考
https://hub.docker.com/_/registry/
https://hub.docker.com/r/konradkleine/docker-registry-frontend/
https://blog.csdn.net/mideagroup/article/details/52052618