File tree Expand file tree Collapse file tree 10 files changed +17
-17
lines changed Expand file tree Collapse file tree 10 files changed +17
-17
lines changed Original file line number Diff line number Diff line change 11## 配置 DNS
2- Docker 没有每个容器专门定制镜像 ,那么怎么自定义配置容器的主机名和 DNS 配置呢?
2+ Docker 没有为每个容器专门定制镜像 ,那么怎么自定义配置容器的主机名和 DNS 配置呢?
33秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件。
44
55在容器中使用 mount 命令可以看到挂载信息:
Original file line number Diff line number Diff line change @@ -13,7 +13,7 @@ RUN apt-get update
1313RUN apt-get upgrade -y
1414```
1515
16- 安装 supervisor
16+ ### 安装 supervisor
1717安装 ssh、apache 和 supervisor。
1818```
1919RUN apt-get install -y openssh-server apache2 supervisor
@@ -62,4 +62,4 @@ $ sudo docker run -p 22 -p 80 -t -i test/supervisords
6262```
6363使用 ` docker run ` 来启动我们创建的容器。使用多个 ` -p ` 来映射多个端口,这样我们就能同时访问 ssh 和 apache 服务了。
6464
65- 可以使用这个方法创建一个只有 ssh 服务的基础镜像,之后创建镜像可以以这个镜像为基础来创建
65+ 可以使用这个方法创建一个只有 ssh 服务的基础镜像,之后创建镜像可以使用这个镜像为基础来创建
Original file line number Diff line number Diff line change 11## 创建 tomcat/weblogic 集群
22### 安装 tomcat 镜像
3- 准备好需要的 jdk、tomcat 等软件放到 home 目录下面,启动一个虚拟机
3+ 准备好需要的 jdk、tomcat 等软件放到 home 目录下面,启动一个容器
44```
55docker run -t -i -v /home:/opt/data --name mk_tomcat ubuntu /bin/bash
66```
7- 这条命令挂载本地 home 目录到虚拟机的 /opt/data 目录,虚拟机内目录若不存在 ,则会自动创建。接下来就是 tomcat 的基本配置,jdk 环境变量设置好之后,将 tomcat 程序放到 /opt/apache-tomcat 下面
7+ 这条命令挂载本地 home 目录到容器的 /opt/data 目录,容器内目录若不存在 ,则会自动创建。接下来就是 tomcat 的基本配置,jdk 环境变量设置好之后,将 tomcat 程序放到 /opt/apache-tomcat 下面
88编辑 /etc/supervisor/conf.d/supervisor.conf 文件,添加 tomcat 项
99```
1010[supervisord]
@@ -54,7 +54,7 @@ CMD ["/usr/bin/supervisord"]
5454
5555 -v, --volume=[] Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)
5656
57- 将本地磁盘映射到虚拟机内部,它在主机和虚拟机容器之间是实时变化的 ,所以我们更新程序、上传代码只需要更新物理主机的目录就可以了
57+ 将本地磁盘映射到容器内部,它在主机和容器之间是实时变化的 ,所以我们更新程序、上传代码只需要更新物理主机的目录就可以了
5858
5959#### tomcat 和 weblogic 集群的实现
6060tomcat 只要开启多个容器即可
Original file line number Diff line number Diff line change @@ -37,7 +37,7 @@ root@78e82f680994:/#
3737```
3838
3939###利用 Dockerfile 来创建镜像
40- 使用 ` docker commit ` 来扩展一个镜像比较简单,但它不容易在一个团队中分享它 。我们可以使用 ` docker build ` 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。
40+ 使用 ` docker commit ` 来扩展一个镜像比较简单,但是不方便在一个团队中分享 。我们可以使用 ` docker build ` 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。
4141
4242新建一个目录和一个 Dockerfile
4343```
Original file line number Diff line number Diff line change @@ -35,7 +35,7 @@ $ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
3535```
3636
3737#### 本地安装
38- 对于 Ubuntu 或 CentOS 等发型包 ,可以直接通过源安装。
38+ 对于 Ubuntu 或 CentOS 等发行版 ,可以直接通过源安装。
3939* Ubuntu
4040```
4141$ sudo apt-get install -y build-essential python-dev libevent-dev python-pip liblzma-dev
Original file line number Diff line number Diff line change 11## 控制组
22控制组是 Linux 容器机制的另外一个关键组件,负责实现资源的审计和限制。
33
4- 它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当发生在容器内的资源压力不会连累主机系统 。
4+ 它提供了很多有用的特性;以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统 。
55
66尽管控制组不负责隔离容器之间相互访问、处理数据和进程,它在防止拒绝服务(DDOS)攻击方面是必不可少的。尤其是在多用户的平台(比如公有或私有的 PaaS)上,控制组十分重要。例如,当某些应用程序表现异常的时候,可以保证一致地正常运行和性能。
77
Original file line number Diff line number Diff line change @@ -10,4 +10,4 @@ Docker 底层的核心技术包括 Linux 上的名字空间(Namespaces)、
1010要想实现虚拟化,除了要实现对内存、CPU、网络IO、硬盘IO、存储空间等的限制外,还要实现文件系统、网络、PID、UID、IPC等等的相互隔离。
1111前者相对容易实现一些,后者则需要宿主机系统的深入支持。
1212
13- 随着 Linux 系统对于名字空间功能的完善实现,程序员已经可以实现上面的所有需求,让某些进程在彼此隔离的名字空间中运行。大家虽然都共用一个内核和某些运行时环境(例如一些系统命令和系统库),但是彼此却看不到,都以为系统中只有自己的存在。这种机制就是容器(Container),例如名字空间来做权限的隔离控制 ,利用 cgroups 来做资源分配。
13+ 随着 Linux 系统对于名字空间功能的完善实现,程序员已经可以实现上面的所有需求,让某些进程在彼此隔离的名字空间中运行。大家虽然都共用一个内核和某些运行时环境(例如一些系统命令和系统库),但是彼此却看不到,都以为系统中只有自己的存在。这种机制就是容器(Container),利用名字空间来做权限的隔离控制 ,利用 cgroups 来做资源分配。
Original file line number Diff line number Diff line change 44
55控制组技术最早是由 Google 的程序员 2006 年起提出,Linux 内核自 2.6.24 开始支持。
66
7- 控制组可以提供对容器内内存 、CPU、磁盘 IO 等资源的限制和计费管理 。
7+ 控制组可以提供对容器的内存 、CPU、磁盘 IO 等资源的限制和审计管理 。
88
99
Original file line number Diff line number Diff line change 11## 容器格式
2- 最初,Docker 采用了 LXC 中的容器格式。自 1.20 版本开始,Docker 也开始支持新的 ` libcontainer ` 格式,并作为默认选项。
2+ 最初,Docker 采用了 LXC 中的容器格式。自 1.20 版本开始,Docker 也开始支持新的 [ libcontainer] ( https://github.com/docker/libcontainer ) 格式,并作为默认选项。
33
44对更多容器格式的支持,还在进一步的发展中。
Original file line number Diff line number Diff line change @@ -6,15 +6,15 @@ Docker 的网络实现其实就是利用了 Linux 上的网络名字空间和虚
66首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。
77
88Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势之一是转发效率较高。
9- Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要很快 。
9+ Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要快很多 。
1010
1111Docker 容器网络就利用了这项技术。它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做 ` veth pair ` )。
1212
1313### 创建网络参数
1414Docker 创建一个容器的时候,会执行如下操作:
15- * 创建一对虚拟接口,分别放到本地主机和新容器中;
16- * 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 veth65f9;
17- * 容器一端放到新容器中,并修改名字作为 eth0。 这个接口只在容器的名字空间可见;
15+ * 创建一对虚拟接口,分别放到本地主机和新容器中;
16+ * 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 veth65f9;
17+ * 容器一端放到新容器中,并修改名字作为 eth0, 这个接口只在容器的名字空间可见;
1818* 从网桥可用地址段中获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡 veth65f9。
1919
2020完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
@@ -64,6 +64,6 @@ $ sudo ip netns exec $pid ip route add default via 172.17.42.1
6464```
6565以上,就是 Docker 配置网络的具体过程。
6666
67- 当容器结束后,Docker 会清空容器,容器内的 eth0 会随网络命名空间一起被摧毁 ,A 接口也被自动从 ` docker0 ` 卸载。
67+ 当容器结束后,Docker 会清空容器,容器内的 eth0 会随网络命名空间一起被清除 ,A 接口也被自动从 ` docker0 ` 卸载。
6868
6969此外,用户可以使用 ` ip netns exec ` 命令来在指定网络名字空间中进行配置,从而配置容器内的网络。
You can’t perform that action at this time.
0 commit comments