本文最后更新于 2025-01-19,转载请标明原作者!

一、拉取镜像

docker pull registry:2.8.3
docker pull htpasswd

如果拉取不了,可以去看下这篇文章,马上跳转

二、创建数据卷对应的文件及文件夹

mkdir -p /www/docker_registry/data
mkdir -p /www/docker_registry/auth
touch /www/docker_registry/auth/htpasswd

如果想把数据放到其他目录,也可以将 /www/docker_registry/data(auth) 改成你想要放置数据的目录。

注意如果修改了这里的目录,那么下面的三(账号密码的存储文件)、四(docker-compose.yaml文件里的volumes)也要修改

三、为私有仓库设置账号密码

运行一个临时容器生成账号密码

docker run --entrypoint htpasswd httpd:2 -Bbn username password > /www/docker_registry/auth/htpasswd

注意usernamepassword要改成你要设置的账号密码,/www/docker_registry/auth/htpasswd改成你的账号密码文件地址

四、编辑docker-compose.yaml文件

cd /www/docker_registry/
vim docker-compose.yaml
version: '3'
services:
  docker_registry:
    container_name: docker_registry
    image: registry:2.8.3
    ports:
      - 5000:5000
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      REGISTRY_HTTP_SECRET: secret
    restart: always
    volumes:
      - /www/docker_registry/data:/var/lib/registry
      - /www/docker_registry/auth/htpasswd:/auth/htpasswd

输入 wq! 保存退出。

REGISTRY_HTTP_SECRET: secret 其中的secret是随机字符串,可以自己修改,

五、修改daemon.json文件,添加私有仓库

vim /etc/docker/daemon.json

将私有仓库的地址添加进去,例如:

{
        "insecure-registries": [
                "your_private_registry_host:port"
        ],
        "registry-mirrors": [
                "https://docker.1panelproxy.com"
        ]
}

保存daemon.json以及重启docker

systemctl daemon-reload
systemctl restart docker

六、运行容器并登录到私有仓库

运行容器

docker-compose up -d

登录到私有仓库

docker login -u username -p password your_private_registry_host:port

如果不写your_private_registry_host:port,则默认为官方仓库Docker Hub

退出私有仓库

docker logout your_private_registry_host:port

如果不写your_private_registry_host:port,则默认为官方仓库Docker Hub

七、从私有仓库推送和拉取镜像

标记本地镜像

为了能够推送本地镜像到私有仓库,需要给该镜像打上一个标签,该标签需要包含私有仓库的地址、端口(如果非默认)、以及你希望使用的镜像名称和可选的标签(通常是版本号)。格式如下:

docker tag LOCAL_IMAGE:TAG YOUR_PRIVATE_REGISTRY_HOST:PORT/IMAGE_NAME:TAG

例如,如果你有一个名为 myapp 的本地镜像,并希望将其标记为 v1.0 并推送到本地的私有仓库:

docker tag myapp:latest localhost:5000/myapp:v1.0

推送镜像到私有仓库

完成标记后,可以将镜像推送至你的私有仓库:

docker push YOUR_PRIVATE_REGISTRY_HOST:PORT/IMAGE_NAME:TAG

从私有镜像仓库拉取镜像到本地

docker pull YOUR_PRIVATE_REGISTRY_HOST:PORT/IMAGE_NAME:TAG