本文将介绍如何在 CentOS 主机上安装 Docker 并创建一个支持 SSH 登录的 Docker 镜像,方便模拟网络设备。如果你正在寻求如何创建支持 SSH 登录的 Docker 镜像或如何使用 Docker 模拟网络设备,也许这篇文章对你有所帮助。

CentOS 主机安装 Docker

安装 Docker

首先,在 CentOS 上安装 Docker:

yum install docker
docker version  # 1.12.6

移动 Docker 数据目录

为了优化存储,可以将 Docker 的数据目录移动到较大磁盘下:

mv /var/lib/docker/ /data/docker
ln -sb /data/docker /var/lib/docker

配置 Docker 选项

编辑 Docker 配置文件 /etc/sysconfig/docker,添加如下选项以配置 Docker:

OPTIONS='--log-driver=journald -b=none --iptables=true -H unix:///var/run/docker.sock --insecure-registry docker.oa.com'

启动 Docker 服务

systemctl start docker

使用 Docker commit 制作镜像

拉取带有 Systemd 的 CentOS 基础镜像

拉取支持 Systemd 的 CentOS 基础镜像,因为默认的 CentOS 7 镜像不支持 Systemd:

docker pull docker.oa.com/gaia/centos:systemd

创建容器

创建容器时,使用 --net host 选项直接使用主机的网络:

docker run -d --privileged=true --net host --name building docker.oa.com/gaia/centos:systemd

复制所需文件到容器中

将需要的程序包和配置文件复制到容器中:

docker cp CentOS-Base.repo building:/
docker cp setuptools-38.5.1.tar.gz building:/
docker cp pip-9.0.1.tar.gz building:/
docker cp snmpsimd.supervisor.conf building:/
docker cp sshd.supervisor.conf building:/
docker cp pip.conf building:/
docker cp supervisord.conf building:/
docker cp flowgen building:/
docker cp nginx-1.12.2.tar.gz building:/
docker cp nginx.conf building:/
docker cp nginx_status.conf building:/
docker cp nginx.supervisor.conf building:/

进入容器并配置环境

docker exec -it building bash

# 更新 yum 源以方便安装包
cd /
mv -f CentOS-Base.repo /etc/yum.repos.d/
yum clean all && yum makecache

# 设置默认的 root 密码
echo "password" | passwd --stdin root

# 安装必要的软件包
yum -y install gcc make pcre-devel zlib-devel openssh-server openssh-clients net-snmp-utils net-tools lrzsz iproute
systemctl restart sshd  # 重启 SSH 服务以生成密钥
systemctl disable sshd  # 关闭开机启动,使用 supervisor 管理进程

# 安装 pip 和相关软件包
cd /
tar xzf setuptools-38.5.1.tar.gz ; cd setuptools-38.5.1; python setup.py install; cd -; rm -rf setuptools-38.5.1 setuptools-38.5.1.tar.gz
tar xzf pip-9.0.1.tar.gz ; cd pip-9.0.1; python setup.py install ; cd -; rm -rf pip-9.0.1.tar.gz pip-9.0.1

# 设置内网 pip 源
mkdir ~/.pip
mv -f /pip.conf ~/.pip

# 安装 SNMP 仿真工具并配置社区
pip install snmpsim
cd /usr/snmpsim/data/
cp public jq-netmanager -r
cp public.snmprec jq-netmanager.snmprec

# 安装 Supervisor 管理容器进程
pip install supervisor
mv -f /supervisord.conf /etc/supervisord.conf

# 创建配置目录并配置 Supervisor
mkdir /etc/supervisor.conf.d
mv /snmpsimd.supervisor.conf /etc/supervisor.conf.d/
mv /sshd.supervisor.conf /etc/supervisor.conf.d/
mv /nginx.supervisor.conf /etc/supervisor.conf.d/

# 安装 NetFlow 模拟器
mv /flowgen /bin/flowgen
chmod +x /bin/flowgen

# 安装 Nginx
cd /
tar xzf nginx-1.12.2.tar.gz && cd nginx-1.12.2 && ./configure --with-http_stub_status_module && make && make install && cd - && rm -rf nginx-1.12.2*
mv -f /nginx.conf /usr/local/nginx/conf
mkdir /usr/local/nginx/conf/conf.d
mv /nginx_status.conf /usr/local/nginx/conf/conf.d/

# 清理临时文件
rm -rf /tmp/*
> ~/.bash_history
history -c
exit

创建镜像

docker commit building docker.oa.com/ashinchen/centos

推送镜像

docker images  # 查找镜像 ID
docker tag IMGID docker.oa.com/ashinchen/centos
docker push docker.oa.com/ashinchen/centos

运行新的容器

创建模拟器容器

# 拉取镜像
# docker pull docker.oa.com/ashinchen/centos

# 创建自定义网络
docker network create --subnet=181.0.0.0/8 network181
# 创建指定 IP 的容器
docker run -d --privileged=true --name test --net network181 --ip=181.0.0.2 docker.oa.com/ashinchen/centos /usr/bin/supervisord -n

测试 SSH 和 SNMP

snmpwalk -v 2c -c jq-netmanager 181.0.0.2
ssh root@181.0.0.2 -p 22  # 密码:password

镜像和容器持久化

导出当前构建完成的容器

docker export building > building_export.tar
gzip -r building_export.tar

总结

本文为 Docker 用户提供了详细的步骤以创建支持 SSH 登录和模拟网络设备的 Docker 镜像,结合实际操作案例,确保内容全面覆盖,易于理解。


也可以看看