提到"docker私有仓库",通常指的是在本地或者内部网络中搭建的专用Docker镜像仓库,用于存储和管理自定义的Docker镜像。搭建私有仓库的主要目的是方便团队内部共享镜像,加强镜像安全性,并减少对公共镜像仓库的依赖。
创建私有仓库
mkdir docker-registry-data
docker run -d -p 5000:5000 --name docker-registry -v /path/to/docker-registry-data:/var/lib/registry registry:2
使用Docker-compose+WebUI
version: '2.0'
services:
registry:
image: registry:2.7
volumes:
- .:/var/lib/registry
ports:
- 5000:5000
restart: always
networks:
- registry-ui-net
ui:
image: joxit/docker-registry-ui:latest
restart: always
ports:
- 80:80
environment:
- REGISTRY_TITLE=My Private Docker Registry
- NGINX_PROXY_PASS_URL=http://registry:5000
- SINGLE_REGISTRY=true
depends_on:
- registry
networks:
- registry-ui-net
networks:
registry-ui-net:
下面将用192.168.1.97:5000
举例
在Docker客户端添加私有仓库列表
- 打开或创建
daemon.json
配置文件。在Linux上,它通常位于/etc/docker/daemon.json
,在Windows上,它通常位于C:\ProgramData\docker\config\daemon.json
。 - 添加以下内容到
daemon.json
文件中:
{
"insecure-registries": ["192.168.1.97:5000"]
}
保存文件,并重启Docker服务,以使更改生效。
方法二:为私有仓库配置TLS/SSL证书 您可以为私有仓库配置TLS/SSL证书,以启用安全的HTTPS连接。这将确保Docker客户端与私有仓库之间的通信是加密和安全的。
- 获取有效的TLS/SSL证书并将其放置在Docker客户端上。通常,这是由私有仓库提供的。
- 在Docker客户端上配置证书位置。您可以在
daemon.json
文件中添加类似以下内容:
{
"insecure-registries": ["192.168.1.97:5000"],
"registry-mirrors": [],
"tls": true,
"tlscacert": "/path/to/ca.crt",
"tlscert": "/path/to/client.crt",
"tlskey": "/path/to/client.key"
}
确保将/path/to/ca.crt
,/path/to/client.crt
和/path/to/client.key
替换为您实际的TLS证书文件路径保存文件,并重启Docker服务,以使更改生效。
推送和拉取镜像
推送镜像
# 修改现有镜像Tag
docker tag mariadb:latest 192.168.1.97:5000/mariadb:11
# 推送到私有仓库
docker push 192.168.1.97:5000/mariadb:11
拉取镜像
docker pull 192.168.1.97:5000/mariadb:11
批量标记和上传
tag_and_push.sh
#!/bin/bash
PRIVATE_REGISTRY="192.168.1.97:5000"
for image in $(docker image ls --format "{{.Repository}}:{{.Tag}}"); do
if [[ "$image" != "$PRIVATE_REGISTRY"* ]]; then
new_image="${PRIVATE_REGISTRY}/${image#*/}"
docker tag "$image" "$new_image"
docker push "$new_image"
fi
done
将上述代码保存为一个Shell脚本文件(例如tag_and_push.sh
),然后在脚本所在的目录中运行:
bashCopy codechmod +x tag_and_push.sh # 添加执行权限
./tag_and_push.sh # 运行脚本
此脚本将获取本地所有镜像的列表,并将它们逐个打上私有仓库的标签,并将这些标签的镜像推送到您的私有仓库。