Docker 跨主机容器间相互访问的实现,Docker Swarm(集群搭建) —实现容器编排的利器
第一步:创建自定义网络
1
|
docker network create --subnet=172.18.0.0 /24 docker-br0 |
备注:这里选取了 172.18.0.0 网段,也可以指定其他任意空闲的网段,docker-br0 为自定义网桥的名字,可自己任意取名。
注意:这里子网掩码要使用 255.255.255.0 也就是 IP 后面的那个 24, 因为后面要使用 iptables 配置路由表,我之前使用 255.255.0.0 无法配置。所以这里配置成 24.
创建网桥之后,使用 ifconfig 查看 会多出一个网桥,该网桥在 docker 启动或者重启之后,会自动显示出来。永久的,可以使用 docker network rm docker-br0 移除网桥。
第二步:在你自定义的网段选取任意 IP 地址作为你要启动容器 IP
1
|
docker run -itd --name my-centos3 --network myNetwork --privileged= true --ip 172.18.0.6 -p 5000:22 <image id > /sbin/init |
第三步:跨主机容器互访:
第四步:在 192.168.1.106 虚拟机上,给容器绑定固定 ip, 按照之前 第一步到 第三步.
第五步:在两个容器中互相访问,发现跨主机容器互访,并不能 ping 通。
第六步:配置路由表
1
2
|
#添加路由规则 ip route add 对方容器所在的ip网段/子网掩码 via 对方虚拟机ip dev 通过哪个网卡通信 |
如:ip route add 172.18.0.0/16 via 192.168.1.24 dev ens33
添加完成之后,可以使用 route 命令 查看添加之后的规则,也可以使用 ip route del 172.172.1.0/24 移除路由规则
在 192.168.1.24 和 192.168.1.26 虚拟机上,分别添加对应的路由规则!
192.168.1.24: ip route add 172.19.0.0/24 via 192.168.1.26 dev ens33
192.168.1.26: ip route add 172.18.0.0/24 via 192.168.1.24 dev ens33
第七步:在两个容器中互相访问,发现可以实现跨主机容器互相 ping 通了。
、
Docker 是一种流行的容器化平台,它可以帮助开发人员更方便地构建、发布和管理应用程序。在 Docker 中,容器是独立运行的应用程序包装,包含了运行所需的所有文件、库和环境变量。Docker 提供了多种网络连接方式,使得容器之间可以进行跨主机通信。下面将介绍 Docker 的多主机网络连接方式,并提供实现跨主机通信的方法。
一、Docker 多主机网络连接概述
在 Docker 中,每个容器都有自己的网络命名空间,这意味着每个容器都拥有自己的 IP 地址和网络接口。默认情况下,Docker 使用桥接网络模式,将容器连接到一个共享网桥。这种方式适用于在单个主机上运行多个容器的情况。然而,在分布式环境中,可能需要将容器连接到不同的主机上,并进行跨主机通信。
为实现跨主机通信,Docker 提供了多种网络连接方式,包括 Overlay 网络、MacVLAN 网络和第三方网络插件。这些网络连接方式可以扩展 Docker 的网络功能,使容器能够在跨主机环境中相互通信。
二、Overlay 网络
1、Overlay 网络简介
Overlay 网络是 Docker 提供的一种内置网络插件,用于在跨主机环境中连接容器。它使用 VXLAN (Virtual Extensible LAN) 技术创建一个虚拟网络,将不同主机上的容器连接到同一个逻辑网络中。
2、创建 Overlay 网络
要创建 Overlay 网络,需要先在一个主机上作为 Swarm Manager 启动一个 Docker Swarm,然后在其他主机上加入 Swarm。
首先,在 Swarm Manager 主机上执行以下命令:
$ docker swarm init --advertise-addr <MANAGER-IP>
然后,将其他主机加入 Swarm:
$ docker swarm join --token <TOKEN> <MANAGER-IP>:<PORT>
接下来,在 Swarm Manager 主机上创建一个 Overlay 网络:
$ docker network create -d overlay --attachable <NETWORK-NAME>
3、使用 Overlay 网络
通过指定 Overlay 网络名称,可以将容器添加到该网络中。例如:
$ docker run -d --network=<NETWORK-NAME> --name=<CONTAINER-NAME> <IMAGE>
容器之间可以使用容器名称进行通信,例如通过 Ping 命令:
$ docker exec -it <CONTAINER-NAME> ping <OTHER-CONTAINER-NAME>
三、MacVLAN 网络
1、MacVLAN 网络简介
MacVLAN 网络是一种高级网络连接方式,允许容器直接绑定到物理网络接口,并使用不同的 MAC 地址和 IP 地址。它适用于需要容器具有与主机一样的网络特性的场景。
2、创建 MacVLAN 网络
要创建 MacVLAN 网络,需要在 Docker 宿主机上进行配置。首先,打开宿主机的网络配置文件(如 /etc/netplan/01-netcfg.yaml)并添加以下配置:
network:
version: 2
ethernets:
eth0:
dhcp4: no
vlans:
macvlan0:
id: <VLAN-ID>
link: eth0
bridges:
- br0
然后,重新加载网络配置:
$ sudo netplan apply
最后,在容器中使用以下命令启动 MacVLAN 网络:
$ docker network create -d macvlan \
--subnet=<SUBNET> \
--gateway=<GATEWAY> \
-o parent=<PHYSICAL-INTERFACE> \
<NETWORK-NAME>
3、使用 MacVLAN 网络
通过指定 MacVLAN 网络名称和网络参数,可以将容器添加到该网络中。例如:
$ docker run -d --net=<NETWORK-NAME> --name=<CONTAINER-NAME> <IMAGE>
容器之间可以使用容器名称进行通信,例如通过 Ping 命令:
$ docker exec -it <CONTAINER-NAME> ping <OTHER-CONTAINER-NAME>
四、第三方网络插件
除了 Docker 内置的 Overlay 网络和 MacVLAN 网络,还有许多第三方网络插件可用于实现跨主机通信。这些插件提供了更丰富的网络功能和配置选项。
常见的第三方网络插件包括 Calico、Weave、Flannel 等。安装和配置这些网络插件可以参考它们的官方文档。
Docker 的多主机网络连接允许在分布式环境中实现容器之间的跨主机通信。本文介绍了 Docker 的 Overlay 网络、MacVLAN 网络以及第三方网络插件,它们都可以帮助实现跨主机通信的需求。
通过使用这些网络连接方式,可以轻松创建、管理和扩展分布式容器化应用程序。不同的网络连接方式适用于不同的场景,可以根据具体需求选择合适的方式。
在 UTF-8 编码中,一个英镑符号由两字节表示。我们使用echo -e和\x表示法输出这两个字节,然后将它重定向到一个文件里。当我们cat这个文件时,终端会读取这两字节,并且知道该如何将输出解释表达为一个英镑符号。
$ env | grep LANG LANG=en_GB.UTF-8 $ echo -e "\xc2\xa3" > /tmp/encoding_demo ⇽--- 使用带 - e 标志的 echo 命令将代表英镑符号的两字节输出到一个文件里 $ cat /tmp/encoding_demo ⇽--- £ ⇽--- cat 文件,我们会看到一个英镑符号
FROM ubuntu:16.04 ⇽--- 使用一个 Debian 派生的基础镜像 RUN apt-get update && apt-get install -y locales ⇽--- 更新软件包索引并且安装 locales 软件包 RUN locale-gen en_US.UTF-8 ⇽--- 生成美式英语的 locale 文件,使用 UTF-8 编码 ENV LANG en_US.UTF-8 ⇽--- 设置 LANG 环境变量 ENV LANGUAGE en_US:en ⇽--- 设置 LANGUAGE 环境变量 CMD env ⇽--- 默认命令 env 将会展示容器里的环境设置
用户可能想知道LANG和LANGUAGE变量之间的区别是什么。简而言之,LANG是首选语言和编码设置的默认设置。它也提供了一个应用查找更多指定LC_*这样的设置时的一个默认值。LANGUAGE则提供了一个有序的应用程序首选语言列表(如果主要语言不可用)。可以通过执行man locale获取更多信息。
1、什么是Docker Swarm?
Docker Swarm是Docker官方提供的容器编排工具,用于管理多个Docker容器的集群。通过Docker Swarm,用户可以轻松地部署、扩展和管理容器化应用程序。
1、Manager节点和Worker节点的角色和功能:
Manager节点:
1、Manager节点是Swarm集群的控制中心,负责管理整个集群的状态、调度任务和维护集群的一致性。
2、Manager节点负责接收用户的命令和请求,并将它们分发给Worker节点执行。
3、Manager节点还负责监控集群中的节点状态、服务状态和任务状态,并在需要时进行自动修复。
Worker节点:
1、Worker节点是Swarm集群中的工作节点,负责运行容器化的应用程序和服务。
2、Worker节点接收来自Manager节点的任务分配,
在 Kubernetes(K8s)中,Namespace 是一种用于在集群中创建多个虚拟集群的方式。它将集群资源进行逻辑分组,使得不同的团队或项目可以独立地使用资源,避免资源冲突和混乱。本篇博客将详细介绍 Kubernetes 的 Namespace 概念、用法和实战应用场景。
一、Namespace 简介
1.1 什么是 Namespace
Namespace 是 Kubernetes 中的一种资源对象,用于将集群中的资源进行逻辑分组和隔离。它可以看作是一个虚拟的集群,拥有自己的资源配额、网络和存储等。不同的 Namespace 之间是完全隔离的,各自拥有自己的资源和配置,(默认不隔离网络
)。
1.2 Namespace 的作用
Namespace 的主要作用是将集群资源进行分组,使得不同团队或项目可以在同一个 Kubernetes 集群上独立使用资源,避免资源冲突和混乱。它提供了一种逻辑隔离的方