转载自: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. SQLZOO练习三--SELECT within SELECT Tutorial

    This tutorial looks at how we can use SELECT statements within SELECT statements to perform more com ...

  2. 009 面试题 SQL语句各部分的执行顺序

    SQL语句各部分的执行顺序 select distinct...from t1 (left/right) join t2 on t1.xx=t2.xx where t1.xx=? and t2.xx= ...

  3. 5-8 Resource 静态资源服务器

    静态资源服务器 什么是静态资源服务器 我们无论做什么项目,都会有一些页面中需要显示的静态资源,例如图片,视频文档等 我们一般会创建一个单独的项目,这个项目中保存静态资源 其他项目可以通过我们保存资源的 ...

  4. JUC源码学习笔记3——AQS等待队列和CyclicBarrier,BlockingQueue

    一丶Condition 1.概述 任何一个java对象都拥有一组定义在Object中的监视器方法--wait(),wait(long timeout),notify(),和notifyAll()方法, ...

  5. .net6与英雄联盟邂逅之——根据官方LCU API制作游戏助手

    看了网上很多自己开发的英雄联盟的小助手工具,当时苦于没有api,自己也想做一个.后来发现了其实拳头本身就提供了LCU API在客户端运行的时候会暴露出来. 现在我们就来了解下工具的实现. 查询数据:h ...

  6. Odoo14 设置Binary字段默认值

    1 # Odoo 中的附件也就是Binary字段都是经过特殊处理的 2 # 首先是上传的时候会进行base64编码后再上传到服务器 3 # 服务器进行压缩存放在odoo文件仓库中 4 # 每个odoo ...

  7. Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/参数传递

    python基础02 条件控制 python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块 python中用elif代替了else if,所以if语句的关键字为:if- ...

  8. Luogu2922 [USACO08DEC]秘密消息Secret Message (Trie树)

    统计以节点\(i\)结尾的数量与经过的数量 #include <iostream> #include <cstdio> #include <cstring> #in ...

  9. Linux 11 安装Tomcat

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 这里使用解压缩方 ...

  10. DOM及DOM相关操作

    DOM 概述: DOM 全称(document object model)文档对象模型(文档指定为对应html文档),对应的DOM就是操作HTML文档的(增删改查) DOM结构 document 文档 ...