暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker入门-Hub官方仓库使用及搭建本地私有仓库(CentOS 7)

IT那活儿 2022-07-22
8334

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

问题1:Docker Hub官方仓库使用

Docker Hub(https://hub.docker.com)是目前Docker官方维护的一个公共仓库,其中包括100000多个镜像。
docker中文社区http://www.docker.org.cn/page/resources.html
1. 注册Docker Hub账号f
docker login,输入用户名、密码、邮箱来完成注册和登录。
本地用户下会自动创建.docker/config.json文件,保存用户的认证信息。
登录成功的用户可以上传个人制作的镜像到Docker Hub。
Username: xxxx
2. 仓库基本操作
  • docker pull 镜像名(如ubuntu)   默认下载Docker Hub官方仓库中的镜像;
  • docker push 镜像名(如myubuntu) /默认把镜像上传到Docker Hub官方仓库中;
  • docker search 关键字(如mysql) //默认搜索Docker Hub官方仓库中的镜像。

搜索结果说明

  • 第一行NAME为centos的镜像,是官方(OFFICIAL)创建的;
  • 第二行NAME为ansible/centos7-ansible,这种格式的镜像是由Docker Hub用户ansible创建并维护的。
3. 自动创建(AUTOMATED)
自动创建( Automated Builds)是 Docker Hub提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像。
例如:用户构建了某应用镜像,如果应用发布新版本,用户需要手动更新镜像。而自动创建则允许用户通过 Docker Hub指定跟踪一个目标网站(目前支持 Github或 Bit Bucket)上的项目,一旦项目发生新的提交,则自动执行创建。
要配置自动创建,包括如下的步骤:
  • 创建并登录 Docker Hub,以及目标网站如 Github;
  • 在目标网站中允许 Docker Hub访问服务;
  • 在 Docker Hub中配置一个“自动创建”类型的项目;
  • 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  • 指定 Dockerfile的位置,并提交创建。
之后,可以在 Docker Hub的“自动创建”页面中跟踪每次创建的状态。
4. 第三方镜像市场
比如:时速云镜像市场(https://hub.tenxcloud.com
下载镜像时要做镜像名前面加上第三方镜像市场注册服务器的具体地址。
格式:docker pull 服务器注册地址/命名空间/REPOSITORY[:TAG]
比如:
docker pull index.tenxcloud.com/docker_library/node:latest
下载后,可以通过docker tag 给镜像添加新标签,与官方保持一致:

docker tag index.tenxcloud.com/docker_library/node:latest node:latest

问题2:Docker资源汇总,国内镜像(加速)

1. Docker资源

  • Docker 官方主页: https://www.docker.com
  • Docker 官方博客:https://blog.docker.com/
  • Docker 官方文档: https://docs.docker.com/
  • Docker Store: https://store.docker.com
  • Docker Cloud: https://cloud.docker.com
  • Docker Hub: https://hub.docker.com
  • Docker 的源代码仓库: https://github.com/moby/moby
  • Docker 发布版本历史: https://docs.docker.com/release-notes/
  • Docker 常见问题: https://docs.docker.com/engine/faq/
  • Docker 远端应用 API:https://docs.docker.com/develop/sdk/
  • Docker 菜鸟教程 https://www.runoob.com/docker/docker-run-command.html
2. Docker国内镜像
  • 阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
  • 网易加速器:http://hub-mirror.c.163.com
  • 官方中国加速器:https://registry.docker-cn.com
  • ustc 的镜像:https://docker.mirrors.ustc.edu.cn
  • daocloud:https://www.daocloud.io/mirror#accelerator-doc
3. 配置官方镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,甚至下载失败,此时可以配置镜像加速器。
方式一:(未及验证)
Docker官方和国内很多云服务商都提供了国内加速器服务,例如:
Docker官方提供的中国镜像库:https://registry.docker-cn.com
七牛云加速器:https://reg-mirror.qiniu.com
Ubuntu16.04+、Debian8+、CentOS7等系统,在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{"registry-mirrors":["https://registry.docker-cn.com"]}
重新启动服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service

Windows 10 的系统,在系统右下角托盘 Docker 图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Daemon。
在 registry-mirrors 一栏中填写加速器地址 https://registry.docker-cn.com ,之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了。
方式二:(已验证可以)
阿里云容器镜像服务 ACR 提供了官方的镜像站点,从而加速官方镜像的下载。
阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
登录容器镜像服务控制台(需要注册账号):https://cr.console.aliyun.com/?spm=a2c4g.11186623.2.15.19e611beo3Fhq5,在左侧的镜像中心->镜像加速器页面会显示为您独立分配的加速地址:
https://z6pn1lmd.mirror.aliyuncs.com
CentOS 7系统配置方式:
1)将默认的配置文件(/lib/systemd/system/docker.service)复制到 /etc/systemd/system/docker.service:
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
2)再将加速器地址添加到配置文件的启动命令中:
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service

3)重启 Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker.servic

问题3:搭建本地私有仓库
1. 使用官方提供的regisry镜像创建私有仓库
docker run -d -p 5000:5000 -v /docker/data/registry:/var/lib/registry --restart=always --privileged=true --name registry registry:2
此时,在本地将启动一个私有仓库服务,监听端口为5000:
  • -p 5000:5000:端口映射。即本地5000端口,映射到registry容器中的5000端口。
  • –restart=always1:在容器退出时总是重启容器,主要应用在生产环境。
  • –privileged=true:在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报类似权限错误。OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error).
  • –name registry:指定容器的名称。
默认情况下,仓库会被创建在容器的/var/lib/registry目录下。通过-v参数来将镜像文件存放在本地/docker/data/registry目录下。
2. 管理私有仓库
查看仓库容器IP,以及本地主机IP:
docker inspect -f "{{.NetworkSettings.IPAddress}}" registry
上传镜像:
给镜像ubuntu:latest加个新的标签192.168.44.81:5000/ubuntu:latest.
格式:
docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker tag ubuntu:latest 192.168.44.81:5000/ubuntu:latest


执行上传:
docker push 192.168.44.81:5000/ubuntu:latest
在PUSH的过程中可能报类似如下的错误:
则在/etc/docker下创建daemon.json,加入内容:
{"insecure-registries":["192.168.44.81:5000"]}

然后重启docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker.service

查看上传结果:curl <仓库地址>/v2/_catalog.
curl http://192.168.44.81:5000/v2/_catalog
查询镜像tag(版本):curl <仓库地址>/v2/<镜像名>/tags/list.
curl http://192.168.44.81:5000/v2/ubuntu/tags/list
也可以通过浏览器查看私有仓库的内容:
http://192.168.44.81:5000/v2/_catalog
http://192.168.44.81:5000/v2/ubuntu/tags/list
在其他主机上下载这个镜像:
docker pull 192.168.44.81:5000/ubuntu:latest
在PULL的过程中可能报类似如下的错误:
则在/etc/docker下创建daemon.json,加入内容:
{"insecure-registries":["192.168.44.81:5000"]}
然后重启docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service


本文作者:孙长城(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论