# Docker 镜像私有仓库

在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 hub.docker.com 这个地址去查找,这就是 Docker 公司为我们提供的公共仓库。在工作中,我们不可能把企业项目 push 到公有仓库进行管理。所以为了更好的管理镜像,Docker 不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。

Docker 容器镜像仓库分类:

  • 公网仓库:docker hub
  • 私网仓库:registry、harbor

# 一、registry

# 1. 仓库搭建

  1. 拉取 registry 容器镜像
  2. 创建 registry 仓库容器
  3. 测试

1.1 拉取 registry 容器镜像

docker pull registry

1.2 创建 registry 仓库容器

1. 创建持久化存储,将容器镜像存储目录 /var/lib/registry 挂载到本地 /opt/myregistry 下:

mkdir /opt/myregistry

2. 创建 registry 容器

docker run -d -p 5000:5000 -v /var/lib/registry:/opt/myregistry --restart=always registry:latest

3. 查看容器是否运行

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6b20b55fe6f8        registry:latest     "/entrypoint.sh /etc…"   2 minutes ago       Up 2 minutes        0.0.0.0:5000->5000/tcp   busy_mclean

1.3 测试容器应用

[root@VM-12-10-centos ~]# curl http://0.0.0.0:5000/v2/_catalog{"repositories":[]}

显示仓库中没有任何镜像。

# 2. 上传镜像

  1. 设置 docker 仓库为 registry 本地仓库
  2. 给需要存储的镜像打 tag
  3. 上传镜像到 registry 仓库

查看本地镜像:

[root@VM-12-10-centos ~]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
goweb_app                                       latest              62879d6fbd56        26 minutes ago      894 MB
centos-httpd                                    v1                  2c4280de642e        About an hour ago   209 MB
docker.io/golang                                latest              b09f7387a719        2 weeks ago         862 MB
docker.elastic.co/elasticsearch/elasticsearch   7.12.1              41dc8ea0f139        2 months ago        851 MB
docker.io/registry                              latest              1fd8e1b0bb7e        2 months ago        26.2 MB
docker.io/centos                                latest              300e315adb2f        6 months ago        209 MB
演示:将 **goweb_app** 上传到 registry 仓库

2.1 设置 docker 仓库为 registry 本地仓库

# 1. 修改 docker 进程启动文件,修改其启动方式,目的是为了让其通过 docker 配置文件启动

[root@VM-12-10-centos ~]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service

# 2. 设置 Docker 守护进程的配置文件 /etc/docker/daemon.json,默认没有该文件
[root@VM-12-10-centos ~]# cat /etc/docker/daemon.json 
{
 "insecure-registries": ["http://0.0.0.0:5000"]
}
insecure-registries 指定非安全的仓库地址,多个用逗号隔开

# 3. 重启docker生效配置文件
[root@VM-12-10-centos ~]# systemctl daemon-reload
[root@VM-12-10-centos ~]# systemctl restart docker

2.2 给需要存储的镜像打 tag

[root@VM-12-10-centos ~]# docker tag goweb_app:latest 0.0.0.0:5000/goweb_app:v1

2.3 上传镜像到 registry 仓库

# 1. 上传镜像docker push 0.0.0.0:5000/goweb_app:v1# 2. 查看上传[root@VM-12-10-centos ~]# curl http://0.0.0.0:5000/v2/_catalog{"repositories":["centos_nginx"]}

# 3. 下载镜像

  1. 设置 docker 仓库为 registry 本地仓库
  2. 拉取镜像到本地

3.1 设置 docker 仓库为 registry 本地仓库

同 2.2

3.2 拉取镜像

docker pull 0.0.0.0:5000/goweb_app:v1

# 4. 设置认证

  1. 安装需要认证的包
  2. 创建存放认证信息的文件
  3. 创建认证信息
  4. 创建带认证的registry容器
  5. 指定仓库地址
  6. 登录认证

4.1 安装需要认证的包

yum -y install httpd-tools

4.2 创建存放认证信息的文件

mkdir -p /opt/registry-var/auth

4.3 创建认证信息

htpasswd -Bbn hedon 123456 >> /opt/registry-var/auth/htpasswd

4.4 创建带认证的 registry 容器

docker run -d -p 10000:5000 --restart=always --name registry \
-v  /opt/registry-var/auth:/auth \
-v /opt/myregistry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:latest

4.5 指定仓库地址

cat /etc/docker/daemon.json 
{
 "insecure-registries": ["http://0.0.0.0:5000","http://0.0.0.0:10000"]
}

4.6 登录认证

docker login 0.0.0.0:10000
Username:hedon
Password:123456

# 二、harbor

略。

上次更新: 6/24/2021, 6:09:13 PM