使用 febootstrap 制作自定义基础镜像
转载自: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
,也是直接以文件方式导入到镜像中,同时增加了 CMD
和 LABEL
命令,增加了两层 Layer,不过大小为 0B,可以忽略不计。在此基础上通过 Dockerfile
方式构建的镜像 centos7.6:base
,继承了 centos:centos7.6.1810
的层级,同时增加了 RUN
和 MAINTAINER
两层。
对比可以看出,二者制作出来的基础镜像大小差不多,使用 Febootstrap 制作的镜像层级更少,安装扩展软件更加简单方便,为我们制作基础镜像提供了一种新的简单的途径。
使用 febootstrap 制作自定义基础镜像的更多相关文章
- docker commit 制作自定义tomcat镜像
官网下载的tomcat一般存在漏洞,在生产环境中一般是自己下载jdk和tomcat制作成一个新的镜像使用 1.将jdk和tomcat上传 2.生成 c3 容器 3.将jdk和tomcat拷贝到c3容器 ...
- 制作docker基础镜像
docker build -t tomcat:jre8-alpine . sudo docker tag 5a3 registry.cn-shenzhen.aliyuncs.com/ibase/tom ...
- 中标麒麟龙芯平台--docker基础镜像制作
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...
- 包含jdk和nginx的基础镜像
目的 制作一个基础镜像,包含jdk和nginx,这样要将java项目或一些前端页面做成容器,可以稍作修改引用该镜像. Dockerfile FROM alpine:3.8 ENV \ LANG=C.U ...
- Docker制作基础镜像
Docker镜像制作 方式一:手动运行一个容器,做好所有配置,然后把容器提交成一个镜像 方式二:使用DockerFile 示例1:做一个yum安装的nginx镜像 - 运行并进入一个centos容器: ...
- 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作
本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...
- 制作ACK集群自定义节点镜像的正确姿势
随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...
- 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)
使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714 原链接:https://community.bwbot. ...
- 使用Dockerfile文件制作centos6.8基础镜像,基于centos基础镜像的ssh远程登录镜像,jdk1.8镜像,tomcat镜像,elasticsearch镜像等等
一.首先制作一个centos6.8的裸机镜像 创建一个干净的目录: [root@docker centos6.]# ls c68-docker.tar.xz Dockerfile Dockerfile ...
随机推荐
- 2022-7-12 javascript(2) 第七组 刘昀航
@ 目录 2022-7-12学习 第七组 刘昀航 前情提要 一.for循环 二.for in循环 三.while 和 do...while循环 1.while do... while 四.内置函数 五 ...
- Rails_via牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28537/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...
- java------JRE和JDK
JDK(Java Development kit):Java开发工具包 包括 JVM(Java Virtual Machine):java虚拟机,真正运行java程序的地方(Java语言在运行时并不是 ...
- 丽泽普及2022交流赛day19 半社论
目录 No Problem Str Not TSP 题面 题解 代码 Game 题面 题解 代码 No Problem 暴力 Str 存在循环节,大力找出来即可,长度显然不超过 \(10^3\) . ...
- 基于LadybugFlow的微服务编排(1.SpringBoot集成)
前言 前面的系列文章里,介绍了ladybugflow的业务可视化的设计以及常见场景的使用方法. 感谢大家对项目的关注. 本篇文章介绍一下基于ladybugflow的微服务编排场景及使用方法. 1. 业 ...
- Modbus转Profinet网关案例 | 三菱FR-A700系列变频器配置方法
本案例是利用小疆智控Modbus转Profinet网关GW-PN5001把三菱FR-A700变频器接入到西门子1200PLC.实现Profinet转Modbus的通讯协议的互转. 用到设备有:三菱FR ...
- pat链表专题训练+搜索专题
本期题目包括: 1074:https://pintia.cn/problem-sets/994805342720868352/problems/994805394512134144 1052:http ...
- JAVA语言基础组成(2)
函数 函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...
- 使用docker简单编译k20pro内核
简介 本文将介绍一下如何使用docker编译红米k20pro的内核.作者当时尝试构建内核的原因是为了将3年前(好像是吧)购买的k20pro至尊版(已退役,12GB内存,512GB硬盘)制作成一个小的服 ...
- SpringBean的实例化
在Spring框架中,想使用Spring容器中的Bean,需要先实例化Bean SpringBean的实例化有3种方式 构造方法实例化 (最常用) 在Java配置类中,写一个构造方法,在这个构造方法中 ...