zoukankan      html  css  js  c++  java
  • 将虚拟机打包到Docker中

    一.生成tar文件

    1.已知虚拟机镜像文件位置,使用镜像打包

    将虚拟机打包到docker里面

    首先需要知道要打包的镜像的位置:

    我自己的是用kvm直接搭建的,所以镜像一开始就是由自己创建的,例如虚拟机等镜像分别为:.vid或者.vmdk结尾

    下面是打包的步骤:

    (1).VMDISK="/home/xxx/workspace/kvm_qume/centos1.qcow2"   指定镜像的位置

    (2).sudo modprobe nbd                                     初始化一个qemu-nbd 需要的内核模块

    (3).sudo qemu-nbd -c /dev/nbd0 -r $VMDISK    将虚拟机的磁盘连接到一个虚拟的设备节点上

    (4).ls /dev/nbd0p*

    会有以下两个设备文件

    /dev/nbd0p1 /dev/nbd0p2            

    (5).sudo mount /dev/nbd0p2 /mnt  将分区挂载到/mnt

    (6).sudo tar cf img.tar -C /mnt .

    (7). sudo umount /mnt && sudo qemu-nbd -d /dev/nbd0

    进过实际的运行,发现在ubuntu:18.04 上,当运行qemu-nbd -d /dev/nbd0,该设备块提示不在连接,但是使用lsblk 发现设备块仍然存在并且无法再使用了,处于占用的状态

    2. 镜像文件不在本地,由运维人员提供

    sudo mount -o loop partition.dump /mnt

    sudo tar cf $(pwd)/img.tar -C /mnt .

    sudo umount /nt

    3.在系统运行的时候登录到虚拟机上导出tar文件

    sudo tar cf /img.tar --exclude=/img.tar --one-file-system /

    注意:采用直接导出的方式会有如下问题:(1)复制出来的文件可能会出现状态不一致的情况,(2)会有其他难解的问题

    建议最好关闭尽量多的应用和服务后再导出

    二. 制作镜像

    1.使用Dockerfile

    From scratch

    ADD img.tar /

    然后执行docker build .  即可

    2.使用docker import 导入

    cat img.tar | docker import - new_image_name

  • 相关阅读:
    laravel migrate 指定执行部分 migration
    Laravel attribute casting 导致的 Indirect modification of overloaded property
    python中列表,元组的乘法
    python中简化的验证码功能
    Day4作业:蛋疼CRM系统
    python中pop(),popitem()的整理
    新手pyhoner的指定内容读取和写入的思路
    Python基础之文件操作
    Python基础之内置函数(一)
    Python基础之set集合与函数
  • 原文地址:https://www.cnblogs.com/estherSH/p/13255971.html
Copyright © 2011-2022 走看看