转载自:https://cloud.tencent.com/developer/article/1454524

文章目录1、febootstrap 介绍2、环境、软件准备3、febootstrap 安装3.1、Centos6 操作系统安装3.2、Centos7 操作系统安装4、制作自定义基础镜像5、对比 Dockerfile 制作镜像

1、febootstrap 介绍

febootstrap 是一个方便我们制作原生 OS 基础镜像的工具,例如 Centos、Ubuntu 等操作系统,同时还可以指定安装一些特定软件到环境镜像里面,可以使我们更方便的了解和控制基础镜像的构成,最后,通过该基础镜像在扩展成应用镜像,最终来部署服务。

2、环境、软件准备

本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:

  • Docker: 18.09.2
  • Oracle VirtualBox: 6.0.8 r130520 (Qt5.6.3)
  • Linux: 7.6.1810
  • Febootstrap: 3.21-4.el6

注意:这里可以在本机的 VM 虚拟机里面安装 Linux 系统,这里我选择 Oracle VirtualBox。制作原生基础 Image 需要依赖底层 Docker 环境,所以本机需要提前安装好 Docker 环境,这里忽略 Docker、VirtualBox 的安装过程。

3、febootstrap 安装

在 Centos 系统上安装 Febootstrap 很简单,但是要注意在 Centos6 系列中,该包是默认可用使用的,在 Centos7 系列中,默认的源中是不带此包的。所以针对不同的系统,安装方式略有不同。

3.1、Centos6 操作系统安装

因为在 Centos6 系统,默认源中存在该包,可以直接使用 yum 安装。

$ yum install febootstrap -y

3.2、Centos7 操作系统安装

由于在 Centos7 系统中,默认源中不存在该包,无法用 yum 直接安装,但是可以在 Centos6 上用 yumdownloader 下载 rpm 包,然后到 Centos7 上安装。这里我给出可以直接下载的 Febootstrap 及其依赖的 rpm 包地址,下载到本地,直接安装即可。

# 下载 rmp 包
$ wget http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/febootstrap-3.21-4.el6.x86_64.rpm
$ wget http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/fakechroot-2.9-24.5.el6_1.1.x86_64.rpm
$ wget https://www.dwhd.org/wp-content/uploads/2016/06/febootstrap-supermin-helper-3.21-4.el6_.x86_64.rpm
$ wget http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/fakechroot-libs-2.9-24.5.el6_1.1.x86_64.rpm
$ wget http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/fakeroot-1.12.2-22.2.el6.x86_64.rpm
$ wget http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/fakeroot-libs-1.12.2-22.2.el6.x86_64.rpm # 安装 rpm 包
$ rpm -ivh *.rpm
warning: fakechroot-2.9-24.5.el6_1.1.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:febootstrap-supermin-helper-3.21-################################# [ 17%]
2:fakeroot-libs-1.12.2-22.2.el6 ################################# [ 33%]
3:fakeroot-1.12.2-22.2.el6 ################################# [ 50%]
4:fakechroot-libs-2.9-24.5.el6_1.1 ################################# [ 67%]
5:fakechroot-2.9-24.5.el6_1.1 ################################# [ 83%]
6:febootstrap-3.21-4.el6 ################################# [100%]

安装完毕,本地就可以使用 Febootstrap 命令制作原生操作系统基础镜像了。

4、制作自定义基础镜像

制作之前,我们先了解一下 Febootstrap 操作的一些基本命令。

febootstrap -i bash -i wget -i apt-get centos72 centos72-image http://mirrors.163.com/centos/7.2.1511/os/x86_64/
  • -i 需要安装的 package,例如这里安装 bash、wget、apt-get。
  • centos72 指定 Image 操作系统版本
  • centos72-image 生成的镜像目录,会在当前目录下生成 centos72-image 目录。
  • http://mirrors.163.com/centos/7.2.1511/os/x86_64/ 镜像 OS 源地址,可以修改为其它源地址

这里我以 Centos7.6 操作系统为例,制作基于原生 Centos7.6 OS 操作系统,并添加一些必要的软件工具(方便在镜像内调试使用)。

$ febootstrap -i bash -i wget -i yum -i telnet -i iputils -i iproute -i vim -i gzip -i tar centos76 centos76-extend http://mirrors.aliyun.com/centos/7/os/x86_64/

