【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 软件.
@
那么知道原因后,就要着手解决啊,不想使用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和虚拟机不兼容问题
【docker linux】linux系统镜像转化为docker镜像的更多相关文章
- [视频教程] 如何在Linux深度系统deepin下安装docker
笔记: 安装docker的命令 curl -sSL https://get.docker.com/ | sh service docker start 排查错误的命令 strace 视频地址在此:ht ...
- 在Linux深度系统deepin下安装docker
wget -qO- https://get.docker.com/ | sh wget -qO- https://get.docker.com/ | sh
- 【docker】linux系统centOS 7上安装docker
要求: 一个centOS 7系统 虚拟就上安装CentOS 7步骤 本文操作在本机上使用xshell连接虚拟机上的centOS 7进行操作 1.Docker 要求 CentOS 系统的内核版本高于 ...
- Docker在linux系统下的安装
系统要求 本安装教程仅限于CentOS7,其他系统不适用.centos-extras仓库必须是启用状态,这个仓库默认状态是启用,如果不是启用状态,请修改. 卸载旧版本的Docker Docker的旧版 ...
- 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令
安装Docker 文章目录 安装Docker Docker虚拟机架构 在Linux系统中安装Docker虚拟机 管理Docker虚拟机 参考资料 Docker虚拟机架构 Docker创建的所有虚拟实例 ...
- linux命令的使用 以及基本docker命令及docker镜像安装
以linux CentOS-7 64位 系统为例 查看ip ifconfig 固定ip 输入vim /etc/sysconfig/network-scripts/ifcfg-ens3 其中vim是修 ...
- Docker在windows系统以及Linux系统的安装
Docker简介和安装 Docker是什么 Docker 是一个应用打包.分发.部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要, 而普通虚拟机则是一个完 ...
- Docker在Linux上运行NetCore系列(二)把本地编译好的镜像发布到线上阿里云仓库
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始 本篇文章结束在本地创建完成镜像后, ...
- Linux系统 Centos7 环境基于Docker部署Rocketmq服务
消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议. 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户 ...
随机推荐
- mybatis深入之动态查询和连接池介绍
mybatis深入之动态查询和连接池介绍 一.mybatis条件查询 在mybatis前述案例中,我们的查询条件都是确定的.但在实际使用的时候,我们的查询条件有可能是动态变化的.例如,查询参数为一个u ...
- R语言实战(二) 创建数据集
2.1 数据集的概念 不同的行业对于数据集的行和列叫法不同.统计学家称它们为观测(observation)和变量(variable),数据库分析师则称其为记录(record)和字段(field),数据 ...
- LeetCode(不用加号的加法)
题目: 设计一个函数把两个数相加,不得使用+或者其他算数运算符. 示例: 输入:a=1,b=1 输出:2 提示: a,b均有可能是负数或0 结果不会溢出32位整数 初始思路: 看到题目我就明白只能用位 ...
- 每天都在用 Map,这些核心技术你知道吗?
本篇文章站在多线程并发安全角度,带你了解多线程并发使用 HashMap 将会引发的问题,深入学习 ConcurrentHashMap ,带你彻底掌握这些核心技术. 全文摘要: HashMap 核心技术 ...
- vue 阻止冒泡 @click.stop=
vue 阻止冒泡 @click.stop= vue中处理冒泡标准姿势 事件修饰符 Vue.js 为 v-on 提供了事件修饰符,修饰符是由点开头的指令后缀来表示的.这些事件修饰符主要有以下几个: st ...
- 详解如何快速使用数据可视化BI软件创建医疗运营监控数据中心大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以医疗运营监控数据中心大屏 ...
- Python接口测试(第一个接口返回的数据作为第二个参数的入参)
python代码如下 import requests url1="http://localhost:8080/pinter/com/getSku?id=1" respon=requ ...
- liunx 安装 zookeeper(转)
转自:https://www.cnblogs.com/expiator/p/9853378.html linux安装zookeeper及使用 一.安装条件 想要安装zookeeper,必须先在linu ...
- BigInteger实现除法取余
BigInteger实现除法取余 BigInteger是什么? Java中,整形的最大范围是64位的long型整数.但是如果我们使用的整数超过了64位呢?这时候就用到了BigInteger.BigIn ...
- H5新特性之语义化标签
一.为什么要增加新的语义化标签 在HTML 5出来之前,我们用div来表示章节,但是这些div都没有实际意义,这样的布局方式使我们的结构不够清晰,于是语义化标签应运而生. 二.何为语义化标签 顾名思义 ...