Docker镜像的commit操作示例及作用

目录
  • Docker 镜像是什么
    • UnionFS(联合文件系统)
    • Docker 镜像加载原理
    • 分层的镜像
  • Docker 镜像 commit 操作
    • docker commit 能做什么
    • 案例演示

Docker 镜像是什么

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker 镜像加载原理

docker 的镜像实际上是由一层层的文件系统组成,这种层级的文件系统 UnionFS。

bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader 主要是引导加载 kernel,Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 botfs。这一层与我们典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs。

rootfs (root file system),在 bootfs 之上,包含的就是典型 Linux 系统中的 /dev,/proc,/bin,/etc 等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如 Ubuntu,Centos 等等。

对于一个精简的OS,rootfs 可以很小,只需要包括最基本的命令、工具和程序库就可以了,因此底层直接用 Host 的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的 Linux 发行版吗,bootfs 基本是一致的,rootfs 会有差别因此不同的发行版本可以公用bootfs。

分层的镜像

我们以 tomcat 镜像为例,在下载的过层中可以看到 docker 的镜像好像是在一层一层的在下载。

  • 为什么 Docker 镜像要采用这种分层结构

最大的好处就是-共享资源
比如:有多个镜像都是从相同的 base 镜像构建而来,那么宿主机只需要在磁盘上保存一份 base 镜像,同时内存中也只需要加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

  • 特点

Docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫做“镜像层”。

Docker 镜像 commit 操作

docker commit 能做什么

docker commit
提交容器副本使之成为一个新的镜像docker

commit 格式

docker commit -m='提交的描述信息' -a='作者' 容器ID 新镜像名:标签

案例演示

下载一个 tomcat 镜像到本地并成功运行

[root@docker ~]# docker pull tomcat
[root@docker ~]# docker run -d -p 8888:8080 tomcat

进入容器并在 / 目录下创建文件 test,退出容器

[root@docker ~]# docker exec -it $(docker ps -q) bash
root@4004f1503c75:/usr/local/tomcat# touch /test
root@4004f1503c75:/usr/local/tomcat# exit

当前正在运行的 tomcat 容器,根目录下新创建了一个 test 文件,以它为模板 commit 一个根目录下有 test 文件的 tomcat 镜像

#新镜像创建成功
	[root@docker ~]# docker commit -a="test" -m="test" $(docker ps -q) tomcat:test
	sha256:1dcb7604643bb29e47420f7a4d40582564a89df59fd3ae4602e72a84f27af9db
	[root@docker ~]# docker images
	REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
	tomcat              test                1dcb7604643b        About a minute ago   649 MB
	tocmat              latest              625b734f984e        41 hours ago         648 MB

启动新镜像 tomcat:test,查看 / 目录下是否具有 test 文件

[root@docker ~]# docker run -d  tomcat:test
[root@docker ~]# docker exec -it ec738896bc67 ls /test
/test

