Docker入门之push镜像至aliyun镜像仓库与自己搭建的镜像仓库

前言

  • 所谓镜像仓库,大名鼎鼎的docker hub是家喻户晓的。除此之外还有aliyun提供的镜像仓库、自己搭建的镜像仓库等等。(鄙人知识有限,目前只熟悉这两个镜像仓库,若还有其他镜像仓库,还劳烦各位同行告知下,小弟在此多谢了!)。上篇博客中Docker入门之Dockerfile命令相关总结与基于centos镜像构建tomcat镜像,我们对构建docker的Dockerfile文件的常用指令做了总结以及构建了一个属于自己的tomcat镜像,现在我们将把此镜像push至aliyun镜像仓库和自己搭建的私有镜像仓库。
  • aliyun镜像仓库能设置公开和私有的,那为什么还要自己搭建镜像仓库呢?这不是多此一举么?咱们也好得照顾下一些安全措施(不能访问外网)做的比较好的公司嘛。此时自己搭建的私有镜像仓库不久能派上用场了么?

一、aliyun镜像仓库

1.1 进入aliyun镜像仓库

1.2 开通registry服务

  • 进入并登录上述的地址后,映入眼前的是一个设置registry密码的界面, 如图所示:
    在这里插入图片描述

1.3 设置registry密码

  • 此密码要记住,将来会用来登录aliyun的镜像仓库
    在这里插入图片描述

1.4 创建镜像仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 查看push镜像至aliyun镜像仓库的相关操作

在这里插入图片描述
在这里插入图片描述

1.6 push上篇博客构建好的tomcat镜像至aliyun镜像仓库

  • 查看镜像
    在这里插入图片描述* 重命名镜像tag
    在这里插入图片描述
  • push镜像至aliyun镜像仓库, 其中会看到如下界面,但速度很慢,若想加速,可以访问此链接:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors(但是要登录才能访问,因为它会为当前的aliyun账号分配一个镜像加速地址), 使用此方式可以加快镜像push和pull的速度
    在这里插入图片描述
  • push成功
    在这里插入图片描述

1.7 运行指定镜像

  • aliyun镜像仓库地址查看
    在这里插入图片描述
    然后会惊讶的发现,纳尼?为什么多了一个仓库名称。而且它还是私有的?于是我们把它的信息修改成公有并添加一些摘要和描述信息并保存:
    在这里插入图片描述
    最后,我们去aliyun镜像仓库中心搜索镜像(搜索关键字为: aliyun命名空间/具体镜像名称):
    在这里插入图片描述
    发现刚刚push的镜像安安静静的躺在这儿.我们点进去镜像看看:
    在这里插入图片描述
    发现有镜像的公网地址, 我们可以找一台其他的linux机器(有docker环境)直接run这个镜像就能启动一个容器运行该镜像了
    docker login --username=具体的用户名 registry.cn-hangzhou.aliyuncs.com
    docker run --name mytomcat -it -d -p 8081:8080  registry.cn-hangzhou.aliyuncs.com/avengereug/mytomcat:v1 
    curl -i localhost:8081
    

1.8 总结的几个问题

  • push镜像至aliyun镜像仓库的命令规则
    docker push aliyun镜像仓库服务器地址/命名空间/镜像名:tag
    
  • 如果按照如上的步骤来执行的话,可以发现其实我们压根不需要在aliyun的页面中去创建镜像仓库,所谓的镜像仓库其实就是对应的镜像。我们可以直接使用命令行来push一个镜像,镜像仓库的名称就是push镜像命令行中的镜像名
  • 若我们在使用CI进行自动化构建docker时,经常需要登录登出docker,我们通常会使用如下命令来实现命令行传递密码登录docker仓库
    docker login -u xxx -p yyy 私有docker仓库地址
    

二、搭建自己私有的镜像仓库

2.1 运行docker hub官网提供的镜像仓库registry

  • 运行如下命令,具体可参考官方文档:https://docs.docker.com/registry/deploying/
    	docker run --name docker-registry --restart=always -v /mnt/registry:/var/lib/registry -it -d -p 5555:5000 registry:2
    
  • 大致的含义下个命令参数就是:
    	运行一个镜像,名字叫registry。标签叫2。
    	-p 5555:5000 => 将宿主机的5555端口与容器暴露出来的5000端口做映射
    	-d => 以后台守护进程的方式运行容器
    	--restar=always  => 假如容器异常退出会自动重启
    	-v /mnt/registry:/var/lib/registry => 将容器仓库中存储数据的路径(/var/lib/registry)映射到宿主机的/mnt/registry路径,保证不会因容器摧毁而丢失数据
    	-it  => 以基本的shell脚本交互产生一个终端
    	--name docker-registry  => 为容器添加了一个名字,方便以后操作容器
    	
    

2.2 docker hub官网镜像仓库registry api

2.3 将本地镜像push至私有镜像仓库

同样的,还是操作上篇博客制作的tomcat镜像

  1. 修改tag
        # b3668180dbfb为tomcat镜像的id
    	docker tag b3668180dbfb 49.235.135.230:5555/avengereug/mytomcat:v1
    
  2. 以repository/tag的方式命名tag时有两个坑:
    • 不允许出现大写字母
    • repository不能包含http, eg: 上述的49.235.135.230:5555不能是http://49.235.135.230:5555
  3. push镜像
    docker push 49.235.135.230:5555/avengereug/mytomcat:v1
    
  4. 所有操作结果如下所示:
    在这里插入图片描述
  5. 但是好像有问题,Get https://49.235.135.230:5555/v2/: http: server gave HTTP response to HTTPS client是个什么鬼?https协议?我的服务器没有开启https协议,于是经过一番搜索,发现要在**/etc/docker.daemon.json**文件中添加如下配置(配置不安全的registry地址,言外之外就是不使用https协议啦):
    "insecure-registries":["49.235.135.230:5555"]
    
    于是让docker重新加载并重启
    # docker重启后很多容器都会挂掉哦,如果有其他重要的容器别忘记重新启动它们
    systemctl reload docker && systemctl restart docker
    
  6. 再次push镜像
    docker push 49.235.135.230:5555/avengereug/mytomcat:v1
    
    运行结果如下图所示:
    在这里插入图片描述
    熟悉的进度条加载界面,看起来应该是ok了,一起静等佳音吧~

2.4 查看私有仓库中的所有镜像

  • 执行如下命令
    curl -i http://49.235.135.230:5555/v2/_catalog
    

2.5 私有仓库总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值