安装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/镜像版本