docker commit为什么不适合生成镜像?

要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录与容器存储层里。而Docker提供了一个docker commit 的命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,在叠加上容器的存储层,并构成信的镜像,以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

docker commit的语法格式为:

docker commit[选项] [[:]]
但是,慎用docker commit
使用docker commit命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

首先,如果在安装软件,编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像及其臃肿。

此外,使用docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制定镜像的人知道执行过什么命令,怎么生成的镜像,别人根本无从得知,而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作的。虽然docker diff或许可以得到一点线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。

而且,任何修改的结果仅仅是在当前层进行标记,添加,修改,而不会改动上一层。如果使用docker commit制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到,这会使镜像更加臃肿。

docker commit有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用docker commmit定制镜像,定制行为应该使用Dockerfile来完成。
本文转载自:https://www.cnblogs.com/zhangshuyang/p/8138288.html

原文地址:https://www.cnblogs.com/smart-girl/p/11719357.html

时间: 2024-08-01 21:48:50

docker commit为什么不适合生成镜像?的相关文章

docker commit命令创建新的镜像

1.运行容器 2.修改容器 3.将容器保存为新容器 (1)运行容器 [[email protected] docker]# docker run -ti centos -ti 参数是指以交换模式进入容器 (2)安装vim [[email protected] /]# yum install -y vim (3)保存为新镜像 复制打开新窗口查看当前运行的容器 [[email protected] ~]# docker ps 我们可以看到IMAGE为centos,suspicious_perlman

docker 查看,删除,创建镜像

1,docker镜像的存储位置 /var/lib/docker docker info 查看存储的位置和驱动 2,docker 列出镜像 docker images 列出列表中含有的所有镜像 repository 仓库 docker image -q 只显示镜像名 docker inspect 镜像名/镜像id 查看镜像的详细信息 docker rmi 镜像名/镜像id 3,查找镜像 docker search 镜像名       最多返回25个结果 docker search -s 3 ubu

「一」创建一个带 ssh 服务的基础镜像(修订版)--使用「docker commit」创建

在介绍如何创建带 ssh 服务的基础镜像之前,我们想回顾一下之前介绍过的内容,其中提到有三种创建镜像的常用办法: 从文件系统导入 从现有容器使用「docker commit」提交 使用 dockerfile 文件 build 本章将主要介绍后面 2 种方法. 步骤如下: $ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. [email protected]:/# sshd bash: sshd: co

docker 部署 flask(三)高级编写及生成镜像,安装requirements.txt

简介: 上一篇,我写了如何使用别人的docker基础镜像,生成我们的docker镜像. 也就最基本的flask,没有别的库(包)支持.连数据库支持都没有. 也就让大家了解一下怎么生成镜像而已. 本篇介绍如何在docker镜像中安装库(包)支持. 其实我也被卡了2天,没搞定. https://github.com/tiangolo/uwsgi-nginx-flask-docker/issues/38 在作者的 github问了,还是自己回答.哥真NB,自己提问,自己解答. 一:选择性的忽略 作者网

docker commit构建镜像(不推荐)

dcoker commit镜像构建 获取docker镜像 # 下载镜像(默认从docker hub获取) docker pull ubuntu:14.04 搜索镜像 docker search IMAGE_NAME 返回如下信息: NAME : 仓库名(用户名/仓库名) DESCRIPTION : 镜像信息描述 STARS : 反应镜像的受欢迎程度 OFFICIAL : 是否为官方镜像 AUTOMATED : 镜像是否为docker hub自动构建 到docker hub注册账号并使用login

Docker 使用方法总结之:镜像

查找 命令:docker search [OPTIONS] TERM 相关参数: Search the Docker Hub for images --automated=false    Only show automated builds --no-trunc=false     Don't truncate output -s, --stars=0        Only displays with at least x stars 例子: [[email protected] ~]# d

docker commit 与 docker build

在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像.下面想在这个文章中说明一下镜像的制作方法. 制作镜像的方式主要有两种: 通过docker commit 制作镜像 通过docker build 制作镜像 这两种方式都是通过改进已有的镜像来达到自己的目的.制作基础镜像,会在另外一篇文章"从零开始制作基础镜像"中介绍. docker commit docker commit 是往版本控制系统里提交一次变更.使用这种方式制作镜像,本

docker commit命令

docker commit命令用于基于一个容器来创建一个新的docker镜像. docker commit制作的镜像,除了制定镜像的人知道执行过什么命令,怎么生成的镜像,别人根本无从得知.建议使用的是Dockerfile来制作镜像,镜像的生成过程是透明的, docker commit可用于被入侵后保存现场等操作. 用法为: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 参数 默认值 作用 —author, -a     作者信息 —ch

docker虚拟化之将容器做成镜像

1,docker ps -a 选择要启动的容器. 2,docker start  容器+ID 启动容器 3,docker exec -i -t   容器ID /bin/bash   进入容器 这里的/bin/bash 一定不能缺少 否则会报错 4,定制个性化容器 比如需要安装httpd服务. 4,将容器做成镜像 回到宿主机器,docker commit -m  ""   -a  ""   容器ID(可以简写)  镜像名称 -m  提示信息    -a  作者 这样我