docker 私有仓库搭建
环境准备
服务器(推荐使用自己熟悉的 Linux 操作系统)且已安装 docker和docker compose
安装过程可以参照链接
写在前面
自建docker仓库也是依赖于docker容器提供服务的
最基础(简单)的私有仓库搭建
- 没有UI界面,无需身份认证
- 只需安装了 docker 就可以
拉取所需镜像
registry:2
docker pull registry:2
# 或者拉去最新的镜像也可以 docker pull registry
创建仓库数据目录(根据实际情况进行创建)
mkdir -p /home/registry/data
启动(运行)
docker run -d --name registry --restart=always \
-p 5000:5000 -v /home/registry/data:/var/lib/registry registry:2
访问试试
- 检查防火墙,如果防火墙处于开启状态,则需要开放5000端口
# 查看防火墙运行状态,如果看到active则是开启的状态,否则是关闭的状态
systemctl status firewalld
# 临时关闭防火墙
systemctl stop fiewalld
# 永久关闭防火墙
systemctl disable firewalld
# 查看防火墙开发的端口
firewall-cmd --list-ports
# 开放5000端口,并刷新
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
- 验证(查看镜像仓库中的所有镜像)
http://ip:5000/v2/_catalog
客户端使用
因为私有仓库需要使用https方式访问,但是ssl证书需要购买,所以这里设置使用http的方式进行访问。
在客户端的配置文件中(一般是 /etc/docker/daemon.json
),添加 "insecure-registries":"私有仓库IP地址:5000"
,添加完成之后重新加载docker配置并重启
systemctl daemon-reload && systemctl restart docker
- 客户端重做镜像
docker tag image:tag 私有仓库IP:5000/image:tag
- 客户端推送镜像
docker push 私有仓库IP:5000/image:tag
- 检查
http://ip:5000/v2/_catalog
或者直接查看目录文件ls /home/docker/data/registry/data/v2/repository
带UI的私有仓库
- 在原有的基础上进行添加UI界面
- 使用docker compose完成安装搭建
创建dokcer compose
在/home/docker/data/registry下创建docker compose文件【vi docker-compose.yml】
并写入如下内容
version: "3.8"
services:
registry-server:
image: registry
volumes:
- /home/docker/data/registry:/var/lib/registry
registry-ui:
image: joxit/docker-registry-ui
ports:
- 80:80
environment:
- REGISTRY_TITLE=Private Docker Repository
- REGISTRY_URL=http://registry-server:5000
depends_on:
- registry-server
保存后执行 docker compose up -d
访问:http://私有仓库IP(注意防火墙!)
安全加固
- 在原有的基础上进行安全认证
安装 htpasswd工具
yum install -y httpd-tools
创建用户和对应的登录凭据
# passwd是登录凭据文件 -B 强制密码加密 -b 命令行密码 -n 不更新加密文件
htpasswd -Bbn 密码 > /home/docker/data/registry/auth/passwd
运行容器
docker run -d --name registry \
--restart=always \
-p 5000:5000 \
-v /home/docker/data/registry/data:/var/lib/registry \
-v /home/docker/data/registry/auth:/etc/registry/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/home/docker/data/registry/auth/passwd" \
registry:2
访问看看
页面需要输入刚才设置的用户名和密码登录后才可看到数据 http://ip:5000/v2/_catalog
推送镜像到私有仓库
-
推送镜像之前需要登录
docker login 私有仓库IP:5000
带UI的安全加固
创建docker compose
version: "3.8"
services:
registry:
image: registry-server
volumes:
- /home/docker/data/registry/data:/var/lib/registry
- /home/docker/data/registry/auth:/etc/registry/auth
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/home/docker/data/registry/auth/passwd
registry-ui:
image: joxit/docker-registry-ui
ports:
- 80:80
environment:
- REGISTRY_TITLE=my private repository
- REGISTRY_URL=http://registry-server:5000
depends_on:
- registry-server
访问测试
与前面 带UI的私有仓库 访问方式一样,只是这里的也需要登录后才可查看到数据
写在最后
最近国内docker镜像源均无法正常拉取镜像,所以搭建私有的仓库是一件亟须的事情。
如果私有仓库是在内网中使用的,一般部署基础的就可以满足使用所需,如果是暴露在公网上但又不想被其他人访问,则安装安全加固的仓库。至于有没有UI页面,根据实际情况选择就可以了。
到此,结束!