基础 5 —— 镜像推送

发布时间:2026/7/19 3:44:12
基础 5 —— 镜像推送 5.1 将本地镜像推送到阿里云我们自己制作好镜像以后我们也可以推送到远端这样别人也可以去使用我们的镜像。接下来我们将本地镜像推送到阿里云。在推送之前我们首先要进入阿里云开发者平台创建仓库镜像。第一步选择控制台进入容器镜像服务第二步选择个人实例第三步进入个人实例创建命名空间然后将仓库设置成公开类型第四步创建镜像仓库点击下一步我们点击创建镜像仓库就可以了。创建完成以后我们需要注意以下几个命令:接下来我们就用这几个命令来进行镜像的推送。[rootshjava101 ~]# docker login --username文威_krisswen registry.cn-hangzhou.aliyuncs.com# 先远程登录Password:# 输入密码WARNING!Your password will be stored unencryptedin/root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded[rootshjava101 ~]# docker tag a31aabe9e714 registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0[rootshjava101 ~]# docker push registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0The push refers to repository[registry.cn- hangzhou.aliyuncs.com/krisswen/linux1]83a3737e56ff: Pushed 2499a75b89bf: Pushed1.0: digest: sha256:e197b6ad96975283cd6455512f75cc956dc940c4370c526d47958dc0143353ff size:741我们如何从阿里云拉取镜像呢?[rootshjava101 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.01.0: Pulling from krisswen/linux1 3d6881d9c553: Already exists 30dfd2f8b48a: Already exists Digest: sha256:e197b6ad96975283cd6455512f75cc956dc940c4370c526d47958dc0143353ff Status: Downloaded newer imageforregistry.cn- hangzhou.aliyuncs.com/krisswen/linux1:1.0 registry.cn-hangzhou.aliyuncs.com/krisswen/linux1:1.0[rootshjava101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry.cn-hangzhou.aliyuncs.com/krisswen/linux11.0a31aabe9e71458minutes ago 181MB wen/ubuntu1.0575629a1394b2days ago72.8MB tomcat latest fb5657adc89212months ago 680MB5.2 将本地镜像推送到私有库Dockerhub、阿里云这样的公共镜像仓库可能不太方便涉及机密的公司不可能提供镜像给公网所以需要创建一个本地私人仓库供给团队使用基于公司内部项目构建镜像。 Docker Registry 是官方提供的工具可以用于构建私有镜像仓库。所以我们需要先搭建私服库。5.2.1 搭建私服第一步下载镜像 Docker Registry[rootshjava101 ~]# docker pull registry第二步运行私服容器运行私有库 Registry相当于本地有个私有 Docker hub[rootshjava101 ~]# docker run -d -p 5000:5000 -v /krisswen/myregistry/:/tmp/registry --privilegedtrue registry # 先这么运行不用管为什么c2759846ce33fe3f57f48ccc747158e9aa4bb354517de0da9b0f3d42f8fb05495.2.2 将镜像推送到私服库案例演示创建一个新镜像Ubuntu 安装 ifconfig 命令[rootshjava101 ~]# docker pull ubuntu # 重新下载一个新的ubuntu镜像[rootshjava101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry.cn-hangzhou.aliyuncs.com/krisswen/linux11.0a31aabe9e7142hours ago 181MB ubuntu latest ba6acccedd2914months ago72.8MB[rootshjava101 ~]# docker run -it ba6acccedd29 /bin/bash # 运行ubuntu镜像原始的 Ubuntu 镜像是不带着 ifconfig 命令的。root8b4bcfd9196e:/# ifconfigbash: ifconfig:commandnot found接下来我们来完整 ifconfig 命令并确保该命令可以正常使用。root8b4bcfd9196e:/# apt-get updateroot8b4bcfd9196e:/# apt-get install net-toolsroot8b4bcfd9196e:/# ifconfig # 我们发现可以正常测试通过eth0:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1500inet172.17.0.3 netmask255.255.0.0 broadcast172.17.255.255 ether 02:42:ac:11:00:03 txqueuelen0(Ethernet)RX packets8668bytes25347876(25.3MB)RX errors0dropped0overruns0frame0TX packets8533bytes467687(467.6KB)TX errors0dropped0overruns0carrier0collisions0lo:flags73UP,LOOPBACK,RUNNINGmtu65536inet127.0.0.1 netmask255.0.0.0 loop txqueuelen1000(Local Loopback)RX packets0bytes0(0.0B)RX errors0dropped0overruns0frame0TX packets0bytes0(0.0B)TX errors0dropped0overruns0carrier0collisions0我们 Ctrl P Q 退出容器。接下来我们开始进行镜像推送。第一步安装镜像语法格式docker commit -m提交的描述信息 -a作者 容器ID 要创建的目标镜像名:[标签名][rootshjava101 ~]# docker commit -mifconfig -akrisswen 8b4bcfd9196eubuntu1:1.1 sha256:238f2c8c8320fe31b113148b4cc8e0b0c48ac52f12bccab806ac6c86cab55c2f[rootshjava101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE ubuntu11.1238f2c8c832010seconds ago 114MB第二步使用 curl 工具验证私服库上有什么镜像[rootshjava101 ~]# curl -XGET http://192.168.10.145:5000/v2/_catalog{repositories:[]}可以看到目前私服库没有任何镜像上传过。第三步将新镜像 ubuntu1:1.1 修改符合私服规范的 Tag命令格式docker tag 镜像:Tag Host:Port/Repository:Tag[rootshjava101 ~]# docker tag ubuntu1:1.1 192.168.10.145:5000/ubuntu1:1.1我们查看修改之后的效果第四步修改 docker 配置文件使之支持 httpdocker 默认不允许 http 方式推送镜像通过配置来取消这个限制。vim 命令新增如下内容vim /etc/docker/daemon.jsoninsecure-registries:[192.168.10.145:5000]最好是重新启动 docker。并且保证 Linux 防火墙没有对 5000 端口拦截。第五步push 推送到私服库由于重新启动了 docker之前运行的 docker registry 容器也停止了需要重新启动这个容器。[rootshjava101 ~]# docker run -d -p 5000:5000 -v /krisswen/myregistry/:/tmp/registry --privilegedtrue registry[rootshjava101 ~]# docker push 192.168.10.145:5000/ubuntu1:1.1 # 推送镜像到私服The push refers to repository[192.168.10.145:5000/ubuntu1]7aa85451c54f: Pushed 9f54eef41275: Pushed1.1: digest: sha256:2dd023374760f44dccb406bc07e710baf0e0e6208186a48fd26aadf2d29136e1 size:741第六步验证私服库上是否存在镜像[rootshjava101 ~]# curl -XGET http://192.168.10.145:5000/v2/_catalog{repositories:[ubuntu1]}我们发现没有问题。第七步从私服上拉取镜像[rootshjava101 ~]# 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 imagefor192.168.10.145:5000/ubuntu1:1.1192.168.10.145:5000/ubuntu1:1.1[rootshjava101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE192.168.10.145:5000/ubuntu11.1238f2c8c832041minutes ago 114MB我们发现镜像成功拉取下来了。