《第一本Docker书》
Docker简介
- Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速。
- Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构。
- Docker的核心组件包括:
- Docker客户端与服务器:Docker是一个C/S架构,客户端连接到服务端(Docker守护进程)执行相关命令,Docker提供CLI和RESTful API两种控制方式。
- Docker镜像:用户基于镜像来运行容器,镜像是基于联合(Union)文件系统的一种层式结构,由一系列指令一步一步构建出来。
- Registry:保存用户构建的镜像,类似Maven的中央仓库。
- 容器:容器基于镜像启动,其中运行应用程序。
容器
- docker run将运行指定镜像的容器,如果本地不存在该进行则去Docker Hub Registry下载。
- 运行的容器的主机名就是容器的ID,是一个UUID,在docker命令知道容器ID时可以类似git那样只写前几位。
- 正常情况下当退出容器时该容器就已经停止了。
- 容器默认不会打开端口,需要在docker run -p/-P
- -P可以在宿主机上随机选择一个位于49153~65535中的某个端口与容器内部开放端口映射
- -p则自己指定映射,完整格式为 宿主ip:宿主port:docker port 其中前两者可以省略,省略则自动分配
镜像
- Docker镜像是由文件系统叠加而成。
- 最底层是引导文件系统,即bootfs,启动后会被移到内存中而引导文件系统则会被卸载。
- 第二层是root文件系统rootfs,是一种或多种操作系统。
- 后续就是利用联合加载(union mount)技术在root层加载更多的只读文件。
联合加载指一次同时加载多个文件系统,但是外面看起来只能看到一个文件系统。
- 最顶端是一个可读写文件系统,用于Docker中的应用运行。修改一个文件时这个文件首先会从该读写层下面的只读层复制到读写层,修改后只读版本依然存在,但是被上层的读写层覆盖,这即写诗复制(copy-on-write)
- Docker镜像中除了顶层的文件系统其他均为只读。
Register
- 仓库名后加冒号和标签名指定仓库中某一唯一镜像。
ubuntu:12.10
- 仓库包括用户仓库(user repository)和顶层仓库(top-level repository)
- 用户仓库命名由用户名和仓库名组成,如
suolu/ubuntu - 顶层仓库由Docker公司和优质基础镜像厂商管理,用户基于这些镜像进行构建自己的镜像。
- pull镜像时如果不指定镜像的tag,则默认下载latest标签的镜像。
Dockerfile
- 一般不推荐用docker commit构建镜像而用Dockerfile的定义文件和docker build命令构建镜像。
- 保存Dockerfile的目录即构建环境,Docker称为上下文或者构建上下文,Docker会在构建镜像时将构建上下文和该上下文中的文件和目录上传到Docker守护进程。
- Dockerfile中执行流程如下:
- Dock而从基础镜像运行一个容器
- 执行一条指令,对容器做修改
- 执行类似docker commit的操作,提交一个新的镜像层
- Docker再基于刚刚提交的镜像层运行一个新容器
- 执行Dockerfile中的下一条指令
- 构建时每执行一条指令都会返回一个镜像ID,当构建失败可通过docker run该镜像做调试。
- 构建过程中之前的镜像层都可以看作缓存,当重新构建时可以从失败命令的前一个镜像层开始,除非build命令设置--no-cache。
格式
FROM,指定基础镜像,后续指令均基于该镜像
MAINTAINER,指定作者以及邮箱等
RUN,该指令会在shell中使用通过
/bin/sh -c来执行EXPOSE,告诉Docker服务端容器暴露的端口号,供互联系统使用。
CMD,指定容器启动时要运行的命令。同一个Dockerfile只认最后一个,且docker run中的命令将覆盖CMD。
CMD ["/bin/bash"] //默认启动容器打开一个shell
- ENTRYPOINT,与CMD类似,但是该指令提供的命令不会被docker run覆盖,docker run中命令将作为该指令中的命令的参数。
- WORKDIR,为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。
- ENV,构建镜像过程中增加环境变量。
- USER,指定该镜像启动时所使用的用户。
- VOLUME,向镜像创建容器添加卷。
- ADD,将构建环境下的文件和目录复制到镜像中。对于源是tar或RUL能自动解析。
- COPY,与ADD类似,但是其只是简单的复制,不会做其他操作。
- ONBUILD,添加触发器,其执行时机在于被当作其他基础镜像时,在FROM后马上执行。
《第一本Docker书》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- MFC知识点
1.获取应用程序实例句柄: AfxGetInstanceHandle(); 2.获取屏幕桌面窗口指针; GetDesktopWindow();
- 笔记:CSS hack的学习与了解…
更新时间:2015.05.12 兼容范围: IE:6.0+,FireFox:2.0+,Opera 10.0+,Sarari 3.0+,Chrome 参考资料: 各游览器常用兼容标记一览表: 标记 I ...
- Unicode 字符
Unicode是计算机可以支持这个星球上多种语言的秘密武器.在Unicode之前,用的都是ASCII. ASCII码非常简单,每个英文都是7位二进制的方式存贮在计算机内,其范围是32~126.当用户在 ...
- (最长公共子序列 暴力) Common Subsequence (poj 1458)
http://poj.org/problem?id=1458 Description A subsequence of a given sequence is the given sequence w ...
- kepware http接口 c语言 python
读取某变量的值(http.client import http.client conn = http.client.HTTPConnection("127,0,0,1") head ...
- 3.java面向对象编程三大特性之多态
面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...
- poj 3463/hdu 1688 求次短路和最短路个数
http://poj.org/problem?id=3463 http://acm.hdu.edu.cn/showproblem.php?pid=1688 求出最短路的条数比最短路大1的次短路的条数和 ...
- js-图片时间(倒计时)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- Concurrency Programming Guide 并发设计指引(二)
以下翻译是本人通过谷歌工具进行翻译,并进行修正后的结果,希望能对大家有所帮助.如果您发现翻译的不正确不合适的地方,希望您能够发表评论指正,谢谢.转载请注明出处. Concurrency and App ...
- CAD2007_DWG转PDF
在使用CAD时,我们可能经常要将DWG转PDF格式,操作步骤如下: 1)打开需要转换的DWG文件 2)文件---->页面设置管理器----->修改----->(到“页面设置--模型” ...