基於busybox構建最小linux Docker映象系統
基本概念
1. Dockerfile 中可以通過FROM scratch引用一個docker內建的空映象
2. Docker 容器的核心都是共享宿主作業系統的核心,容器啟動後docker會自動在容器內建立系統目錄:dev, etc, proc, run, sys 及系統檔案
3. Docker 容器內是一個隔離的基於宿主系統核心的執行環境(或理解為 作業系統)。Docker 內的作業系統是以動態庫、靜態庫、可執行程式及其他資原始檔形態體現,如CentOS就是將CentOS的各種系統庫、工具庫及程式檔案打包成Docker映象。
4. 一個最小的能在Docker執行的程式可以通過靜態編譯實現,由於沒有任何依賴(包括作業系統依賴,不含核心),可以直接在一個只包含該程式的Docker容器中啟動起來;
而一個動態編譯的程式,通常引用了系統庫和其他第三方庫。其中系統庫主要有:ld-linux ,libdl, libm, libc, libm。這種情況下,就必須按照linux約定將系統庫及第三方庫放到映象的 /lib或/lib64目錄下(現代系統通常都用64位,64位庫放到/lib64下,注意 /lib64是到/usr/lib64的軟連結)。如果依賴庫不全,docker 容器啟動的時候會報錯:standard_init_linux.go:175: exec user process caused "no such file or directory
因為要作一個最小的系統,又要實現一個linux系統的基本功能。因此選定busybox來實現這個系統。(busybox是靜態編譯,沒有任何依賴,無需系統庫及第三方庫,且1.21.1版本的busybox只有951K)。
構建過程:
1. 建立linux系統的基礎目錄
mkdir minos
cd minos
mkdir usr
mkdir usr/lib
mkdir usr/local
mkdir usr/lib64
mkdir usr/sbin
mkdir usr/include
mkdir usr/bin
mkdir var/
mkdir var/lib
mkdir var/run
mkdir var/local
mkdir var/log
mkdir tmp
2. 建立 /lib /lib64軟連結
ln -s usr/lib lib
ln -s usr/lib64 lib64
ln -s usr/bin bin
3. 下載busybox並拷貝至 usr/bin目錄
curl -O https://busybox.net/downloads/binaries/1.21.1/busybox-x86_64 mv busybox-x86_64 usr/bin/busybox
4. 生成系統指令軟連結
chmod +x usr/bin/busybox
./usr/bin/busybox
BusyBox v1.21.1 (2013-07-08 11:34:59 CDT) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
or: busybox --install [-s] [DIR]
or: function [arguments]...
BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as.
Currently defined functions:
[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename,
beep, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr,
chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, conspy, cp,
cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser,
depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du,
dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr,
fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs,
flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt,
getty, grep, groups, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd,
hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install,
ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode,
kill, killall, killall5, klogd, last, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap,
logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsusb,
lzcat, lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir,
mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp,
modinfo, modprobe, more, mount, mountpoint, mpstat, mt, mv, nameif, nanddump, nandwrite,
nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep,
pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, popmaildir, poweroff, powertop,
printenv, printf, ps, pscan, pstree, pwd, pwdx, raidautorun, rdate, rdev, readahead, readlink,
readprofile, realpath, reboot, reformime, remove-shell, renice, reset, resize, rev, rm, rmdir,
rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script,
scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons,
setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum, sha512sum, showkey, slattach,
sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin,
sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd,
tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6,
true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos,
unlzma, unlzop, unxz, unzip, uptime, users, usleep, uudecode, uuencode, vconfig, vi, vlock,
volname, wall, watch, watchdog, wc, wget, which, who, whoami, whois, xargs, xz, xzcat, yes,
zcat, zcip
利用http://tool.oschina.net/regex/ 提供的線上正則,正則表示式: \s*([^,]+),?\s*, 替換文字:ln -s busybox $1; 最終得到指令如下
cd usr/bin;
ln -s busybox [;ln -s busybox [[;ln -s busybox acpid;ln -s busybox add-shell;ln -s busybox addgroup;ln -s busybox adduser;ln -s busybox adjtimex;ln -s busybox arp;ln -s busybox arping;ln -s busybox ash;ln -s busybox awk;ln -s busybox base64;ln -s busybox basename;ln -s busybox beep;ln -s busybox blkid;ln -s busybox blockdev;ln -s busybox bootchartd;ln -s busybox brctl;ln -s busybox bunzip2;ln -s busybox bzcat;ln -s busybox bzip2;ln -s busybox cal;ln -s busybox cat;ln -s busybox catv;ln -s busybox chat;ln -s busybox chattr;ln -s busybox chgrp;ln -s busybox chmod;ln -s busybox chown;ln -s busybox chpasswd;ln -s busybox chpst;ln -s busybox chroot;ln -s busybox chrt;ln -s busybox chvt;ln -s busybox cksum;ln -s busybox clear;ln -s busybox cmp;ln -s busybox comm;ln -s busybox conspy;ln -s busybox cp;ln -s busybox cpio;ln -s busybox crond;ln -s busybox crontab;ln -s busybox cryptpw;ln -s busybox cttyhack;ln -s busybox cut;ln -s busybox date;ln -s busybox dc;ln -s busybox dd;ln -s busybox deallocvt;ln -s busybox delgroup;ln -s busybox deluser;ln -s busybox depmod;ln -s busybox devmem;ln -s busybox df;ln -s busybox dhcprelay;ln -s busybox diff;ln -s busybox dirname;ln -s busybox dmesg;ln -s busybox dnsd;ln -s busybox dnsdomainname;ln -s busybox dos2unix;ln -s busybox du;ln -s busybox dumpkmap;ln -s busybox dumpleases;ln -s busybox echo;ln -s busybox ed;ln -s busybox egrep;ln -s busybox eject;ln -s busybox env;ln -s busybox envdir;ln -s busybox envuidgid;ln -s busybox ether-wake;ln -s busybox expand;ln -s busybox expr;ln -s busybox fakeidentd;ln -s busybox false;ln -s busybox fbset;ln -s busybox fbsplash;ln -s busybox fdflush;ln -s busybox fdformat;ln -s busybox fdisk;ln -s busybox fgconsole;ln -s busybox fgrep;ln -s busybox find;ln -s busybox findfs;ln -s busybox flock;ln -s busybox fold;ln -s busybox free;ln -s busybox freeramdisk;ln -s busybox fsck;ln -s busybox fsck.minix;ln -s busybox fsync;ln -s busybox ftpd;ln -s busybox ftpget;ln -s busybox ftpput;ln -s busybox fuser;ln -s busybox getopt;ln -s busybox getty;ln -s busybox grep;ln -s busybox groups;ln -s busybox gunzip;ln -s busybox gzip;ln -s busybox halt;ln -s busybox hd;ln -s busybox hdparm;ln -s busybox head;ln -s busybox hexdump;ln -s busybox hostid;ln -s busybox hostname;ln -s busybox httpd;ln -s busybox hush;ln -s busybox hwclock;ln -s busybox id;ln -s busybox ifconfig;ln -s busybox ifdown;ln -s busybox ifenslave;ln -s busybox ifplugd;ln -s busybox ifup;ln -s busybox inetd;ln -s busybox init;ln -s busybox insmod;ln -s busybox install;ln -s busybox ionice;ln -s busybox iostat;ln -s busybox ip;ln -s busybox ipaddr;ln -s busybox ipcalc;ln -s busybox ipcrm;ln -s busybox ipcs;ln -s busybox iplink;ln -s busybox iproute;ln -s busybox iprule;ln -s busybox iptunnel;ln -s busybox kbd_mode;ln -s busybox kill;ln -s busybox killall;ln -s busybox killall5;ln -s busybox klogd;ln -s busybox last;ln -s busybox less;ln -s busybox linux32;ln -s busybox linux64;ln -s busybox linuxrc;ln -s busybox ln;ln -s busybox loadfont;ln -s busybox loadkmap;ln -s busybox logger;ln -s busybox login;ln -s busybox logname;ln -s busybox logread;ln -s busybox losetup;ln -s busybox lpd;ln -s busybox lpq;ln -s busybox lpr;ln -s busybox ls;ln -s busybox lsattr;ln -s busybox lsmod;ln -s busybox lsof;ln -s busybox lspci;ln -s busybox lsusb;ln -s busybox lzcat;ln -s busybox lzma;ln -s busybox lzop;ln -s busybox lzopcat;ln -s busybox makedevs;ln -s busybox makemime;ln -s busybox man;ln -s busybox md5sum;ln -s busybox mdev;ln -s busybox mesg;ln -s busybox microcom;ln -s busybox mkdir;ln -s busybox mkdosfs;ln -s busybox mke2fs;ln -s busybox mkfifo;ln -s busybox mkfs.ext2;ln -s busybox mkfs.minix;ln -s busybox mkfs.vfat;ln -s busybox mknod;ln -s busybox mkpasswd;ln -s busybox mkswap;ln -s busybox mktemp;ln -s busybox modinfo;ln -s busybox modprobe;ln -s busybox more;ln -s busybox mount;ln -s busybox mountpoint;ln -s busybox mpstat;ln -s busybox mt;ln -s busybox mv;ln -s busybox nameif;ln -s busybox nanddump;ln -s busybox nandwrite;ln -s busybox nbd-client;ln -s busybox nc;ln -s busybox netstat;ln -s busybox nice;ln -s busybox nmeter;ln -s busybox nohup;ln -s busybox nslookup;ln -s busybox ntpd;ln -s busybox od;ln -s busybox openvt;ln -s busybox passwd;ln -s busybox patch;ln -s busybox pgrep;ln -s busybox pidof;ln -s busybox ping;ln -s busybox ping6;ln -s busybox pipe_progress;ln -s busybox pivot_root;ln -s busybox pkill;ln -s busybox pmap;ln -s busybox popmaildir;ln -s busybox poweroff;ln -s busybox powertop;ln -s busybox printenv;ln -s busybox printf;ln -s busybox ps;ln -s busybox pscan;ln -s busybox pstree;ln -s busybox pwd;ln -s busybox pwdx;ln -s busybox raidautorun;ln -s busybox rdate;ln -s busybox rdev;ln -s busybox readahead;ln -s busybox readlink;ln -s busybox readprofile;ln -s busybox realpath;ln -s busybox reboot;ln -s busybox reformime;ln -s busybox remove-shell;ln -s busybox renice;ln -s busybox reset;ln -s busybox resize;ln -s busybox rev;ln -s busybox rm;ln -s busybox rmdir;ln -s busybox rmmod;ln -s busybox route;ln -s busybox rpm;ln -s busybox rpm2cpio;ln -s busybox rtcwake;ln -s busybox run-parts;ln -s busybox runlevel;ln -s busybox runsv;ln -s busybox runsvdir;ln -s busybox rx;ln -s busybox script;ln -s busybox scriptreplay;ln -s busybox sed;ln -s busybox sendmail;ln -s busybox seq;ln -s busybox setarch;ln -s busybox setconsole;ln -s busybox setfont;ln -s busybox setkeycodes;ln -s busybox setlogcons;ln -s busybox setserial;ln -s busybox setsid;ln -s busybox setuidgid;ln -s busybox sh;ln -s busybox sha1sum;ln -s busybox sha256sum;ln -s busybox sha3sum;ln -s busybox sha512sum;ln -s busybox showkey;ln -s busybox slattach;ln -s busybox sleep;ln -s busybox smemcap;ln -s busybox softlimit;ln -s busybox sort;ln -s busybox split;ln -s busybox start-stop-daemon;ln -s busybox stat;ln -s busybox strings;ln -s busybox stty;ln -s busybox su;ln -s busybox sulogin;ln -s busybox sum;ln -s busybox sv;ln -s busybox svlogd;ln -s busybox swapoff;ln -s busybox swapon;ln -s busybox switch_root;ln -s busybox sync;ln -s busybox sysctl;ln -s busybox syslogd;ln -s busybox tac;ln -s busybox tail;ln -s busybox tar;ln -s busybox tcpsvd;ln -s busybox tee;ln -s busybox telnet;ln -s busybox telnetd;ln -s busybox test;ln -s busybox tftp;ln -s busybox tftpd;ln -s busybox time;ln -s busybox timeout;ln -s busybox top;ln -s busybox touch;ln -s busybox tr;ln -s busybox traceroute;ln -s busybox traceroute6;ln -s busybox true;ln -s busybox tty;ln -s busybox ttysize;ln -s busybox tunctl;ln -s busybox udhcpc;ln -s busybox udhcpd;ln -s busybox udpsvd;ln -s busybox umount;ln -s busybox uname;ln -s busybox unexpand;ln -s busybox uniq;ln -s busybox unix2dos;ln -s busybox unlzma;ln -s busybox unlzop;ln -s busybox unxz;ln -s busybox unzip;ln -s busybox uptime;ln -s busybox users;ln -s busybox usleep;ln -s busybox uudecode;ln -s busybox uuencode;ln -s busybox vconfig;ln -s busybox vi;ln -s busybox vlock;ln -s busybox volname;ln -s busybox wall;ln -s busybox watch;ln -s busybox watchdog;ln -s busybox wc;ln -s busybox wget;ln -s busybox which;ln -s busybox who;ln -s busybox whoami;ln -s busybox whois;ln -s busybox xargs;ln -s busybox xz;ln -s busybox xzcat;ln -s busybox yes;ln -s busybox zcat;ln -s busybox zcip ;
cd -;
執行指令,建立軟連結
5. 編輯Dockerfile
FROM scratch
MAINTAINER YeQiang
ADD ./ /
RUN rm /Dockerfile
6. 製作映象
docker build -t minos .
7. 檢視映象
[[email protected] minos]$ docker images | grep minos
minos latest c43240f48fba 25 hours ago 973.4 kB
8. 測試映象
[[email protected] minos]$ docker run --rm -it minos /bin/sh
/ # ls -l
total 20
lrwxrwxrwx 1 0 0 7 Apr 18 02:40 bin -> usr/bin
drwxr-xr-x 5 0 0 380 Apr 18 09:28 dev
drwxr-xr-x 2 0 0 4096 Apr 18 09:28 etc
lrwxrwxrwx 1 0 0 7 Apr 18 06:20 lib -> usr/lib
lrwxrwxrwx 1 0 0 9 Apr 18 02:40 lib64 -> usr/lib64
dr-xr-xr-x 288 0 0 0 Apr 18 09:28 proc
drwxr-xr-x 3 0 0 4096 Apr 18 06:22 run
dr-xr-xr-x 13 0 0 0 Apr 18 00:32 sys
drwxrwxr-x 2 0 0 4096 Apr 18 06:18 tmp
drwxr-xr-x 8 0 0 4096 Apr 18 06:22 usr
drwxrwxr-x 6 0 0 4096 Apr 18 06:22 var
/ #
相關推薦
基於busybox構建最小linux Docker映象系統
基本概念 1. Dockerfile 中可以通過FROM scratch引用一個docker內建的空映象 2. Docker 容器的核心都是共享宿主作業系統的核心,容器啟動後docker會自動在容器內建立系統目錄:dev, etc, proc, run, sys 及系統檔案
構建最小JDK Docker映象
參考: https://my.oschina.net/shyloveliyi/blog/1627020 1、首先下載jre,下載地址是https://www.java.com/en/download/manual.jsp,大概是77M。  
構建最小JDK Docker鏡像
5.1 目錄 參考 linu x64 1.8 tps clas 運行 參考: https://my.oschina.net/shyloveliyi/blog/1627020 1、首先下載jre,下載地址是https://www.java.com/en/down
建立最小Java8 Docker映象
1. 參考 http://blog.csdn.net/hknaruto/article/details/70229896 , 構建一個最小Linux Docker映象 考慮到需要進入Docker容器檢視容器內部資料、狀態,因此引用一個基礎的Linux映象。如果沒有
為linux核心構建最小的根檔案系統-一步一步精簡
linux核心init程序函式的部分程式碼如下: 01 if (execute_command) 02 run_init_process(execute_command); 03 04 run_init_process("/sbin/init");
Yocto 初體驗 —— 構建最小化 Linux 發行版
Yocto Project 簡介 Yocto Project 是一個針對嵌入式應用,由全球各地開發人員共同開發、維護的開源軟體合作專案。該專案提供模板、工具和方法,幫你建立定製的 Linux 系統和嵌入式產品,而無需關心硬體體系,適合嵌入式Linux開發人員使用,極大地簡化了開發過程,因為你不用
最簡單的Docker映象教程:從頭基於空映象scratch建立一個新的Docker映象
我們在使用Dockerfile構建docker映象時,一種方式是使用官方預先配置好的容器映象。優點是我們不用從頭開始構建,節省了很多工作量,但付出的代價是需要下載很大的映象包。 比如我機器上docker images返回的這些基於nginx的映象,每個都超過了100MB,而一個簡單的
Docker多步構建更小的Java映象
譯者按: 最新版Docker將支援多步構建(Multi-stage build),這樣使用單個Dockerfile就可以定義多箇中間映象用於構建,測試以及釋出等多個步驟,並且有效減小最終映象的大小。 為了保證可讀性,本文采用意譯而非直譯。 Docker多步構建
用不到 50 行的 Python 代碼構建最小的區塊鏈
str 分享圖片 art contract 跟蹤 search 技術 font ima 引用 譯者註:隨著比特幣的不斷發展,它的底層技術區塊鏈也逐步走進公眾視野,引起大眾註意。本文用不到50行的Python代碼構建最小的數據區塊鏈,簡單介紹了區塊鏈去中心化的結構與其實現原理
一步步完善rootfs:1.移植busybox生成最小的rootfs
移植busybox生成最小的rootfs 一、下載 https://busybox.net/downloads/ 我下載的版本為1.29.2。 二、配置 在busybox的根目錄下修改Makefile檔案,將ARCH修改為arm,CROSS_COMPILE修改為/
基於centos7.2最小化環境, cdh manager 及 cdh 叢集的部署過程常見問題整理
注:此篇文章主要面向對hadoop有一定了解的開發和運維人員,若是初次接觸hadoop叢集,具體安裝過程請更多參考Ambari的安裝部署教程:http://blog.csdn.net/balabalayi/article/details/64920537 CDH Manager的部署與安裝與Am
busybox(三)最小根檔案系統
目錄 busybox(三)最小根檔案系統 引入 構建終端 構造inittab 配置應用程式 構建C庫 製作映像檔案yaffs title: busybox(三)最小根檔案系統 tag: arm date: 2018-11-14 1
製作最小linux系統
製作檔案系統需要使用到Busybox工具。Busybox是一個集成了一百多個最常用linux命令和工具的軟體。Busybox包含了一些簡單的工具,例如ls、cat和echo等,還包含了一些更大、更復雜的工具,如grep、find、m
基於自動分段最小二乘法對股票的多項式曲線擬合
基於自動分段最小二乘法對股票的多項式曲線擬合 摘 要 針對傳統的分段最小二乘法確定分段步長時經驗成分較多的不足,提出一種通過比較擬合優度,自動確定相對最優的步長。通過實際資料的驗證,驗證了此方法的擬合效果。 關鍵詞 分段擬合 多項式曲線 最小二乘法 引言
busybox製作最小根檔案系統
接上篇,qemu啟動linux核心 ,啟動核心失敗後,開始製作一個最小的ramdisk根檔案系統。 根檔案系統製作工具busybox,還是走大眾路線吧。原始碼包下載地址:https://busybox.net/ 直接進入busybox的根目錄,準備編譯,使用預設配置檔案defconfig,
訊為iTOP4412燒寫最小Linux系統
燒寫最小linux系統,需要四個檔案: 1、u-boot-iTOP-4412.bin 系統引導 2、zImage &n
基於OpenCV影象最小二乘相位解包裹演算法
QT:5.5.1 編譯器:mcvs2012 OpenCV:2.4.9 演算法寫在Qt上一個按鈕上,相當於一個main函式,主要是變化的源影象與目標影象的深度,通道的匹配容易報錯。 void MainWindow::on_pushButton_c
用不到 50 行的 Python 程式碼構建最小的區塊鏈
引用 譯者注:隨著比特幣的不斷髮展,它的底層技術區塊鏈也逐步走進公眾視野,引起大眾注意。本文用不到50行的Python程式碼構建最小的資料區塊鏈,簡單介紹了區塊鏈去中心化的結構與其實現原理。 儘管一些人認為區塊鏈是一個等待問題的解決方案,但毫無疑問,這種新技術是計算機的奇蹟。
基於CentOS7將JavaWeb專案生成docker映象
近段時間接觸docker,嘗試著將javaweb專案做成一個docker映象,下面具體說明生成步驟,如有不足,希望能在後續的學習中查漏補缺。 一 前提 關於docker環境的搭建這裡不再贅述,網上也有很多教程,值的一提的是centos7版本,Docker 軟
使用Maven外掛構建SpringBoot專案,生成Docker映象push到DockerHub上
一個用於構建和推送Docker映象的Maven外掛。 使用Maven外掛構建Docker映象,將Docker映象push到DockerHub上,或者私有倉庫,上一篇文章是手寫Dockerfile,這篇文章藉助開源外掛docker-maven-plugin 進行