010_Docker提交容器成镜像

010_Docker提交容器成镜像,第1张

Docker容器在使用过程中要经常提交备份成镜像。比如保存在容器中安装的内容。

运行起来的镜像就是容器,一个镜像可以创建多个容器。

提交镜像很重要,务必提交提交提交。

1什么是提交?

在进入容器内后修改一些东西后安装某些工具后保存,以便下次run镜像时不用再次做同样的 *** 作,这里假设已有一个镜像base,这个镜像是基于ubuntu:1804 构建的,构建时只装了base库,没有ifconfig库。

2提交容器的方法:

(1)查看容器id

这里只有两个容器:

test01@test:~$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e63d89aab255 ubuntu:1804 "/bin/bash" 12 hours ago Exited (0) 12 hours ago version1

d88782fadf13 hello-world "/hello" 24 hours ago Exited (0) 24 hours ago crazy_ganguly

(2)进入容器,安装一些环境,退出。

test01@test:~$ docker start e63d89aab255

e63d89aab255

test01@test:~$ docker exec -it e63d89aab255 /bin/bash

(3)提交

提交的格式:

docker commit [选项] [容器ID或容器名] [仓库名:标签]

-a:修改人

-m:备注

test01@test:~$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e63d89aab255 ubuntu:1804 "/bin/bash" 12 hours ago Up 4 minutes version1

d88782fadf13 hello-world "/hello" 24 hours ago Exited (0) 24 hours ago crazy_ganguly

test01@test:~$ docker commit -m "add ifconfig" e63d89aab255 myubuntu1804:v001

sha256:2bdd57e3df51cba0044734cfaa97ae9d2c6f127eaa75501007f695f5ff02cfbb

test01@test:~$ docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE

myubuntu1804 v001 2bdd57e3df51 7 seconds ago 104MB

hello-world version20 d0354d8282cd 15 minutes ago 133kB

ubuntu 1804 886eca19e611 9 days ago 631MB

hello-world latest feb5d9fea6a5 3 months ago 133kB

查看镜像,可以看到新镜像比旧镜像大了好多。

(4)删除老的镜像

test01@test:~$ docker rmi hello-world:version20

Untagged: hello-world:version20

Deleted: sha256:d0354d8282cdcec2266d71f7176aaa4926b36fecb3f0dfd23a4b4d3b3f2a08f1

