docker容器保存为镜像的镜像和容器的区别

Docker学习笔记(3)--什么是Docker镜像、容器和仓库? - 简书
Docker学习笔记(3)--什么是Docker镜像、容器和仓库?
Docker生命周期
Docker 包括三个基本概念:
镜像(Image)容器(Container)仓库(Repository)
这三部分组成了Docker的整个生命周期,如下图所示,容器是由镜像实例化而来的,这和我们学习的面向对象的概念十分相似,我们可以把镜像想象成类,把容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了。
Docker生命周期
Docker镜像
Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了Mysql或用户需要的其它应用程序。
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
注:镜像是只读的,可以理解为静态文件。
Docker容器
Docker 利用容器来运行应用。
Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:相对于镜像来说容器是动态的,容器在启动的时候创建一层可写层作为最上层。
Docker仓库
如果你使用过git和github就很容易理解Docker的仓库概念。Docker 仓库的概念跟Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
仓库支持的操作类似git,当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。.
本人记性不好,写点东西记录学习中遇到的问题及解决思路,以及学习过程的笔记和经验方法,方便以后查询,同时希望能把这些分享给大家。「Allen 谈 Docker 系列」之深刻理解 Docker 镜像大小 - 为程序员服务
「Allen 谈 Docker 系列」之深刻理解 Docker 镜像大小
「Allen 谈 Docker 系列」DaoCloud 正在启动 Docker 技术系列文章,每周都会为大家推送一期真材实料的精选 Docker 文章。主讲人为 DaoCloud 核心开发团队成员 Allen 孙宏亮,他是 InfoQ《Docker 源码分析》专栏作者,即将出版《Docker 源码分析》一书。Allen 接触 Docker 近两年,爱钻研系统实现原理,及 Linux 操作系统。
都说容器大法好,但是如果没有 Docker 镜像,Docker 该是多无趣啊。
是否还记得第一个接触 Docker 的时候,你从 Docker Hub 下拉的那个镜像呢?在那个处女镜像的基础上,你运行了容器生涯的处女容器。镜像的基石作用已经很明显,在 Docker 的世界里,可以说是:「No Image,No Container」。
再进一步思考 Docker 镜像,大家可能很快就会联想到以下几类镜像:
系统级镜像:如 Ubuntu 镜像,CentOS 镜像以及 Debian 容器等;
工具栈镜像:如 Golang 镜像,Flask 镜像,Tomcat 镜像等;
服务级镜像:如 MySQL 镜像,MongoDB 镜像,RabbitMQ 镜像等;
应用级镜像:如 WordPress 镜像,Docker Registry 镜像等。
镜像林林总总,想要运行 Docker 容器,必须要有 Docker 镜像;想要有 Docker 镜像,必须要先下载 Docker 镜像;既然涉及到下载 Docker 镜像,自然会存在 Docker 镜像存储。谈到 Docker 镜像存储,那我们首先来聊聊 Docker 镜像大小方面的知识。
以下将从三个角度来分析 Docker 镜像的大小问题:「Dockerfile 与镜像」、「联合文件系统」以及「镜像共享关系」。
Dockerfile 与镜像
Dockerfile
由多条指令构成,随着深入研究
Dockerfile
与镜像的关系,很快大家就会发现,
Dockerfile
中的每一条指令都会对应于 Docker 镜像中的一层。
继续以如下
Dockerfile
FROM ubuntu:14.04
ADD run.sh /
VOLUME /data
CMD ["./run.sh"]
docker build
Dockerfile
的时候,会在
ubuntu:14.04
镜像基础上,添加三层独立的镜像,依次对应于三条不同的命令。镜像示意图如下:
Dockerfile
与镜像关系的初步认识之后,我们再进一步联系到每一层镜像的大小。
不得不说,在层级化管理的 Docker 镜像中,有不少层大小都为 0。那些镜像层大小不为 0 的情况,归根结底的原因是:构建 Docker 镜像时,对当前的文件系统造成了修改更新。而修改更新的情况主要有两种:
的作用是在
docker build
构建镜像时向容器中添加内容,只要内容添加成功,当前构建的那层镜像就是添加内容的大小,如以上命令
ADD run.sh /
,新构建的那层镜像大小为文件
命令的作用是在当前空的镜像层内运行一条命令,倘若运行的命令需要更新磁盘文件,那么所有的更新内容都在存储在当前镜像层中。举例说明:
RUN echo DaoCloud
命令不涉及文件系统内容的修改,故命令运行完之后当前镜像层的大小为 0;
RUN wget /def.tar
命令会将压缩包下载至当前目录下,因此当前这一层镜像的大小为:对文件系统内容的增量修改部分,即
文件的大小(在成功执行的情况下)。
联合文件系统
Dockerfile
中命令与镜像层一一对应,那么是否意味着
docker build
完毕之后,镜像的总大小是否等于每一层镜像的大小总和呢?答案是肯定的。依然以上图为例:如果
ubuntu:14.04
镜像的大小为 200 MB,而
的大小为 5 MB,那么以上三层镜像从上到下,每层大小依次为 0、0 以及 5 MB,那么最终构建出的镜像大小的确为 0 + 0 + 5 + 200 = 205 MB。
虽然最终镜像的大小是每层镜像的累加,但是需要额外注意的是:Docker 镜像的大小并不等于容器中文件系统内容的大小(不包括挂载文件,
等虚拟文件)。个中缘由,就和联合文件系统有很大的关系了。
首先来看一下这个简单的
Dockerfile
例子(假如在
Dockerfile
当前目录下有一个 100 MB 的压缩文件
compressed.tar
FROM ubuntu:14.04
ADD compressed.tar /
RUN rm /compressed.tar
ADD compressed.tar /
FROM ubuntu:14.04
ubuntu:14.04
的大小为 200 MB;
ADD compressed.tar /
compressed.tar
文件为 100 MB,因此当前镜像层的大小为 100 MB,镜像总大小为 300 MB;
RUN rm /compressed.tar
:删除文件
compressed.tar
,此时的删除并不会删除下一层的
compressed.tar
文件,只会在当前层产生一个
compressed.tar
的删除标记,确保通过该层将看不到
compressed.tar
,因此当前镜像层的大小也为 0,镜像总大小为 300 MB;
ADD compressed.tar /
compressed.tar
文件为 100 MB,因此当前镜像层的大小为 300 MB + 100 MB,镜像总大小为 400 MB;
分析完毕之后,我们发现镜像的总大小为 400 MB,但是如果运行该镜像的话,我们很快可以发现在容器根目录下执行
之后,显示的数值并非 400 MB,而是 300 MB 左右。主要的原因还是:联合文件系统的性质保证了两个拥有
compressed.tar
文件的镜像层,容器仅能看到一个。同时这也说明了一个现状,当用户基于一个非常大,甚至好几个 GB 的镜像运行容器时,在容器内部查看根目录大小,发现竟然只有 500 MB 不到,甚至更小。
分析至此,有一点大家需要非常注意:镜像大小和容器大小有着本质的区别。
镜像共享关系
Docker 镜像说大不大,说小不小,但是一旦镜像的总数上来之后,岂不是对本地磁盘造成很大的存储压力?平均每个镜像 500 MB,岂不是 100 个镜像就需要准备 50 GB 的存储空间?
结果往往不是我们想象的那样,Docker 在镜像复用方面设计得非常出色,大大节省镜像占用的磁盘空间。Docker 镜像的复用主要体现在:多个不同的 Docker 镜像可以共享相同的镜像层。
假设本地镜像存储中只有一个
ubuntu:14.04
的镜像,我们以两个 Dockerfile 来说明镜像复用:
FROM ubuntu:14.04
RUN apt-get update
FROM ubuntu:14.04
ADD compressed.tar /
docker build
构建出来的镜像名分别为
,由于两个
Dockerfile
ubuntu:14.04
这两个镜像均复用了镜像
ubuntu:14.04
RUN apt-get update
修改的文件系统内容为 20 MB,最终本地三个镜像的大小关系应该如下:
ubuntu:14.04
:200 MB(
ubuntu:14.04
的大小)+ 20 MB = 220 MB
:200 MB(
ubuntu:14.04
的大小)+ 100 MB = 300 MB
如果仅仅是单纯的累加三个镜像的大小,那结果应该是:200 + 220 + 300 = 720 MB,但是由于镜像复用的存在,实际占用的磁盘空间大小是:200 + 20 + 100 + 320 MB,足足节省了 400 MB 的磁盘空间。在此,足以证明镜像复用的巨大好处。
学习 Docker 的同时,往往有三部分内容是分不开的,那就是 Dockerfile,Docker 镜像与 Docker 容器,分析 Docker 镜像大小也是如此。Docker 镜像的大小,貌似平淡无奇,却是优化镜像,容器磁盘限额必须要涉及的内容。
本系列将通过以下多篇文章来分析 Docker 镜像:
深刻理解 Docker 镜像大小
docker commit
不得不说的
docker save
docker export
为什么有些容器文件动不得
MNT Namespace
欲知 Docker 镜像更精彩的内容,且听下回分解
原文地址:, 感谢原作者分享。
您可能感兴趣的代码关于Docker里面的几个主要概念【it培训吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:25,243贴子:
关于Docker里面的几个主要概念收藏
金信润天讯 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统。你可以拿别人的ghost文件安装系统(使用镜像运行容器),也可以把自己现有的系统制作成ghost文件(从容器构建镜像)。Dockerfile则像是一个生成ghost文件的脚本(镜像构建脚本),这里用个不太恰当的比方来说明。大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统。你可以拿别人的ghost文件安装系统(使用镜像运行容器),也可以把自己现有的系统制作成ghost文件(从容器构建镜像)。Dockerfile则像是一个生成ghost文件的脚本(镜像构建脚本),这个脚本会指定去哪里下载哪个版本的window系统,再去哪里下载哪些软件并安装,再修改哪些配置文件,等等。本文主要讲的是,如何从容器构建镜像(把现有系统制作成ghost文件),和如何使用Dockerfile构建镜像(使用脚本生成ghost文件)。两种方式构建镜像的主要步骤:1.从容器构建镜像(以下简称容器镜像)创建一个容器,比如使用 tomcat:latest 镜像创建一个tomcat-test容器修改tomcat-test容器的文件系统,比如修改tomcat的server.xml文件中的默认端口使用commit命令提交镜像2.使用Dockerfile构建镜像(以下简称Dockerfile镜像)编写Dockerfile文件使用build命令构建镜像两种构建方式的区别:1.容器镜像的构建者可以任意修改容器的文件系统后进行发布,这种修改对于镜像使用者来说是不透明的,镜像构建者一般也不会将对容器文件系统的每一步修改,记录进文档中,供镜像使用者参考。2.容器镜像不能(更准确地说是不建议)通过修改,生成新的容器镜像。从镜像运行容器,实际上是在镜像顶部上加了一层可写层,所有对容器文件系统的修改,都在这一层中进行,不影响已经存在的层。比如在容器中删除一个1G的文件,从用户的角度看,容器中该文件已经没有了,但从文件系统的角度看,文件其实还在,只不过在顶层中标记该文件已被删除,当然这个标记为已删除的文件还会占用镜像空间。从容器构建镜像,实际上是把容器的顶层固化到镜像中。也就是说, 对容器镜像进行修改后,生成新的容器镜像,会多一层,而且镜像的体积只会增大,不会减小。长此以往,镜像将变得越来越臃肿。Docker提供的 export 和 import 命令可以一定程度上处理该问题,但也并不是没有缺点。3.容器镜像依赖的父镜像变化时,容器镜像必须进行重新构建。如果没有编写自动化构建脚本,而是手工构建的,那么又要重新修改容器的文件系统,再进行构建,这些重复劳动其实是没有价值的。4.Dockerfile镜像是完全透明的,所有用于构建镜像的指令都可以通过Dockerfile看到。甚至你还可以递归找到本镜像的任何父镜像的构建指令。也就是说,你可以完全了解一个镜像是如何从零开始,通过一条条指令构建出来的。5.Dockerfile镜像需要修改时,可以通过修改Dockerfile中的指令,再重新构建生成,没有任何问题。6.Dockerfile可以在GitHub等源码管理网站上进行托管,DockerHub自动关联源码进行构建。当你的Dockerfile变动,或者依赖的父镜像变动,都会触发镜像的自动构建,非常方便。** 不管是官方还是我个人,都推荐使用第二种方式构建镜像。**关于Dockerfile里面指令的详细说明,这里就不一一列出了,大家可以参考官方文档,或关注我之后的文章,当然网上也是一搜一大堆。
登录百度帐号推荐应用Docker镜像与容器命令_教育指南_百度教育攻略
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。Docker通常用于如下场景:web应用的自动化打包和发布;自动化测试和持续集成、发布;在服务型环境中部署和调整数据库或其他的后台应用;从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。一、镜像相关命令1、获取镜像精彩内容,尽在百度攻略:1.sudo docker pull ubuntu:12.042、列出本地镜像精彩内容,尽在百度攻略:1.sudo docker images在列出信息中,可以看到几个字段信息来自于哪个仓库,比如 ubuntu镜像的标记,比如 14.04它的 ID 号(唯一)创建时间镜像大小其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用镜像 ubuntu:14.04 来启动一个容器。3、创建镜像精彩内容,尽在百度攻略:方法一:1.docker commit方法二:1.dockerFile4、移除本地镜像精彩内容,尽在百度攻略:1.可以使用 docker rmi 命令。注意 docker rm 命令是移除容器。*注意:在删除镜像之前要先用 Docker rm 删掉依赖于这个镜像的所有容器。5、存出和载入镜像存出镜像如果要导出镜像到本地文件,可以使用 docker save 命令。精彩内容,尽在百度攻略:6、载入镜像可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如1.sudo docker load --input ubuntu_14.04.tar精彩内容,尽在百度攻略:或1.$ sudo docker load这将导入镜像以及其相关的元数据信息(包括标签等)。精彩内容,尽在百度攻略:二、容器相关命令1、启动容器启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。所需要的命令主要为 docker run。(1)新建并启动下面的命令则启动一个 bash 终端,允许用户进行交互。精彩内容,尽在百度攻略:1.sudo docker run -t -i training/sinatra /bin/bash其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。也可以合并起来写1.sudo docker run -ti ubuntu:14.04 /bin/bash精彩内容,尽在百度攻略:可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。不加-t -i的话,执行完就退出容器例如,下面的命令输出一个 “Hello World”,之后终止容器。1.sudo docker run ubuntu:14.04 /bin/echo 'Hello world'精彩内容,尽在百度攻略:这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。1.在交互模式下,用户可以通过所创建的终端来输入命令,例如精彩内容,尽在百度攻略:如果,只想让容器在后台运行呢?那就看下面的吧!(2)守护态运行更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。例如下面的命令会在后台运行容器。精彩内容,尽在百度攻略:容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。然后使用精彩内容,尽在百度攻略:1.docker attach 容器name就可以进入容器交互界面容器name可以通过以下获得1.docker ps -a如进入上面的:精彩内容,尽在百度攻略:然后进入:当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止精彩内容,尽在百度攻略:(3)启动终止的容器可以利用 docker start + 容器ID,命令,直接将一个已经终止的容器启动运行。先找到要启动容器的id1.docker ps -a精彩内容,尽在百度攻略:Exited表示的就是终止的。然后使用1.docker start b3f9d3239bed精彩内容,尽在百度攻略:上面我以后台运行的方式启动了两个新的容器这是以后台运行的方式来执行的,那怎样才能再进入容器呢?可以用docker attact +容器name精彩内容,尽在百度攻略:先通过docker ps -a 取得正在运行的容器名字,然后1.docker attach goofy_mclean如下:精彩内容,尽在百度攻略:容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。(4)退出Container但是保持运行精彩内容,尽在百度攻略:默认情况下,如果使用ctrl-d退出container,那么container也会stop,按ctrl-p ctrl-q可以退出到宿主机,而保持container仍然在运行.然后要进入再使用docker attach2、停止容器输入exit或ctrl+d精彩内容,尽在百度攻略:3、获取容器信息要获取容器的输出信息,可以通过 docker logs 命令。精彩内容,尽在百度攻略:1.docker logs 容器name4、在容器中安装新的程序下一步我们要做的事情是在容器里面安装一个简单的程序(ping)。我们之前下载的tutorial镜像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping。备注:apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。精彩内容,尽在百度攻略:5、保存对容器的修改当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。或者当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。先取得修改后的容器ID精彩内容,尽在百度攻略:保存容器,实际上就是保存成了一个新的镜像精彩内容,尽在百度攻略:其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。使用 docker images 来查看新创建的镜像。精彩内容,尽在百度攻略:之后,可以使用新的镜像来启动容器6、删除容器可以使用 docker rm 来删除一个处于终止状态的容器。 例如精彩内容,尽在百度攻略:如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。7、检查运行中的容器使用docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。可以使用镜像id的前面部分,不需要完整的id。精彩内容,尽在百度攻略:备注:删除命令汇总精彩内容,尽在百度攻略:docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法:1.进入root权限sudo su2.停止所有的container,这样才能够删除其中的images:docker stop $(docker ps -a -q)如果想要删除所有container的话再加一个指令:docker rm $(docker ps -a -q)3.查看当前有些什么imagesdocker images4.删除images,通过image的id来指定删除谁docker rmi想要删除untagged images,也就是那些id为的image的话可以用docker rmi $(docker images | grep "^" | awk "{print $3}")要删除全部image的话docker rmi $(docker images -q)本文作者:evankaka1900人阅读
Docker学习总结(23)
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。&
Docker通常用于如下场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
一、镜像相关命令
1、获取镜像
2、列出本地镜像
在列出信息中,可以看到几个字段信息
来自于哪个仓库,比如 ubuntu
镜像的标记,比如 14.04
它的 ID 号(唯一)
其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:14.04 和 ubuntu:trusty 具有相同的镜像 ID,说明它们实际上是同一镜像。
TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。例如下面的命令指定使用镜像 ubuntu:14.04 来启动一个容器。
3、创建镜像
4、移除本地镜像
*注意:在删除镜像之前要先用&docker rm&删掉依赖于这个镜像的所有容器。
5、存出和载入镜像
如果要导出镜像到本地文件,可以使用 docker save 命令。
6、载入镜像
可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如
这将导入镜像以及其相关的元数据信息(包括标签等)。
二、容器相关命令
1、启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。所需要的命令主要为 docker run。
(1)新建并启动
下面的命令则启动一个 bash 终端,允许用户进行交互。
其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。也可以合并起来写
可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。不加-t -i的话,执行完就退出容器例如,下面的命令输出一个 “Hello World”,之后终止容器。
这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。
在交互模式下,用户可以通过所创建的终端来输入命令,例如
如果,只想让容器在后台运行呢?那就看下面的吧!
(2)守护态运行更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现。例如下面的命令会在后台运行容器。
容器启动后会返回一个唯一的 id,也可以通过 docker ps 命令来查看容器信息。
就可以进入容器交互界面
容器name可以通过以下获得
如进入上面的:
然后进入:
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
(3)启动终止的容器
可以利用 docker start + 容器ID,命令,直接将一个已经终止的容器启动运行。
先找到要启动容器的id
Exited表示的就是终止的。然后使用
上面我以后台运行的方式启动了两个新的容器
这是以后台运行的方式来执行的,那怎样才能再进入容器呢?可以用docker attact +容器name
先通过docker ps -a 取得正在运行的容器名字,然后
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。
(4)退出container但是保持运行
默认情况下,如果使用ctrl-d退出container,那么container也会stop,按ctrl-p ctrl-q可以退出到宿主机,而保持container仍然在运行.然后要进入再使用docker attach
2、停止容器
输入exit或ctrl+d
3、获取容器信息
要获取容器的输出信息,可以通过 docker logs 命令。
4、在容器中安装新的程序
下一步我们要做的事情是在容器里面安装一个简单的程序(ping)。我们之前下载的tutorial镜像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping。
备注:apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
5、保存对容器的修改
当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。或者当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。
先取得修改后的容器ID
保存容器,实际上就是保存成了一个新的镜像
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用 docker images 来查看新创建的镜像。
之后,可以使用新的镜像来启动容器
6、删除容器
可以使用 docker rm 来删除一个处于终止状态的容器。 例如
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
7、检查运行中的容器
使用docker ps命令可以查看所有正在运行中的容器列表,使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。可以使用镜像id的前面部分,不需要完整的id。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1102754次
积分:17252
积分:17252
排名:千里之外
原创:573篇
转载:181篇
评论:115条
阅读:11747
阅读:2359
阅读:5969
阅读:2377
阅读:4284
阅读:9585
阅读:1618
阅读:11966
文章:11篇
阅读:7568
文章:15篇
阅读:14366
阅读:5737
阅读:10877
文章:37篇
阅读:46888
阅读:5624
阅读:12642
阅读:5662
文章:14篇
阅读:9019
阅读:10916
阅读:11509
文章:16篇
阅读:22442
文章:36篇
阅读:43946
文章:11篇
阅读:16303
文章:109篇
阅读:115134
文章:22篇
阅读:53202
文章:37篇
阅读:54392
文章:10篇
阅读:18091
文章:17篇
阅读:30068
文章:24篇
阅读:70158
文章:16篇
阅读:45568
文章:14篇
阅读:16146
文章:20篇
阅读:43607
文章:48篇
阅读:87830
文章:41篇
阅读:68528
(23)(13)(27)(9)(17)(17)(24)(34)(69)(60)(50)(36)(53)(29)(46)(15)(23)(3)(88)(91)(22)(6)(2)(1)

我要回帖

更多关于 docker的镜像和容器 的文章

 

随机推荐