Docker 私有仓库部署:Registry、加密传输与认证鉴权

文章目录

Docker仓库

registry私有仓库

bash 复制代码
[root@server1 new]# cd /etc/docker/
[root@server1 docker]# ls
[root@server1 docker]# vim daemon.json
{
  "registry-mirrors": ["https://docker.1ms.run"]
}

[root@server1 docker]# systemctl restart docker
[root@server1 docker]# docker info

[root@server1 docker]# docker pull registry
bash 复制代码
#运行registry仓库
[root@server1 docker]# cd
[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
5e06a869e893ee177e57cd77b00e54664d528f257b3767b8ab3aa83a7255fb29

#列出容器
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS              PORTS                                       NAMES
5e06a869e893   registry   "/entrypoint.sh /etc..."   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

#上传镜像
[root@server1 ~]# docker images webserver
[root@server1 ~]# docker tag webserver:v4 localhost:5000/webserver:v4
[root@server1 ~]# docker push localhost:5000/webserver:v4
[root@server1 ~]# docker tag busybox:latest localhost:5000/busybox:latest
[root@server1 ~]# docker push localhost:5000/busybox:latest

#下载镜像
[root@server1 ~]# docker pull localhost:5000/busybox:latest
latest: Pulling from busybox
Digest: sha256:92b1d1cae5f235812184415e63d9b24464116c58d3ba3c460b1eb0247f0f46e3
Status: Image is up to date for localhost:5000/busybox:latest
localhost:5000/busybox:latest
因为本地已经有该镜像,所以本次下载其实并没有真正下载

配置仓库自启动

bash 复制代码
[root@server1 ~]# vim /etc/systemd/system/registry.service
[Unit]
Description=Registry
Requires=docker.service
After=docker.service

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/docker start -a registry
ExecStop=/usr/bin/docker stop registry

[Install]
WantedBy=multi-user.target

#刷新配置
[root@server1 ~]# systemctl daemon-reload

#停止容器
[root@server1 ~]# docker stop registry
registry
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#设置开机自启
[root@server1 ~]# systemctl enable --now registry
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                       NAMES
5e06a869e893   registry   "/entrypoint.sh /etc..."   12 minutes ago   Up 40 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

仓库加密

下载并升级软件包(Rocky Linux 9 无需安装)

官网:Epel镜像-Epel镜像下载安装-开源镜像站-阿里云

bash 复制代码
[root@server1 ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@server1 ~]# yum repolist
[root@server1 ~]# yum install -y openssl11

关闭registry容器

bash 复制代码
[root@server1 ~]# systemctl disable --now registry
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@server1 ~]# docker rm registry
registry

添加域名解析

bash 复制代码
[root@server1 ~]# vim /etc/hosts
192.168.117.130 server1 reg.westos.org
[root@server1 ~]# mkdir certs
[root@server1 ~]# openssl11 req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -addext "subjectAltName = DNS:reg.westos.org" -x509 -days 365 -out certs/westos.org.crt
bash 复制代码
[root@server1 ~]# docker run -d -p 443:443 --restart=always --name registry -v /registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key registry
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                             NAMES
5510da9a1241   registry   "/entrypoint.sh /etc..."   29 seconds ago   Up 27 seconds   0.0.0.0:443->443/tcp, :::443->443/tcp, 5000/tcp   registry

部署客户端证书,不然会报错

bash 复制代码
[root@server1 ~]# docker tag nginx:latest reg.westos.org/nginx:latest
[root@server1 ~]# docker push reg.westos.org/nginx:latest
bash 复制代码
[root@server1 ~]# mkdir -p /etc/docker/certs.d/reg.westos.org/
[root@server1 ~]# cp /root/certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt
[root@server1 ~]# docker push reg.westos.org/nginx:latest

[root@server1 ~]# cd /etc/docker/certs.d/reg.westos.org/
[root@server1 reg.westos.org]# curl -k https://reg.westos.org/v2/_catalog

仓库认证

bash 复制代码
[root@server1 ~]# yum install -y httpd-tools
[root@server1 ~]# mkdir auth
[root@server1 ~]# htpasswd -Bc auth/htpasswd admin
New password:
Re-type new password:
Adding password for user admin

#第二次添加不要加"-c"选项,不然会覆盖
[root@server1 ~]# htpasswd -B auth/htpasswd wxh
New password:
Re-type new password:
Adding password for user wxh

[root@server1 ~]# cat auth/htpasswd
admin:$2y$05$rd1p8MRLXW54F8hkChexeOYRai8mBV8rMikYB9KIks2I0bZKhhOTa
wxh:$2y$05$Klh1mermUwJQrH.C1f1h2.fXgIlN6bN8Go5yAyMJ6MuG8Wz9F6SD2

#删除registry,重建
[root@server1 ~]# docker rm -f registry
[root@server1 ~]# docker run -d -p 443:443 --restart=always --name registry -v /registry:/var/lib/registry -v /root/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

#登录仓库,不然无法上传下载
[root@server1 ~]# docker login reg.westos.org
Username: admin
Password:
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
[root@server1 ~]# cat .docker/config.json
{
        "auths": {
                "reg.westos.org": {
                        "auth": "YWRtaW46d2VzdG9z"
                }
        }
}

#验证
[root@server1 ~]# docker tag busybox:latest reg.westos.org/busybox:latest
[root@server1 ~]# docker push reg.westos.org/busybox:latest

[root@server1 ~]# curl -k https://reg.westos.org/v2/_catalog  -u admin:westos
{"repositories":["busybox","nginx"]}

#登出
[root@server1 ~]# docker logout reg.westos.org
相关推荐
悠悠121383 分钟前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck1 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
zx_741484812 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS2 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
九皇叔叔2 小时前
K8S 资源菜单
docker·容器·kubernetes·k8s
wdfk_prog3 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
Zhu7583 小时前
docker环境快速部署postgresql数据库18及以上版本
postgresql·容器
做运维的阿瑞3 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
广州宏帝箱包4 小时前
出口箱包的包装标准:防潮、防摔、运输安全的设计要点
大数据·网络
彧azz4 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试