Article

【docker linux】linux系统镜像转化为docker镜像

【docker linux】linux系统镜像转化为docker镜像

概述

使用 docker 安装 linux 的同学都知道,你在 docker 提供的仓库安装 linux 系统,你就会体验到最精简的、最纯净的 linux 系统,当然,他会精简到你连ifconfig命令都需要自己配置,恰好对于我来说,这并不是我想要的。如果我去使用 VMware 安装 linux 系统,但是我已经使用了 docker,就不能使用 vmware 了,那么你就会问了,docker、vmware 难道就不能同时使用?

那么,我告诉你,是的。

问题就出在这里,网上有大把文章谈及 docker 与 vmware 区别,但是很少有文章说明他们在 windows 上使用的虚拟技术的区别。

当前 Docker 官方出品的 Windows 客户端, 叫做 Docker Desktop for Windows.而其正常运行的条件之一是系统开启了 Hyper-V 虚拟化服务. 由上文知 Hyper-V 是 Type-1 的 Hypervisor, 这将使得像 VMware 等作为 Type-2 Hypervisor 的软件无法运行. 此时矛盾已经出现: 使用 Hyper-V 技术的 Docker 客户端与其他 Type-2 Hypervisor 不能同时运行, 必须重启并关闭 Hyper-V 才能再次运行其他的 Type-2 Hypervisor 软件.

摘自Windows 下 Docker 与 VMware 共存 🔗

那么知道原因后,就要着手解决啊,不想使用 docker 和 VMware 来回切换,最初的蠢办法就是在另一个系统上(我装了双系统)使用 vmware,在 windows 使用 docker,反正虚拟机也只是在上课的时候用用,但是,回想一下不对啊,这样不就更麻烦了吗。

回头一想,既然 docker 可以安装 linux 系统,那么我可不可以使用自己的镜像文件给导入进去呢?

我将原来在 docker 中安装的 linux 系统导出,查看其内部构成,这不就是我们常见的那些 linux 文件吗。所以我只需要将原有的 linux 系统压缩成 docker 镜像文件,然后再导入 docker,问题不都解决了吗。

如果,你还没安装 docker,见:值得学习的应用容器引擎 docker 安装 🔗

壹:过程

一、打包 linux 镜像

打包 linux 系统就要做到精简,一些临时文件不需要,就不用打包,只需要将我们需要的东西打包就可以。使用以下命令,记得加 sudo,将 linux 所有文件打包成system.tar,保存在 tmp 目录下,排除掉一些不需要的目录,不要将最后面有一个点给忘记了。

tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .

二、从 linux 系统中导出到物理机(windows)

如果你有一个小伙伴,大可在他的电脑里的 Vmware 完成这第一、二步,然后使用 ftp 工具导出即可。

打包之后,我将压缩包导出,因为我里面安装了hadoop、hbase、zookeeper、hive等一系列东西,他就是现在的 2.57GB 大小。

请忽略这一段:(我是从 deepin 系统中将文件导出到 windows 中的,这里记录一下,方便自己以后使用,windows 与 linux 双系统文件系统不共享,在 windows 中无法访问 deepin 的文件系统,但是在 deepin 中可以读取 windows 文件,不能写,那么我在 deepin(linux)中的压缩包怎么弄到 windows 呢,这时候神器出场了,使用linux reader就可以实现在 windows 中读写 deepin 的文件系统,这东西很奈斯啊)

三、导入到 docker 中

在 cmd 中,导入刚刚压缩好的压缩包,这里你必须到 system.tar 所在目录,要不然,你直接加上 system.tar 的绝对路径,不然肯定会报错找不到该文件。

docker import system.tar

导入后使用docker images查看镜像,会有一个未命名,没有标签的镜像,这时候我们就需要给该镜像打上标签,方便日后使用及查看

四、打标签

使用docker tag命令为你的镜像打标签,后面接镜像 id 以及仓库名:标签。

docker tag [镜像id] linux/centos:hadoop

到这一步,你已经成功了一大半,这时候镜像已经准备好了,就需要使用镜像运行一个容器了。

五、运行容器

使用以下命令运行你自己创建的镜像,注意后面的/bin/bash不能少。

docker run -t -i [镜像id] /bin/bash

测试 ,嗯,java 还在,那么其他的都还在。 那么,到现在大功就搞成了。

贰:docker 相关操作

一、docker save

将镜像文件保存为本地文件。

Usage:  docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Options:
  -o, --output string   Write to a file, instead of STDOUT

例子:docker save -o mysql.tar mysql:latest

二、docker import

将容器导出为本地文件

Usage:  docker export [OPTIONS] CONTAINER

Export a container's filesystem as a tar archive

Options:
  -o, --output string   Write to a file, instead of STDOUT

例子:docker export -o mysql.tar

三、docker load

从本地读取镜像文件

Usage:  docker load [OPTIONS]

Load an image from a tar archive or STDIN

Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output

例子: docker load -i mysql.tar

四、docker import

从本地文件创建镜像

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Import the contents from a tarball to create a filesystem image

Options:
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Set commit message for imported image

例子:docker import mysql.tar

建议:一般 save、load 组合使用,export、import 组合使用。

作者有话

嗯,截止到我发这篇文章之前,我再次向他妥协了,原因是因为修改了 docker 中我导入的容器的内容时,重启后,他并不会生效,并且没有找到有用的方法解决,如果你有可以解决的方法,欢迎留言告诉笔者,笔者将感激不尽,不过这篇博客仍然可以作为我的笔记方便以后查看,最终我使用的方法是在需要使用虚拟机的时候关闭 Hyper -v。

1,如果用docker,
第一步:在控制面板中勾选Hyper -v
第二步:在cmd,以管理员身份运行:
bcdedit /set hypervisorlaunchtype auto
第三步;重启

2,开启虚拟机linux
第一步:在控制面板中取消勾选Hyper -v
第二步:在cmd中,以管理员身份运行:
bcdedit /set hypervisorlaunchtype off
第三步;重启

方法引用:docker 和虚拟机不兼容问题 🔗

Copyright

本文为原创内容,欢迎分享与引用,请保留作者与原文链接。

文章标题

【docker linux】linux系统镜像转化为docker镜像

作者

lomtom

发布方式

原创发布

原文链接 https://lomtom.cn/docker-linuxlinux系统镜像转化为docker镜像