1. 私有仓库
私有库可以部署在本地或私有云环境中,我们可以控制镜像的访问权限。相比公共仓库,私有库提供了更高的安全性和更快的访问速度。此外,私有库还支持自定义,你可以根据自己的需求来配置仓库。
私有仓库解决方案
- Harbor:一个企业级的Docker Registry服务,提供安全、可信赖的镜像存储和管理功能。它支持RBAC权限控制、镜像复制、镜像签名、漏洞扫描等功能。
- Docker Trusted Registry (DTR):由Docker官方推出的企业级Docker私有仓库服务,与Docker Engine紧密集成,支持高度的安全性和可靠性。
- Portus:一个开源的Docker镜像管理和认证服务,提供用户管理、团队管理、镜像审核等功能,与Docker Registry兼容。
- Nexus Repository Manager:虽然主要是用于构建和管理Java组件,但也可以用作Docker私有仓库。它具有强大的存储管理和权限控制功能。
- GitLab Container Registry:GitLab集成了容器注册表功能,允许您存储、管理和分发Docker镜像。
本次我们介绍 Docker Registry,是官方提供的工具,可以用于构建私有镜像仓库。
2. 推送镜像
2.1 下载镜像Docker Registry
下来Registry命令
docker pull registry
下载完成
[root@bogon /]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
1cc3d825d8b2: Pull complete
85ab09421e5a: Pull complete
40960af72c1c: Pull complete
e7bb1dbb377e: Pull complete
a538cc9b1ae3: Pull complete
Digest: sha256:ac0192b549007e22998eb74e8d8488dcfe70f1489520c3b144a6047ac5efbe90
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
2.2 创建并运行私有库Registry容器
首先我们在宿主机创建一个Registry目录,与容器映射
[root@bogon /]# mkdir /home/myregistry
创建容器
docker run -d -p 5000:5000 -v /home/myregistry/:/tmp/registry --privileged=true registry
2.3 创建新镜像
下载ubuntu镜像到本地
[root@bogon myregistry]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
ff65ddf9395b: Pull complete
Digest: sha256:99c35190e22d294cdace2783ac55effc69d32896daaa265f0bbedbcde4fbe3e5
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
运行容器
[root@bogon /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/wktime/myimage 1.1 2c525eae5b32 4 hours ago 233MB
ubuntu latest 59ab366372d5 8 days ago 78.1MB
registry latest 75ef5b734af4 12 months ago 25.4MB
[root@bogon /]# docker run -it 59ab366372d5 /bin/bash
root@b4a6e7f93df3:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
安装ifconfig命令并测试通过
root@b4a6e7f93df3:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [13.7 kB]
Get:4 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [491 kB]
Get:6 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:7 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:9 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [541 kB]
Get:10 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [715 kB]
Get:11 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
Get:13 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [491 kB]
Get:14 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [759 kB]
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [18.2 kB]
Get:16 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [915 kB]
Get:17 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [11.8 kB]
Fetched 26.2 MB in 9s (2912 kB/s)
Reading package lists... Done
root@b4a6e7f93df3:/#
root@b4a6e7f93df3:/# apt-get install net-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
net-tools
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 204 kB of archives.
After this operation, 811 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 net-tools amd64 2.10-0.1ubuntu4 [204 kB]
Fetched 204 kB in 2s (128 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package net-tools.
(Reading database ... 4379 files and directories currently installed.)
Preparing to unpack .../net-tools_2.10-0.1ubuntu4_amd64.deb ...
Unpacking net-tools (2.10-0.1ubuntu4) ...
Setting up net-tools (2.10-0.1ubuntu4) ...
root@b4a6e7f93df3:/#
测试是否安装完成
安装好ifconfig,依据这个容器创建新镜像
docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
[root@bogon ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16a75349fb07 59ab366372d5 "/bin/bash" About a minute ago Up About a minute youthful_villani
6bb88cfa5eb7 registry "/entrypoint.sh /etc…" 22 minutes ago Up 22 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp vigorous_wright
[root@bogon ~]# docker commit -m="add ifconfig" -a="wktime" 59ab366372d5 myubuntu:1.2
Error response from daemon: No such container: 59ab366372d5
[root@bogon ~]# docker commit -m="add ifconfig" -a="wktime" 16a75349fb07 myubuntu:1.2
sha256:d8ca41962fec695a8a7245077150e874b362843f1ebc97467fa8694e947fbfb4
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu 1.2 d8ca41962fec 49 seconds ago 122MB
192.168.0.15:5000/myubuntu 1.1 93dc86f24d47 43 minutes ago 25.4MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage 1.1 2c525eae5b32 5 hours ago 233MB
ubuntu latest 59ab366372d5 8 days ago 78.1MB
registry latest 75ef5b734af4 12 months ago 25.4MB
[root@bogon ~]#
2.4 标签镜像
将新镜像修改符合私服规范的Tag标签
docker tag 镜像:Tag Host:Port/Repository:Tag
Host:自己的主机地址
Port:默认5000
[root@bogon /]# docker tag myubuntu:1.2 192.168.0.15:5000/myubuntu:1.2
[root@bogon /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.0.15:5000/myubuntu 1.2 d8ca41962fec 2 minutes ago 122MB
myubuntu 1.2 d8ca41962fec 2 minutes ago 122MB
192.168.0.15:5000/myubuntu 1.1 93dc86f24d47 46 minutes ago 25.4MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage 1.1 2c525eae5b32 5 hours ago 233MB
ubuntu latest 59ab366372d5 8 days ago 78.1MB
registry latest 75ef5b734af4 12 months ago 25.4MB
2.5 配置支持http
docker默认不允许http方式推送镜像,通过配置选项来取消这个限制,修改完后如果不生效重启docker。
配置registry-mirrors,增加本地仓库地址:192.168.0.15:5000
{
"registry-mirrors": ["https://docker-proxy.741001.xyz","https://registry.docker-cn.com"],
"insecure-registries": ["192.168.0.15:5000"]
}
具体配置
2.6 推送到私有仓库
[root@bogon /]# docker push 192.168.0.15:5000/myubuntu:1.2
The push refers to repository [192.168.0.15:5000/myubuntu]
467b84e31abb: Pushed
a46a5fb872b5: Pushed
1.2: digest: sha256:a73a3f67439f2d13d0bc167213d9b1feffa94b8d963ad4b76f8f0d80d70b8ed7 size: 741
[root@bogon /]#
2.7 curl验证查询是否推送成功
使用下面的命令,看看是否存在镜像
curl -XGET http://192.168.0.15:5000/v2/_catalog
首先我们新建的仓库是空的
推送后验证,私有仓库已经有我们制作的镜像了。
[root@bogon /]# curl -XGET http://192.168.0.15:5000/v2/_catalog
{"repositories":["myubuntu"]}
[root@bogon /]#
3.下拉镜像并验证
推送成功后,我们从私有仓库下拉镜像,然后运行,看看是否有新安装的ifconfig命令
3.1 下拉镜像
[root@bogon /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/wktime/myimage 1.1 2c525eae5b32 5 hours ago 233MB
ubuntu latest 59ab366372d5 8 days ago 78.1MB
registry latest 75ef5b734af4 12 months ago 25.4MB
[root@bogon /]# docker pull 192.168.0.15:5000/myubuntu:1.2
1.2: Pulling from myubuntu
802008e7f761: Already exists
5592aff2474e: Pull complete
Digest: sha256:a73a3f67439f2d13d0bc167213d9b1feffa94b8d963ad4b76f8f0d80d70b8ed7
Status: Downloaded newer image for 192.168.0.15:5000/myubuntu:1.2
192.168.0.15:5000/myubuntu:1.2
[root@bogon /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.0.15:5000/myubuntu 1.2 d8ca41962fec 10 minutes ago 122MB
registry.cn-hangzhou.aliyuncs.com/wktime/myimage 1.1 2c525eae5b32 5 hours ago 233MB
ubuntu latest 59ab366372d5 8 days ago 78.1MB
registry latest 75ef5b734af4 12 months ago 25.4MB
[root@bogon /]#
3.2 运行容器
docker run -it d8ca41962fec /bin/bash
[root@bogon /]# docker run -it d8ca41962fec /bin/bash
root@9667bc48b298:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)
RX packets 7 bytes 586 (586.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@9667bc48b298:/#
运行后,可以看到这个镜像包含我们安装的ifconfig命令,没有报错就说明已经部署成功了。
4. 私有仓库优势和劣势
私有Docker仓库与公共仓库相比,有其独特的优势和劣势:
优势:
-
安全性:私有仓库因为部署在内网或私有云中,可以更好地控制访问权限,减少数据泄露的风险。例如,通过配置TLS/SSL加密通信,确保数据传输的安全。
-
定制化:私有仓库可以根据自己的需求进行定制和扩展,比如集成企业内部的认证系统,提供更符合企业需求的服务。
-
性能:私有仓库通常部署在离开发和生产环境更近的网络中,这可以减少访问延迟,提高镜像的拉取和推送速度。
-
控制权:企业可以完全控制镜像的存储、分发和管理,不受公共仓库提供商的服务条款或价格变动的影响。
劣势:
-
搭建和维护成本:企业需要投入资源来搭建、维护和升级私有仓库,包括硬件、网络、存储以及专业人才的培训和工资。
-
技术复杂性:私有仓库的搭建和维护涉及到更多的技术细节,如镜像的安全扫描、漏洞修复、网络配置等,需要专业的技术人员来操作。
-
更新和同步:如果私有仓库中的镜像需要经常更新,那么保证镜像的一致性和同步可能会成为一个挑战。
-
资源占用:私有仓库需要占用企业的服务器资源,对于资源有限的中小企业来说,可能会是一个负担。
总的来说,私有仓库适合对安全性、定制化和性能有较高要求的企业环境,但也需要企业投入相应的资源和精力来维护。而公共仓库则适合个人开发者和小团队,可以快速开始工作,但可能在安全性和性能上有所妥协。企业在选择时应根据自身的需求和资源进行权衡。
5. 最后
感谢大家,请大家多多支持!