《第一本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 安装并启动 ...
随机推荐
- C#的math类的全部运算方法
Abs 返回指定数字的绝对值.Acos 返回余弦值为指定数字的角度.Asin 返回正弦值为指定数字的角度.Atan 返回正切值为指定数字的角度.Atan2 返回正切值为两个指定数字的商的角度.BigM ...
- Eclipse sysout 和 fore 不起作用
Content Assist ↑ 这是主角,可以快速生成语句. sysout 快捷键之后生成了 System.out.println(); fore 快捷键之后生成了 for(String arg : ...
- 第74讲:从Spark源码的角度思考Scala中的模式匹配
今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,.... ...
- 转载:$(function() {}),即$(document).ready(function(),什么时候执行?以此为准,真理
转载:https://blog.csdn.net/Ideality_hunter/article/details/77935656 $(function() { //执行操作 }); $(functi ...
- 1.messager消息提示框
$表示全局对象jquery,此处的alert是用div写的,不是真正的alert.
- 为什么有时候在mac中启动一些应用时会跳的Windows中
因为有些格式是尽在windows情况下才支持的,如果mac上安装了虚拟的Windows,则执行此类应用(例如:.bat 文件)时就会启动Windows虚机
- EBS 取消“是否提交另一项请求”提示
在使用EBS提交请求后,总要弹出“是否提交另一项请求”的提示,而我们往往选择“否”,这个提示就显得多余. 为了减轻这“多一步”的负担,取消“是否提交另一项请求”的提示,设置方法如下: 以下profil ...
- UNIGUI接收普通消息和被动回复用户消息
接收普通消息和被动回复用户消息 用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复 ...
- [FMX]获取控件样式中的指定项目以便进行调节
[FMX]获取控件样式中的指定项目以便进行调节 2017-03-26 • C++ Builder.Delphi.教程 • 暂无评论 • swish •浏览 650 次 FMX 的样式丰富了我们的设计, ...
- delphi IsIPAdress 非正则表达式验证IP的方法
function IsIPAdress(const Value:String):Boolean; var n,x,i: Integer; Posi:Array[..]of Integer; Oktet ...