最近在学习Docker,从安装Docker开始,到自定义制作镜像mycentos,但是怎么把它推送到阿里云,一直是困扰我的问题。后面有时间了解了一下,根据本地镜像推动到阿里云其实并没有我们想象中那么难。
前提条件:
已经生成一个镜像,镜像生成的方法,可以参考另外一篇博文:https://www.cnblogs.com/wendyw/p/9728381.html
已经生产一个镜像后,现在要做的事就是把本地镜像推送到阿里云上(目前我使用的是阿里云的仓库)
1、从本地镜像推送到阿里云上,需要知道几个网址
A 阿里云开发者平台:https://dev.aliyun.com/search.html
B 阿里云官网:https://www.aliyun.com/
2、为什么要知道这2个网址:
A 阿里云开发者平台:找到对应的”命名空间/镜像名称”,就是push到阿里云上的镜像。当然,也可以去搜索其他你所需要的镜像。
B 阿里云官网:找到容器镜像服务,步骤:阿里云->控制台-> 产品与服务->弹性计算->容器镜像服务,可以创建镜像仓库、命名空间等。
3、实战-本地镜像推送阿里云
3.1 打开虚拟机centos7终端,执行docker images出现错误:【Failed to restart dock.service: Unit not found.】,执行如下代码:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
3.2 镜像的生成方法
如何生成镜像,请看这一篇博文:https://www.cnblogs.com/wendyw/p/9728381.html
a 打开终端,输入命令 docker image 查看mycentos:1.3的容器ID
docker images
docker run -it 镜像id //找到mycentos:1.3的镜像id,此时已经开启一个容器
//只要容器不退出,另外再打开一个终端,把mycentos:1.3复制一份生成mycentos:1.4上传到阿里云
输入如下命令:
docker ps //查看运行中的容器
docker commit -a 命名空间 -m “注释内容” 容器id(container id) 镜像名称(image id):TAG
//镜像名称(image id):TAG是最新提交的TAG和镜像名称 ,比如mycentos:1.4
//容器id是根据docker ps查看,找到对应的容器id
3.3 将本地镜像登录到阿里云
在阿里云平台,需要做如下3步:
a 创建命名空间,比如abc
b建立仓库名称,比如def
c 建立的镜像仓库->找到对应的仓库,选择def->点击操作栏管理->基本信息->操作指南,找到第三个步骤,将镜像推送到Registry,把这3条命令在linux终端系统输入,对应的imageid、镜像版本号进行修改,执行命令如下:
$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
//xxx是阿里云的账户名称
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/abc/mycentos:[镜像版本号]
//abc是命名空间,[ImageId]是步骤3.2中的镜像id
//mycentos:[镜像版本号]是提交到阿里云上的名称和TAG,比如这里是mycentos:1.4.1
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/abc/mycentos:[镜像版本号]
//abc是命名空间,mycentos:[镜像版本号]与上一步命令保持一致
做完这一步,表示已经从成功从本地上传到阿里云了,可以去阿里云开发者平台搜索abc/mycentos:1.4.1,就能找到你上传上去的镜像:
https://dev.aliyun.com/search.html
3.4 将阿里云上的镜像下载到本地
现在想把开发者平台中的镜像,拉取到本地,比如:mycentos:1.4.1
执行如下命令,就可以把阿里云开发者平台中的镜像拉取到本地:
docker pull registry.cn-hangzhou.aliyuncs.com/abc/mycentos:1.4.1 //abc是命名空间