理解dockerfile是如何工作的?

理解dockerfile是如何工作的?

1.下面是一个最简单的dockerfile:

FROM baserepo
RUN do something

2.这个dockerfile build完等价于下面的命令:

Step 0 :
sudo docker pull baserepo:latest
sudo docker run --name baserepo_bash01 -i -t baserepo:latest /bin/bash
sudo docker ps -a
b779269d5001

sudo docker commit b779269d5001 imagename01

Step 1:
sudo docker run --name baserepo_bash02 -i -t imagename01 /bin/bash
sudo docker ps -a
b779269d5001
b779269d5002

sudo docker exec -d baserepo_bash02 do something
sudo docker commit b779269d5002 imagename02

sudo docker run --name baserepo_bash -i -t imagename02 /bin/bash
sudo docker ps -a
b779269d5001
b779269d5002
b779269d5003

sudo docker stop b779269d5002
sudo docker rm b779269d5002
sudo docker rmi imagename01

sudo docker ps -a
b779269d5001
b779269d5003

sudo docker images
baserepo:latest
imagename02

3.如果看不懂这做的事情,那参照下面的例子理解下

Take the following Dockerfile:
FROM base
RUN echo ‘foo‘ > /tmp/foo.txt
RUN echo ‘bar‘ >> /tmp/foo.txt

and build it:
$ docker build --force-rm -t so-26220957 .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM base
 ---> b750fe79269d
Step 1 : RUN echo ‘foo‘ > /tmp/foo.txt
 ---> Running in d37d756f6e55
 ---> de1d48805de2
Removing intermediate container d37d756f6e55
Step 2 : RUN echo ‘bar‘ >> /tmp/foo.txt
 ---> Running in a180fdacd268
 ---> 40fd00ee38e1
Removing intermediate container a180fdacd268
Successfully built 40fd00ee38e1

You can now start a new container from b750fe79269d, de1d48805de2 and 40fd00ee38e1:
$ docker run --rm b750fe79269d cat /tmp/foo.txt
cat: /tmp/foo.txt: No such file or directory

$ docker run --rm de1d48805de2 cat /tmp/foo.txt
foo

$ docker run --rm 40fd00ee38e1 cat /tmp/foo.txt
foo
bar

of course you might want to start a shell to explore the filesystem and try out commands:
$ docker run --rm -it de1d48805de2 bash -il
[email protected]:/# ls -l /tmp
total 4
-rw-r--r-- 1 root root 4 Oct  6 18:34 foo.txt
[email protected]:/# cat /tmp/foo.txt
foo
[email protected]:/#
来源于:http://stackoverflow.com/questions/26220957/how-can-i-inspect-the-file-system-of-a-failed-docker-build

总结下:dockerfile做的事情其实就是拉镜像,镜像启容器,容器转镜像,镜像再启容器,容器再转镜像,删除中间镜像和容器,大概就是这样的。

时间: 2024-10-03 18:39:47

理解dockerfile是如何工作的?的相关文章

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

深入理解IIS的多线程工作机制

首先让我们来看看IIS里面的这2个数字:最大并发连接数,队列长度.先说这2个数字在哪里看. 最大并发连接数:在IIS中选中一个网站,右键网站名称,在右键菜单中找到并点击[管理网站]->[高级设置].打开对话框如下图: 队列长度:在IIS中选中[应用程序池],在应用程序池列表中,右键你想查看的,在右键菜单中选择[高级设置].打开如下对话框: 这两个数字表面上看是影响我们站点的并发处理能力的,但是具体是如何影响一个网站的并发处理能力的呢?要完全理解IIS的并发处理能力,除了这2个数字,实际上还有一个

怎么理解impala(impala工作原理是什么)

下面给大家介绍怎么理解impala,impala工作原理是什么. Impala是hadoop上交互式MPP SQL引擎, 也是目前性能最好的开源SQL-on-hadoop方案. 如下图所示, impala性能超过SparkSQL. Presto. Hive. impala与hadoop生态结合紧密 (1) HDFS是impala最主要的数据源. 除此之外, impala也支持HBase,甚至支持S3存储. (2) impala表定义存储在hive metastore中, 支持读取hive表定义.

从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

原文链接http://sparkyuan.me/2016/03/14/四大组件的工作过程/ 转载注明出处 系统对四大组件的过程进行了很大程度的封装,日常开发中并不需要了解底层的工作原理,那么研究这些原理的意义在哪里呢? 如果你想在技术上更进一步,那么了解一些系统的工作原理是十分必要的,也是开发人员日后成长为高级工程师所必备的技术能力. Android作为一个优秀的基于Linux操作系统,其内部一定有很多值得我们学习的地方,通过对Android操作系统的学习对提高开发人员的内功有很大的好处. 如果

8. 理解ZooKeeper的内部工作原理

到目前为止,我们已经讨论了ZooKeeper服务的基础知识,并详细了解了数据模型及其属性. 我们也熟悉了ZooKeeper 监视(watch)的概念,监视就是在ZooKeeper命名空间中的znode发生任何变化时完成的事件机制. 我们通过公开一组与znodes相关联的ACL来读取身份验证和基本安全模型. 在本节中,我们将通过介绍ZooKeeper session的概念来讨论和了解客户端与ZooKeeper服务交互的生命周期. 我们还将详细阅读ZooKeeper如何在内部描述协议. 了解以及深入

【测试理解】基于个人工作中的阶段性测试理解

今日整理了一些工作内容,具体内容无法发布上来,但是其中对于测试的理解相对于之前有一些新的认知~ 其中最底部为:质量和效率,保障质量,提升效率,是工作中的两个重要方向,质量是必须保证,效率是需要提升 基于以上两方面目标,会做出一个更细的划分,其中质量可从几个角度进行覆盖:服务稳定性.功能有效性.用户体验性等几个方面,效率上从几个方面进行覆盖:项目推进.人力安排.平台创新及优化 基于细化分析之后,结合项目情况,则需要清晰:项目架构技术实现.项目知识(业务发现面向客户.业务形态,覆盖端型,所处阶段等)

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1; } 反汇编代码: g: pushl  %ebp                   将ebp的值压栈,同时esp向下移动4个字节 movl   %esp, %ebp         ebp也指向esp指的位置 movl   8(%ebp), %eax    将ebp变址寻址8即向上移动8个字节,

Debug查看Struts2中ExceptionMappingInterceptor拦截器怎么把ExceptionHolder放入值栈中,以及理解拦截器的工作原理。。。

1.小案例代码: jsp界面: <body> <s:property value="exceptionStack"/><br> <s:property value="exception"/><br> <s:property value="exception.getMessage"/> <form action="product-details.action&q

Linux内核分析第一周-通过分析汇编代码理解计算机是如何工作的

首先,我们先写一个简单的C语言程序,如下: int g(int x) { return x +3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; } 然后我们把源程序编译成一个汇编语言,指令如下 gcc -S -o main.s main.c -m32 得到结果,删去符号项得到结果 首先,main函数为该程序的开始入口,所以从main函数开始分析: 在line 17 ~ line 18是进入main函数(ent