1、这个 PDF 算是学习 docker 的一个小总结,所有文章摘自我在 csdn的博客专栏:http:/ docker官方网站,翻译了一些个人认为比较重要的文章,后面实战部分是自己一些实验的过程以及目前在公司部署 docker 过程中的一些感受。个人水平有限,如果您发现问题,请直接发邮件给我 dwj_,或加 QQ 讨论群 341410255 我会认真回复您!WaitFish 2014-09-03注:下文以黄色标记的内容是一些提示和注意事项。以红色字体标注的都是一些需要执行的命令行。如:rootubuntudocker:# docker psCONTAINER ID IMAGE COMMAND C
2、REATED STATUS PORTS NAMES58b043aa05eb desk_hz:v1 “/startup.sh“ 5 days ago Up 2 seconds 5900/tcp, 6080/tcp, 22/tcp yanlx使用这个命令来查看当前运行的容器列http:/ dwj_ QQ群 :341410255 1/50内容目录一、为什么要使用 docker? .41、快速交付应用程序 .42、更容易部署和扩展 .43、效率更高 .44、快速部署也意味着更简单的管理 .4二、 Docker 的体系结构 .51、 Docker 的内部组件 .52、 Docker image的工作原理
3、 .63、 Docker 仓库 .64、 Docker 容器 .65、 Docker 底层技术 .7三、 Docker 安装 .81、 ubuntu14.04安装 docker.82、 ubuntu12.04安装 docker.83、 centos67系列安装 docker.9四、 Docker image详细介绍 .101、获取 images.112、查找 images.113、下载 images.124、创建我们自己的 images.121)第一个方法:使用 docker commit 来扩展一个 image.132)第二个办法:从 dockerfile 来创建 image.135、使用
4、docker push上传 images.166、用 dcoker rmi 移除本地 images.16五、 Docker 中的网络介绍 .171、端口映射 .172、 docker 中的容器互联 -linking 系统 .181)容器的命名系统 .182)容器互联 .18六、 docker高级网络配置 .211、快速配置指南 .212、配置 DNS.223、容器之间的通信 .234、映射一个容器端口到宿主主机 .255、定制 docker0.266、创建自己的桥接 .277、 Docker 如何连接到容器? .288、工具和示例 .309、创建一个点到点连接 .30七、 Docker 数据管
5、理 .321、 Data volumes 数据卷 .321)添加一个数据卷 .322)挂载一个主机目录作为数据卷 .323)挂载一个宿主主机文件作为数据卷 .33http:/ dwj_ QQ群 :341410255 2/502、 Data Volume Container 数据卷容器 .333、利用 Data Volume Container 来备份、恢复、移动数据卷 .33八、容器安全 .351、 Kernel Namespaces.352、 Control Groups.353、 Docker Daemon Attack Surface.354、 Linux Kernel Capabili
6、ties.365、 Other Kernel Security Features.376、结论 .37九、 Docker 实战从无到有部署局域网 docker(解决墙的问题) .381、安装 docker.382、从文件系统创建一个 image镜像 .383、创建私有仓库 .384、在私有仓库上传、下载、搜索 images.39十、 Docker 实战 -在 Docker 中使用 Supervisor来管理进程 .421、 dockerfile.422、 supervisor配置文件内容 .433、使用方法 .434、可以使用这个方法创建一个只有 ssh服务基础 image.43十一、 Doc
7、ker 实战创建 tomcat/weblogic集群 .441、安装 tomcat镜像 .442、安装 weblogic 镜像 .453、 tomcat/weblogic 镜像的使用 .451)存储的使用 .452)tomcat 和 weblogic 集群的实现 .45十二、 Docker 实战多 台物 理主机之间的容器互联( 暴露 容器到真实网络中) .471、 拓扑图 .482、 ubuntu 示例 .48十三、 Docker 实战 -中小 企业 docker 环境搭 建 .50http:/ dwj_ QQ群 :341410255 3/50Docker 学习 手册 -v1.0一、为什么要使
8、用 docker ?1、快速交付应用程序? 开 发 者 使用一个标 准 的 image 来构建 开 发容器, 开 发 完成 之后,系统管理 员就 可以使用这个容器来部署 代码? docker可以快速创建容器,快速 迭代 应用程序, 并让整 个过程可 见 ,使 团队 中的 其他成员 更容易理解应用程序是如何创建和工作的。? docker容器 很轻 ! 很 快!容器的 启 动 时 间是 次秒 级的, 节约开 发、 测试 、部署的 时 间2、更容易部署和扩展? docker容器可以在 几乎 所有的 环境 中运行, 物 理机、 虚拟 机、公有 云 、私有 云 、个人 电脑 、服务器 等等 。? doc
9、ker容器 兼 容 很 多平 台 ,这 样就 可以 把 一个应用程序从一个平 台迁 移到 另外 一个。3、效率更高? docker容器 不 需要 hypervisor, 他 是内 核 级的 虚拟化 。4、快速部署也意味着更简单的管理? 通 常 只需要小小的 改变就 可以 替代 以 往巨型 和 大量 的更 新 工作。http:/ dwj_ QQ群 :341410255 4/50二、 Docker 的体系结构docker 使用 C/S 架 构, docker daemon作为 server端接受 client 的请 求 , 并处 理(创建、运行、分发容器), 他 们可以运行在一个机器上,也通过 s
10、ockerts或 者 RESTful API 通信。Docker daemon一 般 在宿主主机后 台 运行,用 户 使用 client 而 直接 跟 daemon交互。 Docker client以系统 做 bin 命令的 形式 存在,用 户 用 docker命令来 跟 docker daemon交互。1、 Docker 的内部组件docker 有三个内部组件? docker images? docker registries? docker containersDocker imagesdocker images 就 是一个只 读 的 模板 。比如:一个 image 可以 包含 一个 ub
11、untu 的 操 作系统, 里 面安装了http:/ dwj_ QQ群 :341410255 5/50HostContainer 1Container 2Container 3Container .Docker Clientdock er pulldock er rundock er .Docker IndexDocker Daemonapache或 者你 需要的应用程序。 images可以用来创建 docker containers, docker 提 供 了一个 很 简单的机制来创建 images或 者 更 新 现有的 images, 你甚至 可以直接从 其他 人 那里 下载一个 已经做好
12、 的 imagesDocker registriesDocker registries 也 叫 docker 仓库, 它 有公有仓库和私有仓库 2 种形式 , 他 们都可以用来 让你 上传和下载 images。公有的仓库也 叫 Docker Hub。 它 提 供 了一个 巨大 的 image库可以 让你 下载, 你 也可以在自己的局域网内建一个自己的私有仓库。Docker containersDocker containers也 叫 docker容器,容器是从 image 镜像创建的。 它 可以 被启 动、 开始 、 停止 、 删 除。每 个容器都是 相 互 隔离 的、安全的平 台 。2、 D
13、ocker image 的工作原理每 个 docker 都有 很 多层 次 构 成 , docker使用 union file systems 将 这些 不同 的层结 合 到一个image中 去 。AUFS (AnotherUnionFS) 是一 种 Union FS, 简单来 说就 是 支持将不同 目录挂载到 同 一个 虚拟 文件系统下 (unite several directories into a single virtual filesystem)的文件系统 , 更进一 步 的理解 , AUFS支持 为 每 一个 成员 目录 (类似 Git Branch)设 定 readonly、
14、readwrite 和 whiteout-able 权 限 , 同时 AUFS里 有一个 类似 分层的 概念 , 对 readonly 权 限的 branch 可以 逻辑 上进行 修改 (增量 地 , 不影响 readonly 部分的 )。通 常 Union FS 有 两 个用 途 , 一方面可以实现 不借助 LVM 、 RAID 将 多个 disk 挂到 同 一个目录下 , 另 一个更 常 用的 就 是 将 一个 readonly 的 branch 和一个 writeable 的 branch 联 合 在一 起 , Live CD 正 是基 于此 方法可以 允许 在 OS image 不变
15、的基础上 允许 用 户 在 其 上进行一些 写操 作。 Docker 在 AUFS 上构建的 container image 也 正 是如 此 。3、 Docker 仓库docker 仓库用来 保 存我们的 images,当我们创建了自己的 image之后我们 就 可以使用 push命令 将它 上传到公有或 者 私有仓库,这 样 下 次 要在 另外 一 台 机器上使用这个 image 时候 ,只需要从仓库上 pull下来 就 可以了。4、 Docker 容器当我们运行 docker run -i -t ubuntu /bin/bash命令 时 , docker 在后 台 运行的 操 作如下:?
16、 如果本地有 ubuntu这个 image就 从 它 创建容器, 否则 从公有仓库下载? 从 image创建容器? 分配一个文件系统, 并 在只 读 的 image层 外 面挂载一层可 读写 的层? 从宿主主机配置的网桥接口中桥接一个 虚拟 接口到容器中 去http:/ dwj_ QQ群 :341410255 6/50? 从地 址池 配置一个 ip 地 址 给容器? 执行 你 指定的程序,在这 里启 动一个 /bin/bash进程? -i -t 指定标 准输入 和 输出5、 Docker 底层技术docker 底层的 2 个 核心 技术分 别 是 Namespaces和 Control gro
17、ups以下内容摘自 InfoQ Docker,自 1.20版 本 开始 docker已经抛开 lxc, 不 过下面的内容 对于 理解 docker还 是有 很大帮助 。1)pid namespace不同 用 户 的进程 就 是通过 pid namespace隔离开 的, 且不同 namespace 中可以有 相同 pid。所有的LXC 进程在 docker中的 父 进程为 docker 进程, 每 个 lxc 进程具有 不同 的 namespace。 同时由于允许嵌套 , 因此 可以 很 方 便 的实现 Docker in Docker。2) net namespace有了 pid names
18、pace, 每 个 namespace中的 pid 能够相 互 隔离 , 但 是网络端口 还 是 共享 host的端口。网络 隔离 是通过 net namespace实现的, 每 个 net namespace有 独立 的 network devices, IP addresses, IP routing tables, /proc/net 目录。这 样每 个 container的网络 就能隔离开 来。 docker 默 认 采用 veth 的方 式将 container 中的 虚拟 网 卡同 host上的一个 docker bridge: docker0连接在一 起 。3) ipc name
19、spacecontainer中进程交互 还 是 采 用 linux 常见 的进程间交互方法 (interprocess communication - IPC), 包括常见 的信 号量 、 消息队 列和 共享 内存。 然而同 VM 不同 的是, container 的进程间交互实 际 上 还 是host上具有 相同 pid namespace中的进程间交互, 因此 需要在 IPC 资源申 请 时 加 入 namespace信 息 - 每 个 IPC 资源 有一个 唯 一的 32 位 ID。4) mnt namespace类似 chroot, 将 一个进程 放 到一个 特 定的目录执行。 mnt
20、 namespace允许不同 namespace的进程看到的文件结构 不同 ,这 样每 个 namespace 中的进程所看到的文件目录 就被隔离开 了。 同 chroot 不同 ,每 个 namespace中的 container在 /proc/mounts的信 息 只 包含 所在 namespace的 mount point。5) uts namespaceUTS(“UNIX Time-sharing System“) namespace允许每 个 container拥 有 独立 的 hostname和 domain name, 使 其 在网络上可以 被视 作一个 独立 的 节 点 而非
21、Host 上的一个进程。6) user namespace每 个 container 可以有 不同 的 user 和 group id, 也 就 是 说 可以在 container内部用 container内部的用 户 执行程序 而非 Host 上的用 户 。Control groups主要用来 隔离各 个容器和宿主主机的 资源 利用。http:/ dwj_ QQ群 :341410255 7/50三、 Docker 安装官方网站上有 各 个 linux 发行 版 的安装指南,这 里就写 下 centos和 ubuntu 的安装。1、 ubuntu14.04 安装 docker$ sudo ap
22、t-get update$ sudo apt-get install docker.io$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker$ sudo sed -i $acomplete -F _docker docker /etc/bash_completion.d/docker.io如果使用 操 作系统自 带包 安装 docker ,使用上面的办法,安装的 版 本是 0.9.1 (不 建 议 , 因 为 1.0 生产版 本 已经 发 布 ,下面介绍安装方法)如果要安装 最新 的 docker 版 本, 那 么需要安装 https支持$apt-get install apt-transport-https$ sudo apt-key adv -keyserver hkp:/:80 -recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9$ /etc/apt/sources.list.d/docker.list“$ sudo apt-get update$ sudo apt-get install lxc-docker这 样就 安装 完毕 了。2、 ubu