docker 仓库,即所谓registry,实现了镜像的管理、分发,同时还包括用户的认证。dockerregistry仓库是一个无状态的、高可靠的服务器应用程序,用来存储docker镜像。docker.io为docker官方的仓库,默认所有的pull均是从官方仓库拉取镜像。
公司内部平台应用如果使用docker镜像,则必须搭建私有仓库。
Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。
docker pull registry
# $user改成你的用户名
docker run -d -p 5000:5000 --restart=always -v /home/$user/registry:/var/lib/registry registry
docker run -d -p 5000:5000 --restart=always -v /home/shepf/registry:/var/lib/registry registry
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,-v 映射宿主机路径。
–restart=always 代表当容器因为某些原因停止时,不管退出码是什么都自动重启。除了 always 还有 on-failure 代表只有退出码不为 0 时才重启,并且接受重启次数参数:–restart=on-failture:5
浏览器访问http://127.0.0.1:5000/v2,出现下面情况说明registry运行正常。
验证
现在通过push镜像到registry来验证一下。要上传镜像到私有仓库,需要在镜像的 tag 上加入仓库地址:
# 通过docker tag重命名镜像
docker pull busybox #先下载最新的镜像
docker tag busybox:latest 127.0.0.1:5000/busybox:v1 #tag
# push tag后的镜像到registry
docker push 127.0.0.1:5000/busybox:v1
访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了。
本地的简单上传下载docker镜像,这个已经够用了- -!
1、列出所有的镜像
curl -X GET http://192.168.37.100:5000/v2/_catalog
2、列出指定镜像的所有标签
2.1查看镜像busybox下的tag
curl -X GET http://192.168.37.100:5000/v2/busybox/tags/list
删除registry比较复杂,需要先查到指定标签的镜像的digest (sha256校验和),再根据这个digest来删除。
下面以删除192.168.37.100:5000/busybox/:0.0.1 镜像为例。
curl -v --silent -H “Accept: application/vnd.docker.distribution.manifest.v2+json” -X GET http://192.168.37.100:5000/v2/busybox/manifests/0.0.1 2>&1 | grep Docker-Content-Digest | awk ‘{print ($3)}’
Digest输出例子:
Docker-Content-Digest: sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335
执行以下命令,根据digest删除镜像:
curl -v --silent -H “Accept: application/vnd.docker.distribution.manifest.v2+json” -X DELETE http://192.168.37.100:5000/v2/busybox/manifests/sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335
这里的删除镜像只是删除了一些元数据,需要执行下面的垃圾回收才能真正地从硬盘上删除镜像数据。
因为缺省Docker private registry不允许删除镜像,如果遇到“405 Unsupported” 错误,需要在运行registry容器时设置REGISTRY_STORAGE_DELETE_ENABLED环境变量或参数为true。
docker-compose.yaml 例子:
environment:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
docker run 例子:
-e REGISTRY_STORAGE_DELETE_ENABLED="true"
Get https://10.111.111.201:5000/v2/: http: server gave HTTP response to HTTPS client
docker客户端主机上,执行
vi /etc/docker/daemon.json
添加
"insecure-registries":["xxx.xxx.xxx.xxx:5000"]
# 最后重启服务
$ systemctl daemon-reload
$ systemctl restart docker
DockerRegistry设置Https
参考URL: https://www.jianshu.com/p/37da34d7e4df
linux(ubuntu)环境搭建docker-registry-https
参考URL: http://www.imooc.com/article/277196
粘贴,如下,未测试验证。 本地测试完成可以不用改Registry服务器端为https,docker客户端修改
vi /etc/docker/daemon.json
添加
“insecure-registries”:[“xxx.xxx.xxx.xxx:5000”]
已经满足个人需求。
docker version 1.6.0以上
sudo mkdir -p /opt/docker/registry/data
sudo mkdir -p /opt/docker/registry/conf
sudo docker run -d -p 5000:5000 \
-v /opt/docker/registry/data:/var/lib/registry \
--name docker-registry registry:2.6.2
apt-get install apache2-utils \
htpasswd -c /opt/docker/registry/conf/docker-registry.htpasswd rennbon
添加完一个用户后再添加其他用户不需要 "-c"
git clone https://github.com/letsencrypt/letsencryptcd letsencrypt
./letsencrypt-auto --help
这里菜兄我碰到了如下问题
OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pkg_resources pip wheel failed with error code 2"解决方法"pip uninstall virtualenv
pip install virtualenv
给自己的域名生成证书
./letsencrypt-auto certonly --standalone -d
执行成功后出现以下目录
/etc/letsencrypt/live/ 目录
然后执行copy,将公钥和私钥copy到当初建造了registry配置目录下,当然这里也可以不copy,在下面的Nginx代理的时候挂载当前目录
cp /etc/letsencrypt/live//fullchain.pem /opt/docker/registry/conf/docker-registry.crt
cp /etc/letsencrypt/live//privkey.pem /opt/docker/registry/conf/docker-registry.key
sudo docker run -d \
-p 443:443 \
--name docker-registry-proxy \
-e REGISTRY_HOST="docker-registry" \
-e REGISTRY_PORT="5000" \
-e SERVER_NAME="" \
--link docker-registry:docker-registry \
-v /opt/docker/registry/conf/docker-registry.htpasswd:/etc/nginx/.htpasswd:ro \
-v /opt/docker/registry/conf:/etc/nginx/ssl:ro \
containersol/docker-registry-proxy
7. 远程登录宿主机docker registry
docker login Username:
Password:
Login Succeeded
为什么有了Docker registry还需要Harbor?
https://blog.csdn.net/zhangzijiejiayou/article/details/76472520
https://blog.csdn.net/luckytanggu/article/details/70285837
Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等。
https://dev.aliyun.com/search.html
目前上传本地镜像到网上有多种途径,一个是上传到hub上,一个是阿里云镜像仓库,还要其他服务器。
上传到hub上实在是太慢了,我的服务器用的是阿里云,所以选择上传到阿里云镜像仓库中。
阿里云docker register登录
参考URL: https://blog.csdn.net/qq_19674905/article/details/79705509
docker镜像上传到阿里云
参考URL: https://www.cnblogs.com/afangxin/p/6601099.html
https://c.163yun.com/hub
即使你配置了阿里的镜像源,还是可以通过如下类似的命令从 其他镜像源中下载docker镜像。
docker pull hub.c.163.com/public/nginx:1.2.1
对比阿里docker仓库和网易蜂巢,感觉网易做的好一点,镜像库给你做了分类比较清晰,而且每个镜像 pull 命令都带了网址信息,可以方便让你从他们的地址pull镜像。下载量、收藏数显示的都比较清晰。
镜像导出
命令
docker save [options] images [images...]
示例
docker save -o nginx.tar nginx:latest
镜像导入
命令
docker load [options]
示例
docker load -i nginx.tar
[root@localhost ~]# docker load -i registry.tar
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]#
[root@localhost ~]# systemctl restart docker.service