一.生成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