# 下载安装完毕后目录(相当于本地一个完整的 centos7.6 的系统目录)
$ ll centos76-extend/
total 8
lrwxrwxrwx. 1 root root 7 Jun 9 15:50 bin -> usr/bin
dr-xr-xr-x. 2 root root 6 Apr 11 2018 boot
drwxr-xr-x. 5 root root 186 Apr 11 2018 dev
drwxr-xr-x. 49 root root 4096 Jun 9 15:51 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Jun 9 15:50 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jun 9 15:50 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x. 2 root root 6 Apr 11 2018 proc
dr-xr-x---. 2 root root 6 Apr 11 2018 root
drwxr-xr-x. 12 root root 149 Jun 9 15:51 run
lrwxrwxrwx. 1 root root 8 Jun 9 15:50 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 2 root root 6 Apr 11 2018 sys
drwxrwxrwt. 7 root root 93 Jun 9 15:51 tmp
drwxr-xr-x. 13 root root 155 Jun 9 15:50 usr
drwxr-xr-x. 18 root root 238 Jun 9 15:50 var # 将当前目录打包并导入到镜像
$ tar -c .|docker import - centos7.6:base-extend
sha256:495a4b1d9b504cb23b1ae89b5d5187eebd6163639384f5cd2605b620c488c3be $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7.6 base-extend 495a4b1d9b50 21 seconds ago 442MB

至此,我们使用 Febootstrap 基于 Centos7.6 OS 系统制作并扩展安装指定软件的镜像就制作好了,我们可以运行该镜像,并进入到容器内查看下系统版本以及指定软件是否已安装。

$ docker run -i -t centos7.6:base-extend /bin/sh
WARNING: IPv4 forwarding is disabled. Networking will not work.
sh-4.2# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
sh-4.2# vim a.txt
......

可以看到,一切都符合我们的要求,而且可以看到该镜像大小仅仅 442MB,非常的小,有助于镜像拉取。同理,我们可以使用该工具制作出 Centos 其他各版本基础镜像,以及其他 Linux 操作系统的基础镜像,这里就不在演示了。

不过需要提一下的是,在最后一个参数镜像 OS 源地址这里,默认 Centos 官方 mirror 地址里面,/centos/7/os/x86_64/ 地址指向的是最新版本,目前最先版本为 7.6.1810,所以使用该源地址只能制作出 7.6 版本镜像,如果想制作其他版本镜像,需要指向不同版本对应的源地址。但是官方非最新版本里面 OS 文件已经不存在,所以无法直接指定。但是,我们可以查找其他源地址,每个源地址里面包含完整的 OS 文件即可。例如:http://mirror.nsc.liu.se/centos-store/ 该 mirror 地址就符合要求,以制作 7.3 版本镜像为例,可以使用如下命令:

$ febootstrap -i bash -i wget -i yum -i telnet -i iputils -i iproute -i vim -i gzip -i tar centos73 centos73-extend http://mirror.nsc.liu.se/centos-store/7.3.1611/os/x86_64/

5、对比 Dockerfile 制作镜像

上边通过 Febootstrap 工具制作出 Centos7.6 基础镜像并安装部分软件,我们知道 Docker Hub 官方也提供了 Centos 各个版本基础镜像,而且镜像大小非常小,只有 200M 左右,那么我们通过该基础镜像,使用 Dockerfile方式,同样安装以上指定软件,制作出基础镜像,来对比一下二者的镜像大小以及 Layer 层级数量吧!

同样,先拉取 centos:centos7.6.1810 版本到本地,看下镜像大小,然后根据此镜像,制作新的扩展基础镜像。

$ docker pull centos:centos7.6.1810
$ # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7.6 base-extend 495a4b1d9b50 About an hour ago 442MB
centos centos7.6.1810 f1cb7c7d58b7 2 months ago 202MB

可以看到,基础镜像只有 202M,但是这个是纯净版,一些常用的软件都没有安装,那么使用 Dockerfile 同样安装上边那些软件,来对比看一下。

$ vim Dockerfile
FROM centos:centos7.6.1810 MAINTAINER huwanyang168 <huwanyang168@163.com> RUN yum update -y && yum install -y \
bash \
wget \
yum \
telnet \
iputils \
iproute \
vim \
gzip \
tar \
&& yum -y clean all
$ docker build -t centos7.6:base .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7.6 base 62c969b77b45 About a minute ago 388MB
centos7.6 base-extend 495a4b1d9b50 About an hour ago 442MB
centos centos7.6.1810 f1cb7c7d58b7 2 months ago 202MB

同样我们也验证一下该镜像是否符合要求,也是没有问题的。

$ docker run -i -t centos7.6:base /bin/sh
sh-4.2# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
sh-4.2# vim a.txt
......

通过上边镜像对比,两种方式制作出来的镜像大小差别不是很大,但是他们的 Layer 层级是否也差不多呢?接下来我们分别看一下,通过 docker history 命令可以查看 Image 的 Layer。

