基础 5 —— 镜像推送
5.1 将本地镜像推送到阿里云
我们自己制作好镜像以后,我们也可以推送到远端,这样别人也可以去使用我们的镜像。

接下来我们将本地镜像推送到阿里云。在推送之前,我们首先要进入阿里云开发者平台创建仓库镜像。
第一步:选择控制台,进入容器镜像服务
第二步:选择个人实例

第三步:进入个人实例,创建命名空间


然后将仓库设置成公开类型
第四步:创建镜像仓库

点击下一步:

我们点击创建镜像仓库就可以了。
创建完成以后,我们需要注意以下几个命令:

接下来,我们就用这几个命令来进行镜像的推送。
[root@shjava101 ~]# docker login --username=文威_krisswen registry.cn-
hangzhou.aliyuncs.com # 先远程登录
Password: # 输入密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@shjava101 ~]# docker tag a31aabe9e714 registry.cn-
hangzhou.aliyuncs.com/krisswen/linux1:1.0
[root@shjava101 ~]# docker push registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
The push refers to repository [registry.cn-
hangzhou.aliyuncs.com/krisswen/linux1]
83a3737e56ff: Pushed
2499a75b89bf: Pushed
1.0: digest:
sha256:e197b6ad96975283cd6455512f75cc956dc940c4370c526d47958dc0143353ff size:
741
我们如何从阿里云拉取镜像呢?

[root@shjava101 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
1.0: Pulling from krisswen/linux1
3d6881d9c553: Already exists
30dfd2f8b48a: Already exists
Digest: sha256:e197b6ad96975283cd6455512f75cc956dc940c4370c526d47958dc0143353ff
Status: Downloaded newer image for registry.cn-
hangzhou.aliyuncs.com/krisswen/linux1:1.0
registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0
[root@shjava101 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/krisswen/linux1 1.0 a31aabe9e714 58 minutes ago 181MB
wen/ubuntu 1.0 575629a1394b 2 days ago 72.8MB
tomcat latest fb5657adc892 12 months ago 680MB
5.2 将本地镜像推送到私有库
Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。 Docker Registry 是官方提供的工具,可以用于构建私有镜像仓库。
所以我们需要先搭建私服库。
5.2.1 搭建私服
第一步:下载镜像 Docker Registry
[root@shjava101 ~]# docker pull registry
第二步:运行私服容器
运行私有库 Registry,相当于本地有个私有 Docker hub
[root@shjava101 ~]# docker run -d -p 5000:5000 -v /krisswen/myregistry/:/tmp/registry --privileged=true registry # 先这么运行,不用管为什么
c2759846ce33fe3f57f48ccc747158e9aa4bb354517de0da9b0f3d42f8fb0549
5.2.2 将镜像推送到私服库
案例演示创建一个新镜像,Ubuntu 安装 ifconfig 命令
[root@shjava101 ~]# docker pull ubuntu # 重新下载一个新的ubuntu镜像
[root@shjava101 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/krisswen/linux1 1.0 a31aabe9e714 2 hours ago 181MB
ubuntu latest ba6acccedd29 14 months ago 72.8MB
[root@shjava101 ~]# docker run -it ba6acccedd29 /bin/bash # 运行ubuntu镜像
原始的 Ubuntu 镜像是不带着 ifconfig 命令的。
root@8b4bcfd9196e:/# ifconfig
bash: ifconfig: command not found
接下来我们来完整 ifconfig 命令,并确保该命令可以正常使用。
root@8b4bcfd9196e:/# apt-get update
root@8b4bcfd9196e:/# apt-get install net-tools
root@8b4bcfd9196e:/# ifconfig # 我们发现可以正常测试通过
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 8668 bytes 25347876 (25.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8533 bytes 467687 (467.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我们 Ctrl + P + Q 退出容器。接下来我们开始进行镜像推送。
第一步:安装镜像
语法格式:docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
[root@shjava101 ~]# docker commit -m="ifconfig" -a="krisswen" 8b4bcfd9196e
ubuntu1:1.1
sha256:238f2c8c8320fe31b113148b4cc8e0b0c48ac52f12bccab806ac6c86cab55c2f
[root@shjava101 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu1 1.1 238f2c8c8320 10 seconds ago 114MB
第二步:使用 curl 工具验证私服库上有什么镜像
[root@shjava101 ~]# curl -XGET http://192.168.10.145:5000/v2/_catalog
{"repositories":[]}
可以看到,目前私服库没有任何镜像上传过。
第三步:将新镜像 ubuntu1:1.1 修改符合私服规范的 Tag
命令格式:docker tag 镜像:Tag Host:Port/Repository:Tag
[root@shjava101 ~]# docker tag ubuntu1:1.1 192.168.10.145:5000/ubuntu1:1.1
我们查看修改之后的效果:

第四步:修改 docker 配置文件使之支持 http
docker 默认不允许 http 方式推送镜像,通过配置来取消这个限制。vim 命令新增如下内容:vim /etc/docker/daemon.json
"insecure-registries": ["192.168.10.145:5000"]

最好是重新启动 docker。并且保证 Linux 防火墙没有对 5000 端口拦截。
第五步:push 推送到私服库
由于重新启动了 docker,之前运行的 docker registry 容器也停止了,需要重新启动这个容器。
[root@shjava101 ~]# docker run -d -p 5000:5000 -v /krisswen/myregistry/:/tmp/registry --privileged=true registry
[root@shjava101 ~]# docker push 192.168.10.145:5000/ubuntu1:1.1 # 推送镜像到私服
The push refers to repository [192.168.10.145:5000/ubuntu1]
7aa85451c54f: Pushed
9f54eef41275: Pushed
1.1: digest:
sha256:2dd023374760f44dccb406bc07e710baf0e0e6208186a48fd26aadf2d29136e1 size:
741
第六步:验证私服库上是否存在镜像
[root@shjava101 ~]# curl -XGET http://192.168.10.145:5000/v2/_catalog
{"repositories":["ubuntu1"]}
我们发现没有问题。
第七步:从私服上拉取镜像
[root@shjava101 ~]# docker pull 192.168.10.145:5000/ubuntu1:1.1 # 从私服上拉取镜像
1.1: Pulling from ubuntu1
7b1a6ab2e44d: Already exists
d4586c2bf028: Pull complete
Digest: sha256:2dd023374760f44dccb406bc07e710baf0e0e6208186a48fd26aadf2d29136e1
Status: Downloaded newer image for 192.168.10.145:5000/ubuntu1:1.1
192.168.10.145:5000/ubuntu1:1.1
[root@shjava101 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.10.145:5000/ubuntu1 1.1 238f2c8c8320 41 minutes ago 114MB
我们发现,镜像成功拉取下来了。

浙公网安备 33010602011771号