Docker多台物理主机之间的容器互联-树叶云Docker教程 (docker是干什么的)

教程大全 2025-07-12 21:46:21 浏览

Docker 默认的桥接网卡是 docker0。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 veth而 Docker 只是把所有这些网卡桥接在一起,如下:

[root@opnvz ~]# brctl showbridge namebridge IDSTP enabledinterfacesdocker08000.56847afe9799noveth0889veth3c7bveth4061

在容器中看到的地址一般是像下面这样的地址:

root@ac6474aeb31d:~# ip a1: lo:  mtu 1500 qdisc noqueue state UNKNOWN group defaultlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever11: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 4a:7d:68:da:09:cf brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::487d:68ff:feda:9cf/64 scope linkvalid_lft forever preferred_lft forever

这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数。

如果在企业内部应用,或者做多个物理主机的集群,可能需要将多个物理主机的容器组到一个物理网络中来,那么就需要将这个网桥桥接到我们指定的网卡上。

拓扑图

主机 A 和主机 B 的网卡一都连着物理交换机的同一个 vlan 101,这样网桥一和网桥三就相当于在同一个物理网络中了,而容器一、容器三、容器四也在同一物理网络中了,他们之间可以相互通信,而且可以跟同一 vlan 中的其他物理机器互联。

docker是干什么的

ubuntu 示例

下面以 ubuntu 为例创建多个主机的容器联网: 创建自己的网桥,编辑 /etc/network/interface 文件

auto br0iface br0 inet staticaddress 192.168.7.31netmask 255.255.240.0gateway 192.168.7.254bridge_ports em1bridge_stp offdns-nameservers 8.8.8.8 192.168.6.1

将 Docker 的默认网桥绑定到这个新建的 br0 上面,这样就将这台机器上容器绑定到 em1 这个网卡所对应的物理网络上了。

ubuntu 修改 /etc/default/docker 文件,添加最后一行内容

# Docker Upstart and SysVinit configuration file# Customize location of Docker binary (especially for development testing).#DOCKER="/usr/local/bin/docker"# Use DOCKER_OPTS to modify the daemon startup options.#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"# If you need Docker to use an HTTP proxy, it can also be specified here.#export http_proxy="http://127.0.0.1:3128/"# This is also a handy place to tweak where Docker's temporary files go.#export TMPDIR="/mnt/bigdrive/docker-tmp"DOCKER_OPTS="-b=br0"

在启动 Docker 的时候 使用 -b 参数 将容器绑定到物理网络上。重启 Docker 服务后,再进入容器可以看到它已经绑定到你的物理网络上了。

root@ubuntudocker:~# docker psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES58b043aa05ebdesk_hz:v1"/startup.sh"5 days agoUp 2 seconds5900/tcp, 6080/tcp, 22/tcpyanlxroot@ubuntudocker:~# brctl showbridge namebridge idSTP enabledinterfacesbr08000.7e6e617c8d53noem1vethe6e5

这样就直接把容器暴露到物理网络上了,多台物理主机的容器也可以相互联网了。需要注意的是,这样就需要自己来保证容器的网络安全了。


如何交互式地创建一个Docker容器

Docker容器运行后,如何进入容器进行操作呢?起初我是用ssh。 如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。 当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器?有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有时候并不方便。 当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。 nsenter 可以访问另一个进程的名字空间。 为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。 PID=$(docker inspect –format “{{ }}” ) //将换成你的容器id通过这个 PID,就可以连接到这个容器:$ nsenter –target $PID –mount –uts –ipc –net –pid更简单的,建议大家下载 _docker,并将内容放到 中。 $ wget -P ~$ echo “[ -f ~/_docker ] && . ~/_docker” >> ~/; source ~/这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。 $ echo $(docker-pid )$ docker-enter 附_docker文件内容:# Some useful commands to use docker.# Author: yeasy@github# Created:2014-09-25alias docker-pid=”sudo docker inspect –format ‘{{}}’”alias docker-ip=”sudo docker inspect –format ‘{{ }}’”#the implementation refs fromdocker-enter() {if [ -e $(dirname $0)/nsenter ]; then# with boot2docker, nsenter is not in the PATH but it is in the same folderNSENTER=$(dirname “$0″)/nsenterelseNSENTER=nsenterfi[ -z $NSENTER ] && echo “WARN Cannot find nsenter” && returnif [ -z $1 ]; thenecho “Usage: `basename “$0″` CONTAINER [COMMAND [ARG]…]”echo “”echo “Enters the Docker CONTAINER and executes the specified COMMAND.”echo “If COMMAND is not specified, runs an interactive shell in CONTAINER.”elsePID=$(sudo docker inspect –format “{{}}” “$1″)if [ -z $PID ]; thenecho “WARN Cannot find the given container”returnfishiftOPTS=”–target $PID –mount –uts –ipc –net –pid”if [ -z $1 ]; then# No command given.# Use su to clear all host environment variables except for TERM,# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,# and start a login shell.#sudo $NSENTER “$OPTS” su – rootsudo $NSENTER –target $PID –mount –uts –ipc –net –pid su – rootelse# Use env to clear all host environment $NSENTER –target $PID –mount –uts –ipc –net –pid env -i $@fifi}

为什么有时候电脑会跳出内存不足的提示?

右键单击“我的电脑”→属性→高级→性能 设置→高级→虚拟内存 更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。 一般来说,虚拟内存为物理内存的1.5倍-2倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。

如何把一个LUN分配到2台esxi5物理主机上的2台VM上

大概的步骤是这样的,详细的大家可以去翻官方文档: 1. 存储划LUN,分配给2个 ESX主机; 2. 保证在vCenter中,存储适配器(HBA卡)那里可以看到你所分配的LUN, 3. 然后选择需要添加的VM,添加磁盘,选择“裸机映射”,然后可以看到你分配的LUN; 4. 下一步,“选择数据存储”, 这里选择“指定数据存储”,注意,此处需要保证2个VM 都能正常访问的位置; 5. 兼容模式,选择“物理”; 6. “高级选项”中,注意选择合适的 SCSI 编号,比如OS 的盘为 SCSI0:0,那么建议新加入的这一组,就选择为 SCSI 1:0, 根据不同的磁盘的组,选择 不同的SCSI 序号; 至此,VM 1完成添加。 VM 2 添加: 1. 添加设备,选择磁盘 2. “选择添加现有磁盘”,然后在“磁盘文件路径”那里,选择VM1 数据存储的位置,命名为VM1名称的目录下,会看到一个磁盘文件; 3. 后续步骤保持与VM1 一模一样,特别注意 SCSI 端口号,2边保持一致; 这样就可以了·~~~~ 通过此种办法,VM 直接访问 SAN LUN,貌似这样做了之后,就不可以做 快照了。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