本文将介绍如何在 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 镜像,结合实际操作案例,确保内容全面覆盖,易于理解。