docker 部署 kvm 图形化管理工具 WebVirtMgr

镜像构建

  • 官方最后一次更新已经是 2015年6月22日 了,官方也没有 docker 镜像,这边选择咱们自己构建
  • 如果你的服务器有魔法,可以直接 git clone 一下 webvirtmgr 的包,没有的话,可以和我一样,提前从 github 上下载下来,上传到机器上,然后 ADD 到容器里面
  • 这个项目已经很悠久了,只能用 2.x 的 python,这里就直接用 centos 作为基础镜像,对比过 debian 和 python 镜像,构建完都要1G多,用 centos 构建完只有 560MB
  • 官方地址【先把包下载下来】:Release WebVirtMgr · retspen/webvirtmgr · GitHub
复制代码
FROM docker.m.daocloud.io/centos:7.6.1810

ADD start.sh /start.sh
ADD webvirtmgr-4.8.9.tar.gz /

WORKDIR /webvirtmgr-4.8.9

# yum 相关的依赖
RUN rm -f /etc/yum.repos.d/*.repo && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
    yum install -y epel* && \
    yum install -y python-pip libvirt-python libxml2-python python-websockify gcc python-devel && \
    yum clean all

# python 相关的依赖
RUN pip install numpy==1.16.3 -i https://mirrors.aliyun.com/pypi/simple/ && \
    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ && \
    echo no | python manage.py syncdb && \
    echo yes | python manage.py collectstatic

# webvirtmgr 通过 tcp 连接 kvm 相关的依赖
RUN yum install -y cyrus-sasl cyrus-sasl-scram cyrus-sasl-devel cyrus-sasl-md5 && \
    yum clean all

CMD ["/usr/bin/bash","/start.sh"]

这里是 ADD 里面的启动脚本 start.sh,本地记得 chmod +x start.sh 加个执行权限

复制代码
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@localhost', '1qaz@WSX')" | /usr/bin/python /webvirtmgr-4.8.9/manage.py shell
/usr/bin/python /webvirtmgr-4.8.9/manage.py run_gunicorn --bind 0.0.0.0:8000 --log-file /webvirtmgr-4.8.9/webvirtmgr.log --daemon
if [ $? -eq 0 ];then
  nohup /usr/bin/python /webvirtmgr-4.8.9/console/webvirtmgr-console &> /dev/null &
  sleep 3
  tail -f /webvirtmgr-4.8.9/webvirtmgr.log
fi

构建镜像

复制代码
docker build -t webvirtmgr:4.8.9-centos-7.6 .

启动 webvirtmgr

启动参数仅供参考,里面有些配置是我本地环境相关的

  • 如果 kvm 和 webvirtmgr 是相同机器,可以把 /var/run/libvirt/libvirt-sock 文件带入到容器内,就可以实现 local socket 的方式连接 kvm 宿主机了
复制代码
docker run -d \
--restart=always \
--network host \
--memory 1024m \
--name webvirtmgr \
-v /var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock \
webvirtmgr:4.8.9-centos-7.6
创建其他 superuser

进入 webvirtmgr 容器

复制代码
docker exec -it webvirtmgr bash

创建其他超级用户

复制代码
python manage.py createsuperuser

浏览器访问 IP:8000 看看能不能访问到 webvirtmgr 的页面

默认的用户名是 admin,密码是 1qaz@WSX,在启动脚本里面可以找到

修改密码:python manage.py changepassword admin

配置 nginx 反向代理和域名访问

这一步不是必须的,有需求就做,这里也是用的 docker 容器的方式运行的,下面是需要打包到容器内的配置文件

复制代码
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # access_log  /var/log/nginx/access.log  main;

    # sendfile        on;
    # tcp_nopush     on;

    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        # 这里的域名,修改成自己的
        server_name  virtmgr.icu;
        # access_log /var/log/nginx/webvirtmgr_access_log;

        location / {
            proxy_pass http://192.168.18.222:8000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
            # 这里的配置,也可以再放大一点,这个会影响 iso 镜像的上传
            ## 如果直接放到指定的 iso 目录下,那就不受影响
            client_max_body_size 5120M;
        }

        location /static {
            proxy_pass http://192.168.18.222:8000/static;
        }
    }
}

下面是 Dockerfile

复制代码
FROM docker.m.daocloud.io/nginx:1.26.0
ADD ./nginx.conf /etc/nginx/nginx.conf

构建镜像

复制代码
docker build -t webvirtmgr-static:4.8.9-nginx-1.26.0 .

启动镜像

复制代码
docker run -d --rm \
-p 80:80 \
--memory 200m \
--name webvirtmgr-static \
webvirtmgr-static:4.8.9-nginx-1.26.0

使用域名访问,域名没有 dns 解析的,可以本地自己配置一下 hosts

纳管KVM 宿主机,采用ssh方式

进入 webvirtmgr 容器

复制代码
docker exec -it webvirtmgr bash
bash 复制代码
cd ~

ssh-keygen 

一直选择y

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.234

测试免密是否生效:

ssh root@192.168.100.234

免密没问题就可以在界面加入要管理的KVM宿主机了

相关推荐
Java陈序员8 小时前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
爱吃橘子橙子柚子1 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
Sheffield2 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield2 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽2 天前
win10下运行Start Broker and Proxy报错解决
docker
舒一笑3 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
用户13573999256603 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h3 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔3 天前
通过 Docker 创建开发环境
docker·开发环境