《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

时间:2021-11-22 13:57:11

docker最底端是一个引导文件系统,即bootfs。

第二层是root文件系统rootfs,位于引导文件系统之上。

在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查之后,它才会被切换为读写模式。但是在docker里,root文件系统永远只能是只读状态,并且docker利用联合加载技术又会在root文件系统层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统。联合加载将各层文件系统叠加到一起,这样最终文件系统会包含所有底层的文件和目录。

docker将这样的文件系统成为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像成为父镜像,最底部的叫做基础镜像。

当docker第一次启动一个容器时,初始的读写层是空的。当文件系统变化时,这些变化都会引用到这一层上。比如,如果想修改一个文件,这个文件会从该读写层下面的只读层复制到读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。这种机制被成为写时复制。

docker images #查看所有的docker镜像

本地镜像都保存在/var/lib/docker下,所有的容器都保存在/var/lib/docker/containers

docker pull ubuntu #拉去镜像
docker run -it --name 容器名称 ubuntu:12.04 /bin/bash #可以给镜像加上版本

镜像分用户镜像和顶层镜像。

docker images fedora #查看指定的镜像列表
docker search puppet #查找指定的镜像

  

构建镜像

docker login #登录(国内访问docker hub好慢啊)
docker commit 本地容器ID 用户名/容器名 #提交

commit 还可以附带一些别的参数。

这本书里并不推荐使用docker commit的方法构建镜像。

使用Dockerfile

Docker 大体按照如下流程执行Dockerfile中的指令。

  • Docker 从镜像运行一个容器。
  • 执行一条指令,对容器做出修改。
  • 执行类似docker commit 的操作,提交一个新的镜像层。
  • Docker再基于刚提交的镜像运行一个新容器
  • 执行Dockerfile的下一条指令,知道所有的指令都执行完毕。
docker build -t="用户名/镜像名" #基于Dockerfile构建容器

也可以通过git仓库源地址指定Dockerfile的位置。

如果构建出错,可以通过docker run 命令来基于这次构建到目前为止已经成功的最后一步创建一个容器。

--no-cache 避免使用缓存

docker history 镜像ID #获取镜像的构建历史

Docker 可以在宿主机上随机选择一个49000-49900的一个比较大的端口号来映射到80端口上。

可以通过docker port 容器ID 新的端口号 命令来设置端口映射

也可以在运行docker run 时指定 -p 宿主端口:容器端口

docker run -d -p 8080:80 --name static_web username/image \
nginx -g "daemon off" #这一句不是太懂,对nginx不是太了解

-p 也可以将端口绑定到特定的IP地址上,如 -p 127.0.0.1:8080:80

-P 可以将容器中EXPOSE的端口全部公开

《第一本docker书》第4章 使用docker镜像和仓库 读书笔记的更多相关文章

  1. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. 《TCP&sol;IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. 《第一本docker书》- 第一章笔记

    环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...

  4. Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

    第一章 Thread导论 为何要用Thread ? 非堵塞I/O      I/O多路技术      轮询(polling)      信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...

  5. Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记

    第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...

  6. Javascript模式(第三章字面量与构造函数)------读书笔记

    一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ...

  7. 第一章连通性问题-----algorithm in C 读书笔记

    首先不得不吐槽一下翻译的质量,霍红卫....你给我站出来,不打死你,只想问你一下,你当年四级过了吗? 问题描述 输入两个整数,代表两个节点,如果这两个整数没有建立连接(这包括直接连接和通过其他节点连接 ...

  8. 《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记

    一.为什么GUI是单线程化 传统的GUI应用程序通常都是单线程的. 1. 在代码的各个位置都须要调用poll方法来获得输入事件(这样的方式将给代码带来极大的混乱) 2. 通过一个"主事件循环 ...

  9. 第11章 UDP:用户数据报协-----读书笔记

    1.分片应用程序只关心IP数据报的长度,如果它超过MTU值,那么就要对数据包进行分片. 2.UDP首部字段图: (16位源端口号+16位目端口号+16位UDP长度+16位UDP校验和+数据) 3.UD ...

随机推荐

  1. 【转】 Android WebView内容宽度自适应

    我们平常在项目中有可能会遇到网页的内容是通过json数据传递到app上面用WebView来显示的,这时候我们通常都要调整内容的总宽度不超过父容器的宽度,这样子用户可以不用左右滑动就可以看到全部的内容. ...

  2. ImageView设置边框的两种方式

    转载:http://www.2cto.com/kf/201308/239945.html package cc.testimageviewbounds; import android.os.Bundl ...

  3. Allegro学习&lpar;http&colon;&sol;&sol;www&period;asmyword&period;com&sol;forum&period;php&quest;mod&equals;forumdisplay&amp&semi;fid&equals;86&rpar;

    一.资源 1.网站推荐www.eda365.com,里面有很多有用的东西:当然还有官方代理商的网站http://www.pspice.com.cn/: 2.视频教程:有库源电气的视频教程,还有在www ...

  4. LeetCode 263

    Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are posi ...

  5. C&num;&colon;vs2010无法打开vs2012创建的项目

    vs低版本打开高版本创建的项目时会提示"选择的文件是解决方案文件,但是用此应用程序的较新版本创建的,无法打开" 解决办法: 写字板打开解决方案sln文件 将其改成你现在用的vs版本 ...

  6. 结构-行为-样式-Bootstrap笔记

    1.自上而下的内容布局,中间内容可变,应该用: <div class=" container-fluid"> <div class=" row&quot ...

  7. Mysql安装和登录相关操作

    一.mysql的下载和安装 1.下载链接地址 http://dev.mysql.com/downloads/mysql/ 安装如下操作进行下载. 2.mysql数据库安装(Windows环境) 1.解 ...

  8. 流式大数据计算实践(6)----Storm简介&amp&semi;使用&amp&semi;安装

    一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...

  9. Svn在工作中的实践感悟

    Svn是一款管理项目代码的版本控制系统,是基于集中式的版本控制系统.在工作中,由于实际开发工作的需要,部门是使用Svn来管理日常的项目开发任务.使用这么长时间了,来谈谈对Svn的感悟. 首先,说下工作 ...

  10. &lt&semi;转载&gt&semi; UE4的Actor类C&plus;&plus;简单尝试

    原文链接:   简书小小酥XX https://www.jianshu.com/p/2bcc80f0e789 一开始我用了一段时间UE4,发现如果用蓝图系统真的不太适合我的风格.因为之前一直都是用Un ...