前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 febootstrap 制作自定义基础镜像

使用 febootstrap 制作自定义基础镜像

作者头像
哎_小羊
发布2019-07-02 13:38:43
2K0
发布2019-07-02 13:38:43
举报
文章被收录于专栏:哎_小羊

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1454524

文章目录

代码语言:txt
复制
- [1、febootstrap 介绍](http://yehe.isd.com/column/support-plan/article-edit/5256050#1febootstrap__1)
- [2、环境、软件准备](http://yehe.isd.com/column/support-plan/article-edit/5256050#2_5)
- [3、febootstrap 安装](http://yehe.isd.com/column/support-plan/article-edit/5256050#3febootstrap__17)
    - [3.1、Centos6 操作系统安装](http://yehe.isd.com/column/support-plan/article-edit/5256050#31Centos6__21)
    - [3.2、Centos7 操作系统安装](http://yehe.isd.com/column/support-plan/article-edit/5256050#32Centos7__28)
- [4、制作自定义基础镜像](http://yehe.isd.com/column/support-plan/article-edit/5256050#4_55)
- [5、对比 Dockerfile 制作镜像](http://yehe.isd.com/column/support-plan/article-edit/5256050#5_Dockerfile__122)

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 安装。

代码语言:javascript
复制
$ yum install febootstrap -y

3.2、Centos7 操作系统安装

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

代码语言:javascript
复制
# 下载 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 操作的一些基本命令。

代码语言:javascript
复制
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 操作系统,并添加一些必要的软件工具(方便在镜像内调试使用)。

代码语言:javascript
复制
$ 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 系统制作并扩展安装指定软件的镜像就制作好了,我们可以运行该镜像,并进入到容器内查看下系统版本以及指定软件是否已安装。

代码语言:javascript
复制
$ 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 版本镜像为例,可以使用如下命令:

代码语言:javascript
复制
$ 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 版本到本地,看下镜像大小,然后根据此镜像,制作新的扩展基础镜像。

代码语言:javascript
复制
$ 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 同样安装上边那些软件,来对比看一下。

代码语言:javascript
复制
$ 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
代码语言:javascript
复制
$ 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

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

代码语言:javascript
复制
$ 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。

代码语言:javascript
复制
$ 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 制作的镜像层级更少,安装扩展软件更加简单方便,为我们制作基础镜像提供了一种新的简单的途径。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1、febootstrap 介绍
  • 2、环境、软件准备
  • 3、febootstrap 安装
    • 3.1、Centos6 操作系统安装
      • 3.2、Centos7 操作系统安装
      • 4、制作自定义基础镜像
      • 5、对比 Dockerfile 制作镜像
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档