以上就是Docker镜像的commit操作示例及作用的详细内容,更多关于Docker镜像commit操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Docker 修改已有镜像(commit )

    先使用下载的镜像启动容器. $ sudo docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/# 注意:记住容器的 ID,稍后还会用到. 在容器中添加 json 和 gem 两个应用. root@0b2616b0e5a8:/# gem install json 当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 Docker commit 命令来提交更新后的副本. $ sudo docker com

  • 详解Docker学习之用commit命令创建镜像

    构建镜像的两种方法: 使用docker commit 命令 使用docker build命令和Dockerfile文件 Dockerfile更抢到.灵活,推荐使用. 一般来说不是真的"创建"新镜像,而是基于一个已有的基础镜像,比如Ubuntu.Fedora等,构建新的镜像而已. 用commit创建镜像 创建Docker账号 共享和发布镜像时构建镜像中重要的环节,可以将镜像推送到Docker Hub或资金的私有Registry中.首先到https://hub.docker.com/acc

  • Docker 制作镜像Dockerfile和commit操作

    构建镜像 构建镜像主要有两种方式: 使用docker commit命令从运行中的容器提交为镜像: 使用docker build命令从 Dockerfile 构建镜像. 首先介绍下如何从运行中的容器提交为镜像.我依旧使用 busybox 镜像举例,使用以下命令创建一个名为 busybox 的容器并进入 busybox 容器. $ docker run --rm --name=busybox -it busybox sh 执行完上面的命令后,当前窗口会启动一个 busybox 容器并且进入容器中.在

  • 通过容器提交镜像DockerCommit及推送镜像DockerPush

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB 创建一个名为myubuntu的容器 [root@docker-test1 ~]# docker run -ti

  • docker学习笔记之把容器commit成镜像的方法

    docker提供了两种镜像制作的方式,提高了使用的灵活性: 1.可以将更改后的容器提交,制作成镜像(这是接下来要说明的) 2.通过Dockerfile来制作镜像 下面通过一个例子来展示方法 本地有一个Ubuntu的镜像,下面以这个为蓝本,创建一个容器并在根目录下添加一个test文件,然后做成镜像. [root@bw001 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest a3cdd83cf

  • 详解Docker镜像提交命令commit的工作原理和使用方法

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 下面我们来动手实践. docker pull nginx:1.15.3 用命令行启动一个容器: docker run -d -p 1080:80 --name jerry-nginx nginx:1.15.3 localhost:1080 进入容器的shell: docker exec -it jerry-nginx /bin/bash 查看这个nginx镜像默认的首页: 我想

  • Docker镜像的commit操作示例及作用

    目录 Docker 镜像是什么 UnionFS(联合文件系统) Docker 镜像加载原理 分层的镜像 Docker 镜像 commit 操作 docker commit 能做什么 案例演示 Docker 镜像是什么 UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统是一种分层.轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a

  • Docker镜像管理常用操作代码示例

    镜像也是docker的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态.总体来说,镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统,将每一层的改变以读写层的形式增加到原来的只读文件上. 镜像与容器的关系 前文已经向读者介绍过容器的使用了,细心的读者可能已经发现,容器在启动或者创建时,必须指定一个镜像的名称或者id,其实,这时镜像所扮演的角色就是容器的模版,不同的镜像可以构造出不同的容器.如下命令: docker run -itd --name nginx ngi

  • 详解Docker镜像与容器的常见操作

    镜像加速器 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器.国内很多云服务商都提供了国内加速器服务,例如: 网易云加速器 https://hub-mirror.c.163.com 阿里云加速器(需登录账号获取): https://cr.console.aliyun.com/cn-hangzhou/mirrors 国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档. 在CentOS7系统

  • Docker镜像构建之docker commit的使用

    目录 1.创建容器 2.拷贝资源 3.安装资源 4.构建镜像 5.使用构建的镜像创建容器 我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的需求.尽管已经从繁琐的部署工作中解放出来了,但是在实际开发时,我们可能希望镜像包含整个项目的完整环境,在其他机器上拉取打包完整的镜像,直接运行即可. Docker 支持自己构建镜像,还支持将自己构建的镜像上传到公共仓库,镜像构建可以通过以下两种方式来实现: docker commit:从容器创建一个新的镜像: docker hu

  • Docker容器数据卷介绍及操作示例

    目录 容器数据卷介绍 什么是数据卷 数据卷能做什么? 特点 Docker 容器数据卷操作 直接命令添加数据卷 dockerfile 添加数据卷 Docker 数据卷容器 数据卷容器简介 案例演示 容器数据卷介绍 什么是数据卷 将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求是持久化的. 容器之间希望有可能共享数据. Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分保存下载,那么当容器删除后,数据自然也就没有了

  • dockerfile指令构建docker镜像的示例代码

    目录 初识Dockerfile 编写一个自己的docker 镜像: DockerFile docker build . 命令 查看镜像是如何生成的 初识Dockerfile Dockerfile就是用来构建docker镜像的构建文件!命令脚本! 通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层 dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单. Dockerfile镜像之间成为了企业交付的标准,必须掌

  • Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码

    最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4.项目准备 5.编写 Dockerfile 6.发布项目 7.测试服务 环境准备 系统:Ubuntu 17.04 x64 Docker 17.12.0-ce IP:45.32.31.101 一.安装 Docker CE 国内不建议使用:"脚本进行安装",会下载安装很慢,使用步骤 1 安装,看下面的链接:常规安装方式 1.常规安装方式 Ubuntu 17.04 x64 安装

  • Docker镜像的制作,上传,拉取和部署操作(利用阿里云)

    由于学习过程中发现push镜像的时候一直超时,所以直接把阿里云的Docker仓库申请一个(管理中心–>创建镜像仓库–>我的是华东2绑定github账户即可),搞定!以后push就用这个仓库,pull的时候使用加速器,注意切换根据使用场景进行切换,dockerhub丢弃--记录了一下操作流程: 1.创建命名空间hhu(以当前学校为单位,只能小写,每个账号只能创建5个),创建菜鸟Docker镜像仓库docker1(绑定github中某个仓库,个人可以随意,这个仓库镜像就像是一个app,可以不断的更

  • docker镜像导入导出备份迁移的操作

    导出: docker save -o centos.tar centos:latest #将centos:latest镜像导出为centos.tar文件 导入: docker load -i centos.tar #加载centos.tar,加载后的镜像各标签与原导出的镜像标签相同 补充知识:docker将镜像保存为tar文件 将单个文件保存为tar文件,并加载到本地 docker save ****.v1 > images.tar docker load < images.tar 将多个文件

随机推荐