busybox编译安装并将其打包为docker基础镜像
busybox编译安装并将其打包为docker基础镜像busybox是一个开源项目,docker的很多轻量级镜像都是基于此制作出来的,现在的实验目标为:下载一个最新的busybox编译安装包,将它安装后,打包成一个可以运行的极为精简的系统镜像,可运行基础命令,比如,ls,more,cat等等命令,但没有用户系统这些。下载链接为:https://busybox.net/downloads/busyb
busybox编译安装并将其打包为docker基础镜像
busybox是一个开源项目,docker的很多轻量级镜像都是基于此制作出来的,现在的实验目标为:下载一个最新的busybox编译安装包,将它安装后,打包成一个可以运行的极为精简的系统镜像,可运行基础命令,比如,ls,more,cat等等命令,但没有用户系统这些。
下载链接为:https://busybox.net/downloads/busybox-1.32.0.tar.bz2
一,环境准备工作
所有工作都是在一台vm虚拟机上完成,系统为centos7,既然是编译,自然需要gcc这些基本的编译工具,因此,命令如下:
yum install ncurses-devel ncurses gcc gcc-c++ bzip2-y
打包成docker镜像,自然需要docker环境了哦。docker环境的建立没什么好说的了,请戳我的博客:
https://blog.csdn.net/alwaysbefine/article/details/110310112
二,解压下载下来的安装包
tar jxf busybox-1.32.0.tar.bz2
三,进入解压出来的目录,开始编译工作
busybox的编译比较类似内核编译,因此,不能直接make && make install。
上图提示,要么 make menuconfig 要么 make defconfig ,make menuconfig是菜单模式,类似内核编译的那种菜单, make defconfig 是默认选项编译,也就是所有编译都是按默认的来。
在这,我们选择使用第二个命令 make defconfig 所有默认即可。
执行命令:
make install
输出如下:
此时,在此目录下会生成一个_install 的文件夹,进入这个目录,看看有什么?
[root@centos8 _install]# pwd
/root/busybox-1.32.0/_install
[root@centos8 _install]# ll
total 8
drwxr-xr-x 2 root root 4096 Dec 19 20:57 bin
lrwxrwxrwx 1 root root 11 Dec 19 20:57 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 Dec 19 20:57 sbin
drwxr-xr-x 4 root root 29 Dec 19 20:57 usr
那么,这个时候的busybox可以打包了吗? NO,还需要四个本机的动态链接库,执行命令如下:
mkdir lib64
cp /lib64/libm.so.6 ./lib64/
cp /lib64/libc.so.6 ./lib64/
cp /lib64/ld-linux-x86-64.so.2 ./lib64/
cp /lib64/libresolv.so.2 ./lib64
四,开始打包工作
[root@centos8 _install]# pwd
/root/busybox-1.32.0/_install
[root@centos8 _install]# tar cf rootfs.tar .
tar: ./rootfs.tar: file is the archive; not dumped
[root@centos8 _install]# ll
total 12808
drwxr-xr-x 2 root root 4096 Dec 19 20:57 bin
drwxr-xr-x 2 root root 90 Dec 19 21:07 lib64
lrwxrwxrwx 1 root root 11 Dec 19 20:57 linuxrc -> bin/busybox
-rw-r--r-- 1 root root 4751360 Dec 19 21:07 rootfs.tar
drwxr-xr-x 2 root root 4096 Dec 19 20:57 sbin
drwxr-xr-x 4 root root 29 Dec 19 20:57 usr
rootfs.tar 这个文件就是打包后的成果,将该文件与下面所编写的dockerfile 文件放置在同一个目录下。
五,dockerfile 制作镜像,编写dockerfile 和build
vim Dockerfile
From scratch
ADD rootfs.tar /
CMD ["/bin/sh"]
官方说明:scratch镜像是一个空的镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像。地位类似于Oracle的dual表,如果有熟悉Oracle的同学我相信会立刻明白scratch是什么东西的。可以这么说,这玩意又玄又虚。
[root@centos8 _install]# docker build -t busybox:v1.0 .
Sending build context to Docker daemon 9.495MB
Step 1/3 : From scratch
--->
Step 2/3 : ADD rootfs.tar /
---> 5ef18d0fa9ec
Step 3/3 : CMD ["/bin/sh"]
---> Running in a2194430cbd2
Removing intermediate container a2194430cbd2
---> 5fd14d1f9b5f
Successfully built 5fd14d1f9b5f
Successfully tagged busybox:v1.0
六,查看新build的镜像,并运行测试它
[root@centos8 _install]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox v1.0 5fd14d1f9b5f About a minute ago 4.54MB
[root@centos8 _install]# docker run -it --rm busybox:v1.0
/ # ls
bin dev etc lib64 linuxrc proc sbin sys usr
/ # r
raidautorun readahead realpath renice return rmmod rtcwake runsv
rdate readlink reboot reset rev route run-init runsvdir
rdev readonly reformime resize rm rpm run-parts rx
read readprofile remove-shell resume rmdir rpm2cpio runlevel
/ # touch hello
/ # ls
bin dev etc hello lib64 linuxrc proc sbin sys usr
至此,一个袖珍的操作系统被打包到docker镜像内了,只有最基本的功能哦。包括镜像给的IP都有哦
[root@centos8 _install]# docker run -it --rm busybox:v1.0
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
更多推荐
所有评论(0)