镜像构建
- 官方最后一次更新已经是
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.1810ADD 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 allCMD ["/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 ];thennohup /usr/bin/python /webvirtmgr-4.8.9/console/webvirtmgr-console &> /dev/null &sleep 3tail -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
cd ~ssh-keygen
一直选择y
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.234
测试免密是否生效:
ssh root@192.168.100.234
免密没问题就可以在界面加入要管理的KVM宿主机了