私有仓库部署
官方提供的 registry 镜像 ,基础镜像仓库,纯命令操作,没有UI页面提供
-
server: 172.16.1.28
-
client: 172.16.1.27
registry-server 部署
| Bash |
|---|
| # 获取官方最新镜像
docker pull registry:3
# 创建仓库的本地存储
mkdir -p /opt/registry/data && cd /opt/registry
# 启动容器
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v /opt/registry/data:/var/lib/registry \
registry:3
# 启动后测试
$ curl http://172.16.1.28:5000/v2/_catalog
{"repositories":[]}
|
docker 私有仓库默认基于https 传输,需要在客户端配置不使用https
| Bash |
|---|
| # client 修改
$ cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
],
"insecure-registries": ["172.16.1.28:5000"] #添加私有仓库
}
# 重启client的docker服务
systemctl daemon-reload && systemctl restart docker
|
推送
| Bash |
|---|
| # 尝试推送一个镜像,要先修改镜像tag
$ docker tag alpine:latest 172.16.1.28:5000/myalpine:v1
# 推送测试
$ docker push 172.16.1.28:5000/myalpine:v1
# 查看仓库
$ curl 172.16.1.28:5000/v2/_catalog
{"repositories":["myalpine"]}
|
拉取
| Bash |
|---|
| # 先删除本地的镜像
docker rmi 172.16.1.28:5000/myalpine:v1
docker pull 172.16.1.28:5000/myalpine:v1
|
配置认证-安全加固
| Bash |
|---|
| # 创建目录
$ mkdir -p /opt/registry/{data,auth} && cd /opt/registry
# 使用htpasswd工具,生成基于http基本认证密码文件
$ yum install httpd-tools # 基于rpm 管理安装工具包
$ apt install apache2-utils # 基于apt 管理安装包
# 生成密码文件
$ htpasswd -Bbn admin admin123456 > /opt/registry/auth/passwd
# -B 强制密码加密
# -b 命令行密码
# -n 不更新加密文件
$ cat auth/passwd
admin:$2y$05$ik.3rAt3ZFRzclXVADctAeZ.YO/LXuNBKJHXQHdzkPVfzdB853nVC
# 使用compose.yml 启动
$ vim docker-compose.yml
services:
registry-server:
image: registry:3
restart: always
volumes:
- /opt/registry/data:/var/lib/registry
- /opt/registry/auth:/etc/registry/auth
environment:
- REGISTRY_STORAGE_DELETE_ENABLED=true
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=basic-realm
- REGISTRY_AUTH_HTPASSWD_PATH=/etc/registry/auth/passwd
container_name: registry-server
ports:
- 5000:5000
# 测试浏览器需要输入账户密码
http://172.16.1.28:5000/v2/_catalog
# docker client 测试
$ docker push 172.16.1.28:5000/myalpine:v1
The push refers to repository [172.16.1.28:5000/myalpine]
418dccb7d85a: Preparing
no basic auth credentials # 这里提示需要认证
# 登陆一下,凭据存储在用户目录的.docker
$ docker login 172.16.1.28:5000
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
# 查看一下
$ cat /root/.docker/config.json
{
"auths": {
"172.16.1.28:5000": {
"auth": "YWRtaW46YWRtaW4xMjM0NTY="
}
}
}
# 测试提交成功
$ docker push 172.16.1.28:5000/alpine:v1
The push refers to repository [172.16.1.28:5000/alpine]
418dccb7d85a: Mounted from myalpine
v1: digest: sha256:7b9b6a044d921dfcaea2a843ff19d725948590352198f93cb878fd2c19d7ba3c size: 527
|