【昇腾】 NPU Snt9B裸金属服务器docker网络配置方案
1. 背景
华为云昇腾Snt9B裸金属服务器搭配8卡算力资源,可供多人共用裸机完成训练与调测工作。为避免多人使用时环境等冲突,建议在docker容器中进行独立开发。此外,在分布式训练场景下,需要多机、多容器之间免密登录、网络互通。本文介绍两种docker容器常用的网络配置。
2. docker常用网络模式介绍
2.1 桥接模式(Bridge)
docker容器默认为该模式。容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。
在为容器设置ip时,会从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。
docker0概念介绍:Docker 服务默认会创建一个docker0网桥,它在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个物理网络。Docker 服务默认指定了 docker0 接口的IP地址和子网掩码,保证主机和容器之间可以通过网桥相互通信。
Network Namespace概念介绍:是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,每个空间拥有独自的网络栈信息,保证虚拟机或容器运行时仿佛在独立的网络中。
2.2 Host模式
在创建docker容器时使用如下命令指定。
--net=host
Host 模式下容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,此时容器不再拥有隔离的、独立的网络栈,不拥有所有端口资源。
使用host 模式后,无需再对容器做端口映射,同时,容器就和宿主机共用网络,容器中的网络服务也可以访问到宿主机的网络服务。
3. 训练服务器docker网络配置方案
3.1 基于桥接模式配置
首先在创建docker容器时,要将容器需要对外暴露的端口和宿主机端口进行映射。
docker run -itd -p 18888:22 my_image
例如,上述命令就是将容器的22端口与宿主机的18888端口相映射。
在宿主机执行如下命令,配置IP转发,用于容器内的网络访问。
sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf
sysctl -p | grep net.ipv4.ip_forward
命令解释:Linux系统默认是禁止数据包转发的,转发即当主机拥有多于一块的网卡时,一块网卡收到数据包并根据数据包的目的ip地址将数据包发往本机另一块网卡。由于从外部访问容器内部时需要访问宿主机的地址和对应的容器映射的地址,访问的数据包到宿主机上后经过ip包解析后通过目的port和iptables的规则会将数据包由eth0网卡转发至docker0网桥上进行下一步路由。所以如果容器的宿主机上的ip_forward未打开,该宿主机上的容器则不能被其他宿主机访问。
最后,参考博客: 【昇腾】NPU Snt9B裸金属服务器多机免密互通解决方案
配置容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。
3.2 基于host模式配置(推荐)
使用host模式,docker容器可以直接使用宿主机的IP和端口,更加简单便捷,更推荐在多机分布式训练时使用。
但是在设置容器的ssh免密登录时,仍需要将容器的22端口和主机某个端口相映射。
进入容器中,修改/etc/ssh/sshd_config文件,增加port映射。
Port 18888
例如,在文件增加下面这一行,即为将容器的22端口和主机18888端口相映射。
重启sshd服务,执行如下命令。
/usr/sbin/sshd
此时,有两种方式实现免密登录。
1. 参考博客: 【昇腾】NPU Snt9B裸金属服务器多机免密互通解决方案
分别配置每个容器的ssh免密登录信息,保证多机多容器之间实现互相ssh免密登录。
2. 重新制作docker镜像(推荐)
在一个容器参考博客: 【昇腾】NPU Snt9B裸金属服务器多机免密互通解决方案 配置完成后,将该容器打包为镜像,上传到华为云容器管理服务SWR,其他各个机器从SWR中使用docker pull命令拉取该镜像即可。不同机器使用同一个镜像,由于共用密钥,天然就可以实现多机多容器免密登陆。
- 点赞
- 收藏
- 关注作者
评论(0)