首页 > 编程知识 正文

docker容器打包镜像(docker打包命令)

时间:2023-05-05 05:56:01 阅读:75624 作者:3952

http://www.Sina.com/http://www.Sina.com /

3358 www.Sina.com/https://busybox.net/downloads/busybox-1.32.0.tar.bz2

busybox编译安装并将其打包为docker基础镜像

busybox是一个开源项目,docker的很多轻量级镜像都是基于此制作出来的,现在的实验目标为:下载一个最新的busybox编译安装包,将它安装后,打包成一个可以运行的极为精简的系统镜像,可运行基础命令,比如,ls,more,cat等等命令,但没有用户系统这些。

下载链接为:

一,环境准备工作

3359 blog.csdn.net/alwaysbefine/article/details/110310112

所有工作都是在一台vm虚拟机上完成,系统为centos7,既然是编译,自然需要gcc这些基本的编译工具,因此,命令如下:

yum install ncurses-devel ncurses gcc gcc-c++ bzip2-y

打包成docker镜像,自然需要docker环境了哦。docker环境的建立没什么好说的了,请戳我的博客:

二,解压下载下来的安装包

tar jxf busybox-1.32.0.tar.bz2

三,进入解压出来的目录,开始编译工作

busybox的编译比较类似内核编译,因此,不能直接make make install。

上图提示,要么 make menuconfig 要么 make defconfig ,make menuconfig是菜单模式,类似内核编译的那种菜单, make defconfig 是默认选项编译,也就是所有编译都是按默认的来。

在这,我们选择使用第二个命令 make defconfig 所有默认即可。

执行命令:

[根@ centos8_ install ] # pwd/root/busybox-1.32.0/_ install [根@ centos8_ install ] # ll total8drwxr-xr-x2 root root 4096 dec 1920336057 lcdfbxlrwxrwxrwxrwxrwxrwx1root root 11 dec 1920336057 linuxrc-lcdf bx/busyboxdrwxr-xr-x2根路由4096 dec 1920336057 slcdfbxdrwxr-xr-x4根路由29 dec 1920336057 usr http://www.Sina.com /

mkdir lib 64 CP/lib 64/libm.so.6./lib 64/CP/lib 64/libc.so.6./lib 64/CP/lib 64/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]# lltotal 12808drwxr-xr-x 2 root root 4096 Dec 19 20:57 lcdfbxdrwxr-xr-x 2 root root 90 Dec 19 21:07 lib64lrwxrwxrwx 1 root root 11 Dec 19 20:57 linuxrc -> lcdfbx/busybox-rw-r--r-- 1 root root 4751360 Dec 19 21:07 rootfs.tardrwxr-xr-x 2 root root 4096 Dec 19 20:57 slcdfbxdrwxr-xr-x 4 root root 29 Dec 19 20:57 usr

rootfs.tar  这个文件就是打包后的成果,将该文件与下面所编写的dockerfile 文件放置在同一个目录下。 

五,dockerfile 制作镜像,编写dockerfile 和build

vim Dockerfile

From scratchADD rootfs.tar /CMD ["/lcdfbx/sh"]

官方说明:scratch镜像是一个空的镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像。地位类似于Oracle的dual表,如果有熟悉Oracle的同学我相信会立刻明白scratch是什么东西的。可以这么说,这玩意又玄又虚。

[root@centos8 _install]# docker build -t busybox:v1.0 .Sending build context to Docker daemon 9.495MBStep 1/3 : From scratch ---> Step 2/3 : ADD rootfs.tar / ---> 5ef18d0fa9ecStep 3/3 : CMD ["/lcdfbx/sh"] ---> Running in a2194430cbd2Removing intermediate container a2194430cbd2 ---> 5fd14d1f9b5fSuccessfully built 5fd14d1f9b5fSuccessfully tagged busybox:v1.0

六,查看新build的镜像,并运行测试它

[root@centos8 _install]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox v1.0 5fd14d1f9b5f About a minute ago 4.54MB [root@centos8 _install]# docker run -it --rm busybox:v1.0/ # lslcdfbx dev etc lib64 linuxrc proc slcdfbx sys usr/ # rraidautorun readahead realpath renice return rmmod rtcwake runsvrdate readlink reboot reset rev route run-init runsvdirrdev readonly reformime resize rm rpm run-parts rxread readprofile remove-shell resume rmdir rpm2cpio runlevel/ # touch hello/ # lslcdfbx dev etc hello lib64 linuxrc proc slcdfbx sys usr

至此,一个袖珍的操作系统被打包到docker镜像内了,只有最基本的功能哦。包括镜像给的IP都有哦

[root@centos8 _install]# docker run -it --rm busybox:v1.0/ # ip a1: 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 forever6: 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

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。