内容目录
docker私有仓库
什么是私有仓库
私有仓库是一种用于存储docker
镜像的仓库,该仓库仅在企业内部使用,不向外部提供服务。
使用私有仓库有以下几个好处:
- 1.提高镜像下载速度:使用
docker pull
时,默认会从docker hub
下载镜像可能需要很长时间,甚至会出现无法下载的情况,而私有仓库部署在企业内部网络环境中,无需从外部下载,所以私有仓库能有效提升镜像的下载速度。 -
- 提升镜像管理效率:通过私有仓库,可以将所有主机上的镜像统一存储,从而实现多主机共享一个仓库中的镜像。
-
- 保证镜像安全性:私有仓库是私有的,仅对公司服务器提供使用,能够保证镜像的安全性和私密性。
私有仓库实现工具
实现私有仓库有多种工具,其中较为常用的为registry
和harbor
- 1.
registry
是docker
官方开源的项目,是一款简单易用的私有仓库工具,虽然本身提供webui
,但功能相对简单。 - 2.
harbor
是一款广泛使用的私有仓库工具,它具有web
界面管理、项目分类、安全控制、镜像同步、镜像扫描等功能,更加适合企业内部的镜像管理需求
registry实践私有仓库
registry私有仓库部署
-
部署
registry
docker run -d -p 5000:5000 --restart=always --name registry -v /data/myregistry:/var/lib/registry registry
-
检查部署结果,
registry
监听在5000端口
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cf795769b6e registry "/entrypoint.sh /etc…" 10 hours ago Up 10 hours 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
配置节点信任该仓库
- 修改
docker
配置文件
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com",
"https://hub.docker.com",
"http://mirrors.ustc.edu.cn"
],
"data-root": "/data/docker",
"insecure-registries": ["x.x.x.x:5000"]
}
- 重启
docker
systemctl daemon-reload
systemctl restart docker.service
推送镜像至私有仓库
- 修改镜像的标签,然后推送镜像
# 推送linux-command应用⾄仓库的app项⽬中
docker tag wcjiang/linux-command:latest x.x.x.x:5000/app/linux-command
docker push x.x.x.x:5000/app/linux-command
- 使用
curl
命令访问registry
私有仓库,检查是否存在对应上传的镜像
# 安装jq命令
yum install jq
# 查看仓库对应的镜像名称
curl -s http://x.x.x.x:5000/v2/_catalog | jq -r
{
"repositories": [
"app/linux-command"
]
}
# 查看仓库对应镜像的tag
curl -s http://x.x.x.x:5000/v2/app/linux-command/tags/list | jq
{
"name": "app/linux-command",
"tags": [
"latest"
]
}
配置私有仓库认证
如果不添加任何认证,任何人都可以向该仓库推送镜像,因此我们可以给该私有仓库添加basic
认证
- 启动带
basic
认证的registry
yum install httpd-tools
# -B:使⽤bcrypt算法加密密码。-b:指定⽤户名和密码。 -n:在标准输出中显示内容,便于重定向⾄⽂件中
mkdir -p /data/registry-auth
htpasswd -Bbn xxx yyy > /opt/registry-auth/htpasswd
- 启动
registry
容器,并设定相应的身份信息
docker run -d -p 5000:5000 \
--name registry --restart=always \
-v /data/myregistry:/var/lib/registry \
-v /data/registry-auth/:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry
docker
客户端先登录该仓库,而后进行镜像推送
docker login x.x.x.x:5000
Username: docker
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
# 镜像推送测试
docker push 192.168.99.31:5000/app/linux-command
Using default tag: latest
The push refers to repository [192.168.99.31:5000/app/linux-command]
bf98ff6fdad0: Layer already exists
968e161f40de: Layer already exists
1986c766d1ed: Layer already exists
397060e99d01: Layer already exists
36308b2b77fa: Layer already exists
latest: digest: sha256:dd4f744c563f57b3c117c5c7ce32fe0e51dd0a84cf959e697c6cb10d0be9b9f1 size: 1359
留言