一、在两台服务器上安装kvm虚拟化,把其中一台的虚拟机迁移到另一台。
环境:二台Ubuntu20.04
1.安装:
apt update
apt -y install qemu-kvm virt-manager libvirt-daemon-system
Ubuntu 上管理工具 virt-manager
root@ubuntu20:~# export DISPLAY=192.168.1.120:0.0 #192.168.1.120地址为windows地址
root@ubuntu20:~# virt-manager
虚拟机配置文件路径:/etc/libvirt/qemu/
镜像路径:/var/lib/libvirt/images/
2.迁移:
显示虚拟机信息
root@kvm:/var/lib/libvirt/images# virsh dominfo rocky8-2
Id: 3
Name: rocky8-2
UUID: 89efb151-9d12-47d2-87fa-0b78107c7706
OS Type: hvm
State: running
CPU(s): 2
CPU time: 71.2s
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: enable
Managed save: no
Security model: apparmor
Security DOI: 0
Security label: libvirt-89efb151-9d12-47d2-87fa-0b78107c7706 (enforcing)
查看rocky8-2的磁盘文件路径
root@kvm:/var/lib/libvirt/images# virsh dumpxml rocky8-2 |grep "source file"
<source file='/var/lib/libvirt/images/rocky8.qcow2' index='1'/>
停止虚拟机
root@kvm:/var/lib/libvirt/images# virsh shutdown rocky8-2
Domain rocky8-2 is being shutdown
拷贝配置文件和镜像文件到目标主机
root@kvm:~# scp /etc/libvirt/qemu/rocky8-2.xml 192.168.1.152:/etc/libvirt/qemu/
root@kvm:~# scp /var/lib/libvirt/images/rocky8-2.qcow2 192.168.1.152:/var/lib/libvirt/images/
目标主机重启 libvirtd服务
root@kvm02:/var/lib/libvirt/images# systemctl restart libvirtd.service
root@kvm02:/var/lib/libvirt/images# virt-manager
启动 提示磁盘文件不存再,因为rocky8-2是克隆的,把rocky8的镜像文件拷贝到目标主机,重启服务后可以启动系统,迁移成功
root@kvm:~# scp /var/lib/libvirt/images/rocky8.qcow2 192.168.1.152:/var/lib/libvirt/images/
二、手动制作一个容器镜像创建成容器并正常运行。
1.使用dockerfile方式制作rocky镜像:
cat Dockerfile
FROM rockylinux:9.2.20230513
LABEL author=luo
LABEL version=v2.0
LABEL multi.description="test" multi.date="20230701"
RUN yum install -y vim-enhanced tcpdump lrzsz tree telnet bash-completion net-tools wget bzip2 lsof zip unzip nfs-utils gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel \
&& yum clean all \
&& rm -f /etc/localtime \
&& ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& rm -rf /var/cache/dnf/* \
&& groupadd -g 88 www \
&& useradd -g www -u 88 -r -s /sbin/nologin -M -d /home/www www
CMD [ "/etc/hosts" ]
ENTRYPOINT [ "tail","-f" ]
RUN 是制作镜像时执行的命令,CMD 是运行容器时所执行的命令,当有多个CMD指定时只有最后一个生效。
dockerfile 同时有cmd 和entrypoint指令时,cmd会作为entrypoint的参数, 如果docker run 后面又参数会覆盖cmd的参数内容
CMD 添加文件会自动解压,copy不会解压
docker build . -t rockylinux:9.2-v20 #-t指定制作镜像的名字
运行容器
docker run -it rocky:9.2-v22
docker run -it rocky:9.2-v22 /etc/shadow
ctrl+p+q 把容器放到后台运行,或者docker run 添加参数-d
制作镜像报错:
所有cat -A 查看有提示符号,手动修改文件后运行成功
当只有 ENTRYPOINT 指令时 ,docker run 运行时会将参数会进行追加
ENTRYPOINT [ "tail","-f","/etc/hosts" ]
2. 基于基础镜像制作nginx镜像
准备nginx配置文件、index.html测试文件和nginx包
Dockerfile文件
FROM rockylinux:9.2-base
LABEL author=luo
ENV NGINX_VERSION=1.24.0
ADD nginx-${NGINX_VERSION}.tar.gz /usr/local/
RUN yum -y install gcc make gcc-c++ libtool pcre-devel zlib-devel openssl-devel && \
cd /usr/local/nginx-${NGINX_VERSION} && \
./configure --prefix=/apps/nginx && \
make && make install
COPY nginx.conf /apps/nginx/conf/
COPY index.html /data/html/
VOLUME ["/data/html"]
EXPOSE 80
CMD ["/apps/nginx/sbin/nginx", "-g","daemon off;"]
build镜像
运行容器:
docker run -itd -p 172.22.77.50:9952:80 nginx:1.24.0-v1
访问页面测试正常