Dockerfile构建镜像的过程
 
1、从base镜像运行一个容器
2、执行一条指令,对容器进行修改
3、执行类似 docker commit的操作,生成一个新的镜像层
4、Docker在基于刚刚提交的镜像层运行一个新的容器
5、重复步骤 2-4 ,直到Dockerfile中所有指令执行完毕
 
 
root@docker-lab:~/docker# ls
Dockerfile
root@docker-lab:~/docker# cat Dockerfile
FROM centos
RUN uptime
RUN touch tmpfile
RUN ls /mnt2
root@docker-lab:~/docker# docker build -t centos-t1 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
latest: Pulling from library/centos
a02a4930cb5d: Already exists
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest
---> 1e1148e4cc2c
Step 2/4 : RUN uptime
---> Running in f05e49595929
06:44:46 up 204 days, 22:07,  0 users,  load average: 0.02, 0.02, 0.00
Removing intermediate container f05e49595929
---> be8d26615578
Step 3/4 : RUN touch tmpfile
---> Running in ada319df9d43
Removing intermediate container ada319df9d43
---> acaccd0c45d3
Step 4/4 : RUN ls /mnt2    #    第一次build报错, ls /mnt2 执行失败
---> Running in 590fc8e2360c
ls: cannot access /mnt2: No such file or directory
The command '/bin/sh -c ls /mnt2' returned a non-zero code: 2
root@docker-lab:~/docker# docker build -t centos-t1 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
---> 1e1148e4cc2c    #    第二次build直接使用了之前成功build镜像层的缓存
Step 2/4 : RUN uptime
---> Using cache
---> be8d26615578    #    第二次build直接使用了之前成功build镜像层的缓存
Step 3/4 : RUN touch tmpfile
---> Using cache
---> acaccd0c45d3    #    第二次build直接使用了之前成功build镜像层的缓存
Step 4/4 : RUN ls /mnt2    #    第二次build报错, ls /mnt2 执行失败
---> Running in b17908bf7059
ls: cannot access /mnt2: No such file or directory
The command '/bin/sh -c ls /mnt2' returned a non-zero code: 2
root@docker-lab:~/docker# docker images -a    #    此处可以看到build前三个成功步骤生成的镜像层
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              be8d26615578        34 seconds ago      202MB
<none>              <none>              acaccd0c45d3        34 seconds ago      202MB
centos              latest              1e1148e4cc2c        4 weeks ago         202MB
root@docker-lab:~/docker# docker run -it acaccd0c45d3    #    进入最后一次成功的镜像层,查看失败原因,没有 /mnt2 目录
[root@9ae841c96c62 /]# ls /mnt2
ls: cannot access /mnt2: No such file or directory
[root@9ae841c96c62 /]# ls /
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp      usr
bin                etc  lib   media  opt  root  sbin  sys  tmpfile  var
[root@9ae841c96c62 /]#
 
 

015、调试Dockerfile(2019-01-04 周五)的更多相关文章

  1. 第 3 章 镜像 - 015 - 调试 Dockerfile

    如何 debug Dockerfile 通过 Dockerfile 构建镜像的过程 从 base 镜像运行一个容器 执行命令对容器做修改 执行类似 docker commit 的操作,生成一个新的镜像 ...

  2. 2019.01.04 洛谷P4719 【模板】动态dp(链分治+ddp)

    传送门 ddpddpddp模板题. 题意简述:给你一棵树,支持修改一个点,维护整棵树的最大带权独立集. 思路: 我们考虑如果没有修改怎么做. 貌似就是一个sbsbsb树形dpdpdp,fi,0f_{i ...

  3. 2019.01.04 bzoj2962: 序列操作(线段树+组合数学)

    传送门 线段树基础题. 题意:要求维护区间区间中选择ccc个数相乘的所有方案的和(c≤20c\le20c≤20),支持区间加,区间取负. 由于c≤20c\le20c≤20,因此可以对于每个线段树节点可 ...

  4. 2019.01.04 洛谷 P4721 【模板】分治 FFT

    传送门 如同题目所描述的一样,这是一道板题. 题意简述:给你一个数组g1,2,...ng_{1,2,...n}g1,2,...n​并定义f0=1,fi=∑j=1ifi−jgjf_0=1,f_i=\su ...

  5. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  6. 调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)

    包括 Dockerfile 在内的任何脚本和程序都会出错.有错并不可怕,但必须有办法排查,所以本节讨论如何 debug Dockerfile. 先回顾一下通过 Dockerfile 构建镜像的过程: ...

  7. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  8. AWS re:Invent(2019.01.09)

    时间:2019.01.09地点:北京国际饭店

  9. 2019/01/17 基于windows使用fabric将gitlab的文件远程同步到服务器(git)

    觉得django项目把本地更新push到gitlab,再执行fabric脚本从gitlab更新服务器项目挺方便的,当然从本地直接到服务器就比较灵活. 2019/01/17 基于windows使用fab ...

随机推荐

  1. 【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)

    原题题解和数据下载 Usaco2007 Jan 题意 小牛参加了n个测试,第i个测试满分是\(p_i\),它的得分是\(t_i\).老师去掉\(t_i/p_i\)最小的d个测试,将剩下的总得分/总满分 ...

  2. linux中$#,$0,$1,$2,$@,$*,$$,$?的含义

    $# 是传给脚本的参数个数$0 是脚本本身的文件名$1 是脚本后接的第一个参数$2 是脚本后接的第二个参数$@ 是传给脚本的所有参数列表,"$1" "$2" & ...

  3. Android如何着色字符串的特定部分

    文章选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文探讨Android如何着色字符串的特定部分. ...

  4. HDU6341 Let Sudoku Rotate (杭电多校4J)

    给一个由4*4个4*4的小格组成数独,这些数独是由一个块逆时针旋转得来的,所以要还原的话就模拟出顺时针的过程,先把里面的字母转化成数字,然后从第一个块开始枚举,每个dfs和之前枚举的已经满足条件的块, ...

  5. poj 3666 Making the Grade(离散化+dp)

    Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...

  6. Arch Linux中使用VMware Workstation不能打开vmmon内核模块

    打开VMware Workstation出现错误提示:Could not open /dev/vmmon: No such device.Please make sure that the kerne ...

  7. 纯原生JS大图轮播

    CSS部分: CSS: <style type="text/css"> #banner { position: relative; width: 500px; heig ...

  8. 【洛谷P2215】上升序列

    题目大意:给定一个长度为 N 的序列,有 M 个询问,每个询问要求输出长度为 L 的上升子序列,若不存在,输出 impossible,若存在,输出下标字典序最小的一个. 题解:考虑到若 L 大于整个序 ...

  9. (六)Oracle 的 oracle表查询关键字

    参考:http://www.hechaku.com/Oracle/oracle_tables2.html 1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们 ...

  10. react-native实现电影列表

    页面运行效果 代码: import React, { Component } from "react"; import { Image, FlatList, StyleSheet, ...