在 docker/ 下执行 make build, 可以根据 docker-compose.yml 构建默认的网络, 其利用 alpine 镜像分别构建了三个容器 monitor/server/client, 如下所示
三个容器对应分配一个 cs_network 网络下的 C 类地址静态 IP, cs_network 是我们创建的一个 docker bridge 网络
在 Docker 中,bridge 是一种网络模式,它是 Docker 默认使用的网络模式.bridge 模式允许在 Docker 主机和容器之间创建一个虚拟的以太网桥,使得容器可以通过这个桥接口与主机及其他容器进行通信
重启容器之后就可以分别进入三个容器
docker exec -it monitor sh
docker exec -it server sh
docker exec -it client sh首先需要完成从 monitor 容器到 server/client 的 SSH 连接, 以便后续的操作
在三个容器中都使用 alpha 的 apk 安装 python3 和 SSH, 初始化 SSH 并启动后台守护进程
apk add python3
apk add openssh
mkdir -p /etc/ssh
ssh-keygen -A
/usr/sbin/sshd在 monitor 容器中创建 SSH 密钥
ssh-keygen -t rsa -C "luzhixing12345@163.com"邮箱地址你可以换成自己的, 不换也无所谓
公钥的默认保存地址是 ~/.ssh, 获取 monitor 的公钥
cat ~/.ssh/id_rsa.pub在 server/client 中创建 ~/.ssh/authorized_keys 实现 SSH 免密登录
mkdir ~/.ssh
vi ~/.ssh/authorized_keys然后将之前的 monitor 的公钥复制进去即可
在 monitor 处使用 SSH 连接 server/client, 可以连通表明成功
# 连接 client
ssh root@202.100.10.2
# 连接 server
ssh root@202.100.10.3手动输入 IP 地址有点麻烦, 可以再配置一下 SSH, 创建 ~/.ssh/config 并将下面的配置复制进去
Host client
HostName 202.100.10.2
User root
IdentityFile "~/.ssh/id_rsa"
Host server
HostName 202.100.10.3
User root
IdentityFile "~/.ssh/id_rsa"这样就可以更方便的连接了
# 连接 client
ssh client
# 连接 server
ssh server在 monitor 中安装 tmux, 以便在同一个终端窗口中连接到不同的主机并执行对应的操作
apk add tmux创建 tmux.sh 并保存下面的内容, 其中利用 tmux 构建三个窗口, 0 和 1 分别 SSH 连接到 client 和 server, 2 为本地 monitor, 稍微修改一下 PS1 以更好的区分, 最后将tmux会话附加到当前终端
#!/bin/sh
# 创建一个新的tmux会话
tmux new-session -d -s mysession
# 创建上下分栏
tmux split-window -v -t mysession:0.0
# 创建左右分栏
tmux split-window -h -t mysession:0.0
# 在新分栏中执行命令
tmux send-keys -t mysession:0.0 'ssh root@client' C-m
tmux send-keys -t mysession:0.0 'export PS1="client:\w \$ "' C-m
tmux send-keys -t mysession:0.0 'clear' C-m
tmux send-keys -t mysession:0.1 'ssh root@server' C-m
tmux send-keys -t mysession:0.1 'export PS1="server:\w \$ "' C-m
tmux send-keys -t mysession:0.1 'clear' C-m
tmux send-keys -t mysession:0.2 'export PS1="monitor:\w \$ "' C-m
tmux send-keys -t mysession:0.2 'clear' C-m
# 切换到第一个窗格
tmux select-pane -t mysession:0.2
# # 将tmux会话附加到当前终端
tmux attach-session -t mysession修改 tmux.sh 添加可执行权限, 运行即可
chmod +x tmux.sh
./tmux.sh使用 ip a 可以看到已经连接成功, 三个 IP
如果容器关闭之后需要手动执行一下
/usr/sbin/sshd不然 SSH 连接会失败
可以在 monitor 中创建一个虚拟 Python 环境, 类似执行 GetScore.py 查看结果. 或者分别在 server 和 client 上执行对应的程序
确保内核配置中启用了 NET_EM,可以通过查看 /boot/config-$(uname -r) 文件或 /proc/config.gz 文件来检查.使用以下命令
grep NET_EM /boot/config-$(uname -r)删除三个容器和网络在 docker/ 下执行如下指令即可
make clean