Docker镜像的首行从FROM alpine之类的镜像开始,但是最初的基础镜像是如何创建的,本文使用一个busybox创建一个基础镜像,相信在此过程中会对docker一些相关的概念有进一步的理解。
什么是基础镜像(base image)
简单来说,基础镜像就是没有From或者FROM scratch开头的Dockerfile所构建出来的镜像。比如alpine,这个很小的linux镜像目前只有4M左右
[root@kong ~]# docker images |grep alpine
docker.io/alpine latest 3fd9065eaf02 4 months ago 4.15 MB
[root@kong ~]#
它的Dockerfile很简单,只有三行,这就是一个基础镜像,
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
在接下来的文章中我们将会像alpine那样来创建一个自己的基础镜像。
busybox
概要说明
busybox被称为嵌入式linux的瑞士军刀,这句话是在busybox自己介绍自己的时候提出的(The Swiss Army Knife of Embedded Linux)。busybox整合了很多小的unix下的通用功能到一个小的可执行文件之中,简单来说在unix或者linux下常用的那些功能在这里你都能找到,但是为了busybox的目标:嵌入式的linux,大小对于busybox来说是非常重要的优化要素和限制,这些功能有可能会有所阉割,但是对于一般需求来说已经足够。而alpine就是在busybox基础上增加了自己的包管理工具apk等功能创建了风靡一时的小巧镜像。busybox是用C语言开发的基于GPL的开源项目,目前的稳定版本为1.28.4
项目 | 说明 |
---|---|
官方网站 | https://busybox.net/ |
开源/闭源 | 开源 |
License类别 | GPL License v2 |
代码管理地址 | https://busybox.net/downloads/ |
开发语言 | C |
当前版本 | 1.28.4 (2018/05/22) |
宿主机器
[root@kong ~]# uname -a
Linux kong 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@kong ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@kong ~]#
下载busybox
简单可以直接使用的二进制最新的版本为1.28.1
[root@kong ~]# wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64
--2018-05-25 04:51:20-- https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64
Resolving busybox.net (busybox.net)... 140.211.167.122
Connecting to busybox.net (busybox.net)|140.211.167.122|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1001112 (978K)
Saving to: 'busybox-x86_64'
100%[==============================================================================================>] 1,001,112