如何把ISO镜像转换成Docker镜像

最近开始研究docker,如果想要自己创建个镜像,必须从Docker Hub上面获取一个基础镜像来创建;对于我们公司是定制的ISO,我就在想有没有办法把ISO转换成Docker格式,然后上传到Docker Hub上作为基础镜像使用。

1.准备阶段

首先,在一台虚拟机中安装好需要转换的ISO镜像,本文以CentOS 7.2为例;

其次,进入装好的系统,到根目录下面我们可以看到如下文件夹:

[[email protected] /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

其中/proc、/sys、/run、/dev这几个目录都是系统启动时自动生成的,虽然也属于文件系统一部分,但是他们每次开机都会有变化,所以打包的时候就应该忽略它们。

2.打包系统

直接运行如下命令

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

命令运行完成后再/tmp目录生成了一个system.tar文件,如果tar文件太大的话,也可以继续压缩成tar.gz格式。

就可以把打包好的文件导入到docker了。

3.导入docker

tar文件导入到docker方法很多,下面两种办法测试了都可以。

cat system.tar |docker import - centos:7.2

docker import system.tar centos:7.2

[[email protected] ~]# du -sh system.tar 
1.2G    system.tar
[[email protected] ~]# cat system.tar |docker import - centos:7.2
sha256:72cc6a6d481b512c04d7d1012bc6e50f54c856bdbd87b25c0b7aed9765af94c1
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7.2                 72cc6a6d481b        6 seconds ago       1.197 GB

4.导入成功后,接下去就可以运行容器了.

# docker run -t -i centos:7.2 /bin/bash

[[email protected] ~]# docker run -it --rm centos:7.2 /bin/bash
[[email protected] /]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 6  bytes 508 (508.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 508 (508.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] /]# exit
exit
[[email protected] ~]#

镜像做好之后就可以push到docker hub上了,不过我发现做好的镜像还是挺大的有1.2G,这样push的时候就会很慢很慢。

原文地址:http://blog.51cto.com/dengaosky/2064111

时间: 2024-10-27 10:28:07

如何把ISO镜像转换成Docker镜像的相关文章

使用docker-machine 创建virtualbox虚拟机时指定boot2docker.iso位置和设置docker镜像加速的命令

docker-machine create -d virtualbox --virtualbox-boot2docker-url=/home/当前用户/.docker/machine/cache/boot2docker2.iso --engine-registry-mirror=https://3qtk5f5j.mirror.aliyuncs.com node1 -d virtualbox为指定virtualbox创建虚拟机 -virtualbox-boot2docker-url=/home/当

docker镜像、容器

第一部分:Docker镜像的基本知识 1.1 什么是Docker镜像 从整体的角度来讲,一个完整的Docker镜像可以支撑一个Docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角.例如一个ubuntu:14.04的镜像,提供了一个基本的ubuntu:14.04的发行版,当然此 镜像是不包含操作系统Linux内核的. 说到此,可能就需要注意一下,linux内核和ubuntu:14.04Docker镜像的区别了.传统虚拟机安装ubuntu:14.04会包含两部分,第一,某一个L

springboot构建rest服务,打包docker镜像

场景 项目提供rest服务,需要导出rest接口文档,并把服务打包成docker镜像. 过程 1.使用SpringBoot实现rest服务 Maven的pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://mav

将php项目打包docker镜像

简介:有时候我们需要将php的项目打包成docker镜像,这里介绍下 思路:我们php和apache结合一个镜像实现php项目的访问,mysql是一个单独的镜像 步骤: 1.首先我们在本地测试好自己的php项目是不是可以用的,毕竟放到服务器上面后测试就不是很方便了.然后我们将php的项目导入到服务器中,在项目目录下新建index.php,myapp/index.php内容: <?php echo "Hello";?> 2.在项目的同目录下新建Dockerfile文件,内容:

Docker 镜像之存储管理

笔者在<Docker 镜像之进阶篇>中介绍了镜像分层.写时复制以及内容寻址存储(content-addressable storage)等技术特性,为了支持这些特性,docker 设计了一套镜像元数据管理机制来管理镜像元数据.另外,为了能够让 docker 容器适应不同平台不同应用场景对存储的要求,docker 提供了各种基于不同文件系统实现的存储驱动来管理实际镜像文件. 本文我们就来介绍 docker 如何管理镜像元数据,以及如何通过存储驱动来管理实际的容器镜像文件. Docker 镜像元数

Docker 镜像与容器管理(2)

title: Docker 镜像与容器管理(2) date: 2018-12-14 17:04:05 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.D

深入分析 Docker 镜像原理

摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分:1)Docker 镜像的基本知识:2)Dockerfile,Docker 镜像与 Docker 容器的关系. 嘉宾介绍:孙宏亮,硕士,浙江大学毕业,现为 DaoCloud 软件工程师,出版有<Docker 源码分析>,目前主要负责企业级容器云平台的研发工作.数年来一直从事云计算.PaaS 领域的

深刻理解Docker镜像大小

都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊. 是否还记得第一个接触Docker的时候,你从Docker Hub下拉的那个镜像呢?在那个处女镜像的基础上.你执行了容器生涯的处女容器.镜像的基石作用已经非常明显.在Docker的世界里,能够说是:No Image,No Container. 再进一步思考Docker镜像,大家可能非常快就会联想到下面几类镜像: 1.系统级镜像:如Ubuntu镜像.CentOS镜像以及Debian容器等: 2.工具栈镜像:如Golang镜像.

Docker笔记三 Docker镜像制作

Docker笔记三 Docker镜像制作 1.Docker镜像制作方法: docker commit 保存当前container的状态到镜像,生成image. docker build 利用dockerfile自动化生成image. 2.制作方法 docker commit方式 #启动镜像名称为centos的一个容器(container)  [[email protected] ~]#docker run -it centos /bin/bash #在容器内安装httpd服务 [[email p