原文:
Docker提交容器成镜像 - 知乎 (zhihucom)
>正常可以访问,看截图像是无法解析目标服务器
检查本机的host或代理设置,是否有对应的屏蔽
再不行清除浏览器缓存再试试
如果还是不行,别搜了,直接用163的国内镜像
编辑或新建文件:
mkdir /etc/docker
vi /etc/docker/daemonjson
填入:更换docker的镜像源
{
"registry-mirrors": [">

在日常工作中经常需要搭建 Web 服务器和反向代理服务器,用于测试和生产的情况都有。虽然用于测试的场景有很多便捷的方法,但是在向生产环境迁移时会导致有些工作不能复用。综合看起来,还是用 Nginx 最为方便。本文尝试提供一些配置模板。

需要提前了解的内容:

选择 OpenResty 的原因:

OpenResty 默认安装位置:

安装目录中 Nginx 相关文件:

默认服务指向 Web 文件夹

映射关系:

默认 配置文件 位置(后续的配置会覆盖这里的内容):

在绝大多数情况,覆盖上面的配置文件就可以了。

但是,这些配置文件的内容,只能是包含在 >docker私有镜像仓库一般用来存放公司内部的镜像,比如微服务中会有很多的服务需要放到自己公司内部的镜像仓库上,发布的时候直接从私有镜像仓库拉取。比如我公司的微服务部署在k8s环境上,微服务技术依然选择熟悉的 Spring Cloud ,这样每一个服务其实就是一个 Spring Boot 项目,我们通过Maven的插件会在项目编译、打包之后推送到我们的私有镜像仓库,之后CI工具使用kubelet部署的时候会从私有镜像仓库拉取镜像,最后完成部署,可以说私有镜像仓库是非常重要的一个环节。
接下来我会主要讲述一下私有镜像仓库的搭建以及镜像的管理,包括一些自己遇到的问题。
首先要保证自己的服务器已经安装了 docker 。具体的安装教程可以看 官网 ,这里就不在赘述了。

首先我们需要创建一个自己的CA证书,

比如下图是我自己创建时输入的相关内容:

做好镜像存储目录和证书目录的挂载,运行即可

这一步需要在所有需要拉取镜像的服务器上执行。上月底我在部署正式环境时我就遇到了这个问题,k8s的节点上一直显示拉取镜像失败,后来才发现忘了在k8s服务器上配置证书。

hostname 即生成CA证书的时候最后输入的 hostname , port 镜像仓库对外暴露的端口号。

如果是在镜像仓库所在的服务器上,执行:

如果不是同一台服务器,同样需要存放创建证书目录,执行:

之后将证书上传到目标服务器,且放在证书目录下,名称为 cacrt 。

为了测试,我拉取一个 redis 镜像,然后给它重新打一个 tag 。

推送到私有镜像仓库:
浏览器显示:

表示刚才推送到私有镜像仓库是成功的。接下来我们测试从另一台服务器拉取刚才的镜像。当然这台服务器一定要按照之前的描述配置好CA证书,还要修改服务器 hosts 文件,配置好 ip 和 hostname 。
拉取镜像:

拉取镜像如下图所示:

根据显示可以看出拉取镜像是成功的。
到这里镜像仓库的搭建、推送和拉取都讲完了,接下来就看看怎么删除镜像。

这里说的删除镜像是指从仓库中删除,即从服务器上删除。在构建仓库的时候我们将镜像的仓库容器内的目录挂载到了服务器的目录。镜像仓库内其实是没有镜像文件,都在服务器对应的目录下。在开发的时候我就遇到过这样一个问题,因为是开发环境项目编译、打包、镜像构建和推送都非常频繁,虽然新的镜像会覆盖老的镜像,但是原有的镜像文件本身并没有被覆盖,这样的结果就是虽然镜像仓库上看镜像只有一个,但是本地服务上存储的是很多个镜像文件(而且基本是没啥用的),最终导致了服务磁盘空间不足的情况。

我们依然以 Redis 举例,我将多不同版本的 Redis 多次像私有仓库推送,不管是 Redis 40、50、60,最终我向仓库推送的版本号都是 redis:v4 (过程省略),最终我们在镜像仓库目录( /home/registry/ )下可以看到有多个 sha256 的值,详细目录:
/home/registry/docker/registry/v2/repositories/redis/_manifests/revisions/sha256

如下图:
如果要删除镜像首先需要修改配置文件,进入到docker容器内:

保存之后退出容器。
我们进入到存放镜像的目录下,删除一个镜像的 sha256 的值

上面只是删除了镜像的 sha256 值,并没有删除镜像本身,我们需要调用垃圾回收的命令:

这时候会看到一些输出,比如:

这时候我们在查看下对应目录的磁盘使用情况:

但是变化不明显,那就在删除一个试试。

除了手动删除之外还可以通过API来删除,这个方法我没有测试,感兴趣的小伙伴可以测试一下。在实际过程中我也是使用上述方法删除的,因为我一般都是磁盘使用率到一定比例才进行批量删除的,另外网上也有人通过脚本,感兴趣的小伙伴都可以尝试一下。

删除可以使用使用官方API删除:

查询镜像的 sha256 的值:

今天关于docker私有镜像仓库的内容就讲到这里,如果对上面内容有什么疑问欢迎大家交流探讨,也欢迎大家多多点赞、分享、转发,谢谢大家~~~​

假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。
一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令

1找到你想移动的 Docker 容器的 ID

docker ps -a 

2提交你的变更,并且把容器保存成镜像,命名为 redis。

docker commit a1a303886ef4  redis(变更好名字)

3把 redis 镜像保存成 tar 文件

docker save redis > /app/redistar

​4拷贝到新的机器,执行load命令

docker load < /app/redistar

5docker  exec  -it  容器ID   /bin/bash 启动打包的容器


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13489634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存