基础 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

我们发现,镜像成功拉取下来了。

posted @ 2026-07-18 17:38  nuo534202  阅读(4)  评论(0)    收藏  举报