基于Centos7.9 Docker 搭建虚拟化小鸡

在历时3天,无数次重装服务器后,终于探索出了一种在无嵌套虚拟化支持的条件下通过docker搭建虚拟化小鸡的方案。

一、构建 docker 镜像

本例中使用centos:centos7  版本的镜像作为范例,其它操作系统类似,自行参考

1.从 docker hub 中拉取镜像

docker pull centos:centos7

2.使用拉取的官方镜像创建一个容器

docker run -itd  --privileged=true --name="<容器的名称>" centos:centos7 /usr/sbin/init

请注意 , 一定要添加 --privileged=true 这个选项,同时 容器启动后执行的 命令必须是 /usr/sbin/init , 否则会出现 systemctl 报错 ,无法挂载磁盘等问题

3.进入容器中安装一些基本的工具,并设置root 密码
1.查看当前容器的id(container-id)

docker ps

2.进入容器,设置root密码,安装一下必要的组件

docker exec -it  /bin/bash

在容器中执行


yum install -y net-tools iproute openssh-server sudo
sudo -i
passwd
<输入root密码>
<重复root密码>
exit
exit

3.commit 容器,并push 到仓库中,或导出成 tar 文件

二、实例化 docker 容器

1.创建docker bridge 网段(仅第一次)

docker network create --driver bridge --subnet <x.x.x.x/x(子网)> --gateway <x.x.x.x(网关)> 

2.实例化容器
需固定容器的ip,且以root 权限运行,并执行的/usr/sbin/init

docker run -itd  --privileged=true  --network --ip <容器的虚拟ip> --name="<容器的名称>"  /usr/sbin/init

三、使用firewalld 进行 IP 转发(核心)

1.关闭 selinux
2.开启 ip 转发功能
3.将ISP 提供的富裕IP 添加到 网卡上
4.使用firewall-cmd 实现端口转发


firewall-cmd  --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -d <外网ip> -j DNAT --to-destination 
firewall-cmd --reload

注:1.可通过下述命令查询 firewall 的流量透传规则(可参阅本文查询 firewall 的命令 ps:这是我目前发现的最全最好的firewall-cmd 文档)

firewall-cmd  --permanent --direct --get-all-passthroughs 

2.可通过这条命令删除 流量透传

firewall-cmd  --permanent --direct --remove-passthrough 

附录

1.实例化的新的docker 容器 , 出现 unknow host
修改系统的 resolv.conf


 rm -rf /etc/resolv.conf
 # 国内
 echo -e "nameserver 223.5.5.5\nnameserver 119.29.29.29" >> /etc/resolv.conf
 # 国外
 echo -e "nameserver 8.8.8.8\nnameserver 1.1.1.1" >> /etc/resolv.conf

2.自己封装的 宝塔[lnmp] docker 镜像
sudemqaq/centos_btpanel
3.自己封装的 centos 7.9.2009.1 镜像
sudemqaq/centos_mini
4.如何快速安装docker


#国内 
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#国外
curl -fsSL https://get.docker.com | bash -s docker
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注