飞污熊博客

静下心来做一件事

除了 overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlan。

macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址, 即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker 用 macvlan 实现容器网络就不奇怪了。

macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge, 而是直接通过以太 interface 连接到物理网络。下面我们就来创建一个 macvlan 网络。

阅读全文 »

前面已经学习了 Docker 的几种网络方案:none、host、bridge 和 joined 容器, 它们解决了单个 Docker Host 内容器通信的问题。本章的重点则是讨论跨主机容器间通信的方案。

跨主机网络方案包括:

  • docker 原生的 overlay 和 macvlan。
  • 第三方方案:常用的包括 flannel、weave 和 calico。

docker 网络是一个非常活跃的技术领域,不断有新的方案开发出来,那么要问个非常重要的问题了: 如此众多的方案是如何与 docker 集成在一起的?

答案是:libnetwork 以及 CNM(草泥马?)。

阅读全文 »

前面的实验都是在一个host中,而真实环境中肯定会有多个主机。 容器在这些 host 中启动、运行、停止和销毁,相关容器会通过网络相互通信,无论它们是否位于相同的 host。

对于这样一个 multi-host 环境,我们将如何高效地进行管理呢?我们面临的第一个问题是:为所有的 host 安装和配置 docker。 如果一个个去安装肯定很麻烦又容易出错,手工方式效率低且不容易保证一致性,针对这个问题,docker 给出的解决方案是 Docker Machine。

阅读全文 »

这一篇学习容器之间、容器和外界之间怎样相互通信。Docker 网络从覆盖范围可分为单主机的容器网络和跨主机的容器网络, 本章重点讨论前一种。对于更为复杂的多主机容器网络,后面的文章会专门讲。

阅读全文 »

这一篇学习容器的各种操作,容器的状态之间如何转换,以及实现容器的底层技术。

运行容器

1
docker run -d --name "node001" httpd

查看当前正在运行的容器

1
2
docker ps
docker container ls
阅读全文 »

前面已经学会怎样构建镜像了,这一章介绍怎样分发镜像给多个Docker Host使用, 可以通过复制Dockerfile、将镜像上传至公共Registry、搭建私有Registry三种方式。

这里将后面两种方式,怎样使用公共Registry和搭建私有Registry。

阅读全文 »

镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

如果我们想要创建自己的镜像,肯定要先了解镜像的内部结构。

hello-world 是 Docker 官方提供的一个镜像,通常用来验证 Docker 是否安装成功。 我先从这个最小镜像开始说下,之前已经把它下载下来了。

hello-world 的 Dockerfile 内容如下:

1
2
3
FROM scratch    # 此镜像是从白手起家,从 0 开始构建。
COPY hello / # 将文件"hello"复制到镜像的根目录。
CMD ["/hello"] # 容器启动时,执行 /hello

镜像 hello-world 中就只有一个可执行文件 “hello”,其功能就是打印出 “Hello from Docker ……” 等信息。

阅读全文 »

Docker 的核心组件包括:

  1. Docker 客户端 - Client
  2. Docker 服务器 - Docker daemon
  3. Docker 镜像 - Image
  4. Docker 注册中心 - Registry
  5. Docker 容器 - Container(镜像的运行实例)

Docker 架构图如下:

Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。 客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信。

阅读全文 »