$ docker history centos7.6:base-extend
IMAGE CREATED CREATED BY SIZE COMMENT
495a4b1d9b50 About an hour ago 442MB Imported from - $ docker history centos:centos7.6.1810
IMAGE CREATED CREATED BY SIZE COMMENT
f1cb7c7d58b7 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:54b004357379717df… 202MB $ docker history centos7.6:base
IMAGE CREATED CREATED BY SIZE COMMENT
62c969b77b45 11 minutes ago /bin/sh -c yum update -y && yum install -y … 187MB
da8d12eb70fc 15 minutes ago /bin/sh -c #(nop) MAINTAINER huwanyang168 <… 0B
f1cb7c7d58b7 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:54b004357379717df… 202MB

从上边可以看到,使用 Febootstrap 方式制作的镜像 centos7.6:base-extend,由于是直接本地下载好系统环境镜像并安装软件到里面,然后直接打包导入到镜像中,所以只有一层。 Docker Hub 官方基础镜像centos:centos7.6.1810,也是直接以文件方式导入到镜像中,同时增加了 CMDLABEL 命令,增加了两层 Layer,不过大小为 0B,可以忽略不计。在此基础上通过 Dockerfile 方式构建的镜像 centos7.6:base,继承了 centos:centos7.6.1810 的层级,同时增加了 RUNMAINTAINER 两层。

对比可以看出,二者制作出来的基础镜像大小差不多,使用 Febootstrap 制作的镜像层级更少,安装扩展软件更加简单方便,为我们制作基础镜像提供了一种新的简单的途径。

使用 febootstrap 制作自定义基础镜像的更多相关文章

  1. docker commit 制作自定义tomcat镜像

    官网下载的tomcat一般存在漏洞,在生产环境中一般是自己下载jdk和tomcat制作成一个新的镜像使用 1.将jdk和tomcat上传 2.生成 c3 容器 3.将jdk和tomcat拷贝到c3容器 ...

  2. 制作docker基础镜像

    docker build -t tomcat:jre8-alpine . sudo docker tag 5a3 registry.cn-shenzhen.aliyuncs.com/ibase/tom ...

  3. 中标麒麟龙芯平台--docker基础镜像制作

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...

  4. 包含jdk和nginx的基础镜像

    目的 制作一个基础镜像,包含jdk和nginx,这样要将java项目或一些前端页面做成容器,可以稍作修改引用该镜像. Dockerfile FROM alpine:3.8 ENV \ LANG=C.U ...

  5. Docker制作基础镜像

    Docker镜像制作 方式一:手动运行一个容器,做好所有配置,然后把容器提交成一个镜像 方式二:使用DockerFile 示例1:做一个yum安装的nginx镜像 - 运行并进入一个centos容器: ...

  6. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  7. 制作ACK集群自定义节点镜像的正确姿势

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  8. 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)

    使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714   原链接:https://community.bwbot. ...

  9. 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等

    一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...

随机推荐

  1. HBase学习(四) 二级索引 rowkey设计

    HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...

  2. Spring基础入门

    一.Spring了解 Spring:程序员们的春天 Spring主要技术是IOC.AOP两个大概念 它是轻量级的,每个jar包就1M ~ 3M 左右,所以速度快 面向接口编程:降低了耦合度 面向切面编 ...

  3. 启用Hyper-v后,重启后界面提示 无法完成功能配置,正在撤销更改

    安装docker后,提示需要启用hyper-v,在控制面板中勾选Hyper-v,然后重启,更新快完成就提示无法完成功能配置,正在撤销更改 解决方法 方法1 控制面板一个一个选 方法2 百度了n多内容, ...

  4. 小A的柱状图_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/Q 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...

  5. 两个比较好用的JS方法,用来处理树形结构!

    一.平级结构转树形结构 /** * 平级结构转树形结构 * * 示例:const jsonDataTree = listTransToTreeData(jsonData, 'id', 'pid', ' ...

  6. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  7. linux 编译式安装apache

    apache的安装需要两个组件,APR对于Tomcat最大的作用就是socket调度 组件下载解压完成 ,讲两个组件解压包移动到apache的类库文件夹内 注:如果系统自带了apr和apr-util可 ...

  8. Java面试题(四)--RabbitMQ

    1.MQ有哪些使用场景?(高频) 异步处理:用户注册后,发送注册邮件和注册短信.用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务. 系统解耦:比如用注册完成,再加一个发送微信通知.只 ...

  9. MySQL 的prepare使用中的bug解析过程

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 一.问题发现 二.问题调查过程 三.问题解决方案 四.问题总结 一.问题发现 在一次开发中使用 MySQL PREP ...

  10. Tomcat启动失败 提示Server Tomcat v7.0 Server at localhost failed to start.六种解决方法

    Tomcat启动失败,提示Server Tomcat v7.0 Server at localhost failed to start 在一次查看自己以前写过的项目中,运行tomcat失败,出现如图提 ...