上次说到如何用Docker + Portainer打造位虚拟机服务器,Portainer端说了点儿皮毛,但有经验的人看着点儿皮毛应该就可以投入使用了
我这次将以CentOS 6.10为例,创建一个CentOS 6.10的伪虚拟机~

在讨论前首先戴头盔
以下看法纯属个人主观与偏见的技术讨论帖~各位大神如果有不同意见可以留言讨论
如果觉得在下太水皮的话~就当你赢~我输就好~

为什么是CentOS 6.10不用新的系统~没啥~因为习惯了,CentOS基于Redhat,算是还在维护期内比较老但是比较稳定的版本。
除了重大漏洞外基本不会有什么更新包,如果功能上是足够的话那么对于稳定的支撑服务来说,是绝佳的选择~

1、首先pull一个CentOS 6的镜像~我们打开Images页,在Pull image的Image框填入centos:6.10
然后点击pull the image就会自动完成下载,完成后再下面的Images列表就会看到新下载回来的镜像centos:6.10

2、打开Container页面,点击 +Add container



Name填你喜欢的名字,Image填centos:6.10
在Advanced container settings上
在Command & logging分页勾选Console的Interactive & TTY选项,其实这个就是命令行新建Container的时候加的-IT参数
在Network分页的Network处选择你新建的MacVLan,至于怎么建立MacVLan请翻看我上一篇文章Docker+Portainer打造伪虚拟机服务器 Part.1(Portainer端)
点击Deploy the container就可以新建了一个还不算完整的CentOS 6伪虚拟机了,那么怎么才算完整呢~

3、我们要SSH登录宿主服务器,使用Dockere命令进入容器

docker attach centos

进入容器后,我们开始对这个未完整的镜像进行调整了~首先自然是先跑一次更新,顺便把ssh也装上。
可能很多人会问Linux不是自带SSH的么,原因是Docker镜像就不带,至于为什么这里不多说,反正要自己安装就是了~

yum update -y && yum install openssh-server -y

然后编辑sshd的配置文件/etc/ssh/sshd_config
在里面找到UsePAM yes改为UsePAM no,否则ssh会登陆不上,如果你创建的是Debian或者ubuntu的话,还需要把PermitRootLogin参数改为yes
然后手动启动一次sshd

/etc/init.d/sshd start

当然不能忘了的就是给改密码,因为原本docker的验证方式跟ssh的不一样,你需要创建root密码用来登录

passwd root

由于容器本身并没有服务管理的组件,那么我们现在就要用最土炮的办法supervsiord

yum install python-setuptools
easy_install supervisor==3.4.0         #由于supervisord出了4.0.1版本,不带版本号的话CentOS 6会装不上~

安装完成后我们开始配置supervisord
首先要生成配置文件

echo_supervisord_conf >/etc/supervisord.conf

然后要创建以及编辑服务文件vi /etc/init.d/supervisord,内容如下

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PROGNAME=supervisord
DAEMON=/usr/bin/$PROGNAME
CONFIG=/etc/$PROGNAME.conf
PIDFILE=/tmp/$PROGNAME.pid
DESC="supervisord daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
 
start()
{
        echo -n "Starting $DESC: $PROGNAME"
        $DAEMON -c $CONFIG
        echo "..."
}
stop()
{
        echo -n "Stopping $DESC: $PROGNAME"
        supervisor_pid=$(cat $PIDFILE)
        kill -15 $supervisor_pid
        echo "..."
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 1
        ;;
esac
exit 0

然后赋予权限chmod 777 /etc/init.d/supervisord
最后编辑配置文件vi /etc/supervisord.conf
里面主要有几个部分需要修改
1#[inet_http_serer]前面的;要去掉
以及下面一行;port=127.0.0.1:9001改为poot=0.0.0.0:9001
这里其实端口你自己喜欢什么都可以~
2#[supervisord]
其中nodaemon=false改为nodaemon=true
3#在文件末尾加上

[program:sshd]
command=/usr/sbin/sshd -D

做好后就可以退出容器,关闭putty窗口~回到portainer的页面导出镜像了



4、打开Containers页面点击你的容器,然后为你的容器创建一个镜像用于以后新建伪虚拟机的时候用的~
创建完毕后你在Images页面就可以看到你创建的新的镜像了,当然你可以导出来备份,以后可以导入到任何一台Docker服务器中。

5、最后我们删除之前的容器,我们开始来真的了~创建新的伪虚拟机~~
直接进入Container页面点击+Add container,同样的名字喜欢写什么就什么,Image选择刚才你建立的镜像

在Advanced container settings里面的Command & logging选项卡中
Command输入 /etc/init.d/supervisord start
Console选择 Interactive & TTY (-I -t)
在Network选项卡中选择你之前建立的MACVLAN
然后点击Deploy the container创建容器。

至此虚拟机创建完成可以直接用ssh连接了