CentOS 7构建docker私有仓库

安装docker请参考: CenOS 7 安装docker

准备两台虚拟机,两台机器上都配置好yum源,安装docker
Docker 客户端:10.1.1.101;Docker 私有仓库服务器:10.1.1.102

1、在服务端 10.1.1.102 上拉取仓库镜像: registry

# docker pull registry 

2、 在服务器10.1.1.102上运行docker私有仓库

# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry

-v /opt/registry:/var/lib/registry 将宿主机的 /opt/registry 目录挂在到 /var/lib/registry ,将仓库的镜像存储到本地,防止仓库这个容器被删除时,仓库的镜像也会被删除。
–restart=always 容器在docker重启时候自动启动。
如果每天夹参数,可以通过命令添加:docker container update –restart=always 容器名字

3、在客户端制作镜像

以mysql为例,先把它拉取下来

# docker pull mysql

给mysql 镜像打个tag,表示版本

# docker tag mysql 10.1.1.102:5000/mysql:latest

4、将新的mysql镜像上传到私有仓库

# docker push 10.1.1.102:5000/mysql:latest

有时候会报错:

The push refers to a repository [10.1.1.102:5000/hello-world]
Get https://10.1.1.102:5000/v1/_ping: http: server gave HTTP response to HTTPS client

原因是docker私有仓库服务器,默认是给予https传输的,所以我们需要在客户端10.1.1.101配置,不使用https传输

# vi /etc/docker/daemon.json

将下面的代码放进去保存并退出。

"insecure-registries":["10.1.1.102:5000"]

显示如下:

{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["10.1.1.102:5000"]
}

执行下面两条命令,重启docker:

# systemctl daemon-reload
# systemctl restart docker

再次执行推送命令:

# docker push 10.1.1.102:5000/mysql:latest

5、 在私有仓库10.1.1.102查看上传的镜像

# ls /opt/registry/docker/registry/v2/repositories

在客户端执行命令查看:

# curl http://10.1.1.102:5000/v2/_catalog

会输出如下,已上传elasticsearch, hello-world, mysql, nginx, php 镜像

{"repositories":["elasticsearch","hello-world","mysql","nginx","php"]}

如何删除私有仓库的镜像

在私有仓库服务器10.1.1.102上,进入容器内

# docker exec -ti e421b62b3734 /bin/sh

在容器内:

# vi /etc/docker/registry/config.yml

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

编辑上述文件,在 storage 下面加上delete相关参数:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

退出容器,重启registry 重启

# docker restart e421b62b3734

在客户机10.1.1.101 上,用命令删除私有仓库的镜像:

curl -I -XDELETE 私有仓库地址/v2/镜像名称/manifests/镜像对应sha256值

注意:通过命令行获取镜像的对应sha256值

curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://镜像地址/v2/镜像名称/manifests/镜像版本

Was this article helpful?

Related Articles