亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Docker利用busybox創建基礎鏡像(base image)

2024-09-01 13:56:19
字體:
來源:轉載
供稿:網友

Docker鏡像的首行從FROM alpine之類的鏡像開始,但是最初的基礎鏡像是如何創建的,本文使用一個busybox創建一個基礎鏡像,相信在此過程中會對docker一些相關的概念有進一步的理解。

什么是基礎鏡像(base image)

簡單來說,基礎鏡像就是沒有From或者FROM scratch開頭的Dockerfile所構建出來的鏡像。比如alpine,這個很小的linux鏡像目前只有4M左右

[root@kong ~]# docker images |grep alpinedocker.io/alpine        latest       3fd9065eaf02    4 months ago    4.15 MB[root@kong ~]#

它的Dockerfile很簡單,只有三行,這就是一個基礎鏡像,

FROM scratchADD 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

Docker,busybox,基礎鏡像

宿主機器

[root@kong ~]# uname -aLinux 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_64Resolving busybox.net (busybox.net)... 140.211.167.122Connecting to busybox.net (busybox.net)|140.211.167.122|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 1001112 (978K)Saving to: 'busybox-x86_64'100%[==============================================================================================>] 1,001,112  19.3KB/s  in 30s  2018-05-25 04:51:57 (32.4 KB/s) - 'busybox-x86_64' saved [1001112/1001112][root@kong ~]#

設定busybox

[root@kong ~]# cp busybox-x86_64 /usr/local/bin/busybox[root@kong ~]# chmod +x /usr/local/bin/busybox[root@kong ~]# which busybox/usr/local/bin/busybox[root@kong ~]#

版本確認

輸入busybox可以看出版本以及熟悉的linux下的工具,仔細看一遍就會理解busybox號稱自己是瑞士軍刀一點都不夸張,反過來說,瑞士軍刀如果敢號稱linux里的busybox可能會引起非議。

[root@kong ~]# busyboxBusyBox v1.28.1 (2018-02-15 14:34:02 CET) multi-call binary.BusyBox is copyrighted by many authors between 1998-2015.Licensed under GPLv2. See source distribution for detailedcopyright 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, arch, arp, arping, ash, awk, base64, basename, beep, blkdiscard, blkid,  blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, 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, dpkg, dpkg-deb, du, dumpkmap,  dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, factor, fakeidentd, fallocate, false,  fatattr, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck,  fsck.minix, fsfreeze, fstrim, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, groups, gunzip, gzip, halt, hd, hdparm,  head, hexdump, hexedit, hostid, hostname, httpd, hush, hwclock, i2cdetect, i2cdump, i2cget, i2cset, id, ifconfig, ifdown,  ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, ipneigh,  iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, less, link, linux32, linux64, linuxrc, ln, loadfont,  loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lsof, lspci, lsscsi, lsusb, lzcat, lzma,  lzop, 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, nl, nmeter, nohup, nproc, nsenter, nslookup, ntpd, nuke, od, openvt, partprobe, passwd, paste,  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, resume, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-init, run-parts,  runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfattr, setfont, setkeycodes,  setlogcons, setpriv, setserial, setsid, setuidgid, sh, sha1sum, sha256sum, sha3sum, sha512sum, showkey, shred, shuf, slattach,  sleep, smemcap, softlimit, sort, split, ssl_client, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svc, svlogd,  swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd,  time, timeout, top, touch, tr, traceroute, traceroute6, true, truncate, tty, ttysize, tunctl, ubiattach, ubidetach, ubimkvol,  ubirename, ubirmvol, ubirsvol, ubiupdatevol, udhcpc, udhcpd, udpsvd, uevent, umount, uname, unexpand, uniq, unix2dos, unlink,  unlzma, unshare, unxz, unzip, uptime, users, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, w, wall, watch, watchdog,  wc, wget, which, who, whoami, whois, xargs, xxd, xz, xzcat, yes, zcat, zcip[root@kong ~]

創建rootfs

這張圖在鏡像基礎介紹的時候已經被無數次看到了,rootfs是linux中重要的概念,而alpine中也有ADD rootfs.tar.xz這樣一句,接下來我們將了解一下如何生成一個簡單的rootfs

Docker,busybox,基礎鏡像

創建目錄并進入

[root@kong ~]# mkdir rootfs[root@kong ~]# cd rootfs/[root@kong rootfs]#

創建rootfs

執行如下語句

for module in `busybox --list-modules`do mkdir -p `dirname "$module"` ln -sf /bin/busybox "$module"done

執行日志

[root@kong rootfs]# for module in `busybox --list-modules`> do>  mkdir -p `dirname "$module"`>  ln -sf /bin/busybox "$module"> done[root@kong rootfs]#

結果確認

[root@kong rootfs]# lsbin linuxrc sbin usr[root@kong rootfs]# find . -type d../usr./usr/bin./usr/sbin./sbin./bin[root@kong rootfs]#

將busybox拷貝至新創建的./bin目錄下

這樣,上述命令的鏈接對象就存在了

[root@kong rootfs]# cp /usr/local/bin/busybox bin/[root@kong rootfs]# ls -l bin/busybox-rwxr-xr-x. 1 root root 1001112 May 25 05:27 bin/busybox[root@kong rootfs]#

創建rootfs.tar

此處注意相對路徑,而后續次相對路徑會展開至/下,從而創建新的系統的rootfs,這也是從零搭建linux(linux from scratch)的重要操作之一。

[root@kong rootfs]# tar cpf rootfs.tar .tar: ./rootfs.tar: file is the archive; not dumped[root@kong rootfs]#

簡單說明:busybox –list-modules列出了busybox的所有模塊,然后以此為基礎,創建了一個小型的rootfs 
[root@kong rootfs]# busybox –list-modules |wc -l 
389 
[root@kong rootfs]#

準備Dockerfile

準備一個一行的Dockerfile

[root@kong rootfs]# vi Dockerfile[root@kong rootfs]# cat Dockerfile From scratch[root@kong rootfs]#

創建base鏡像,由于沒有發現具體的內容,所以未創建出具體鏡像。另外,本文為了演示方便,直接在此處創建Dockerfile,這并不是一個好主意,實際的時候請不要這樣做,如果當前目錄下有100G的文件,就會無比緩慢,而且也不規范,無關物品需要清場。

[root@kong rootfs]# docker build -t busyboxbase:latest .Sending build context to Docker daemon 2.415 MBStep 1/1 : FROM scratch ---> No image was generated. Is your Dockerfile empty?[root@kong rootfs]# docker images |grep busyboxbase[root@kong rootfs]# 

from scracth

有From,這個scratch可以pull么,目前的版本已經將其作為一個保留名稱

[root@kong rootfs]# docker search scratch |grep 'an explicitly empty'docker.io  docker.io/scratch              an explicitly empty image, especially for ...  407    [OK]    [root@kong rootfs]# docker pull scratchUsing default tag: latestError response from daemon: 'scratch' is a reserved name[root@kong rootfs]#

將此Dockerfile添加一行沒有實際作用的,看看scratch到底是什么

[root@kong rootfs]# vi Dockerfile [root@kong rootfs]# cat Dockerfile From scratchMAINTAINER LiuMiao <liumiaocn@outlook.com>[root@kong rootfs]#

進行構建,發現產生了一個0字節的鏡像文件,也與scratch的原意相通

[root@kong rootfs]# docker build -t busyboxbase:latest .Sending build context to Docker daemon 2.415 MBStep 1/2 : FROM scratch ---> Step 2/2 : MAINTAINER LiuMiao <liumiaocn@outlook.com> ---> Running in b118fd7c73a7 ---> 2074dc76c09eRemoving intermediate container b118fd7c73a7Successfully built 2074dc76c09e[root@kong rootfs]# docker images |grep busyboxbasebusyboxbase           latest       2074dc76c09e    14 seconds ago   0 B[root@kong rootfs]#

至此,我們理解了from scratch確實不會有額外的添加,接下來我們像alpine那樣添加如下兩句

ADD rootfs.tar /CMD ["/bin/sh"]

我們的Dockerfile也是幾乎一樣的三行

[root@kong rootfs]# cat Dockerfile From scratchADD rootfs.tar /CMD ["/bin/sh"][root@kong rootfs]#

這樣就創建了一個1M的busybox為基礎的鏡像

[root@kong rootfs]# docker build -t busyboxbase:latest .Sending build context to Docker daemon 2.415 MBStep 1/3 : FROM scratch ---> Step 2/3 : ADD rootfs.tar / ---> 0fbb0c8c7579Removing intermediate container 8311e96f456cStep 3/3 : CMD /bin/sh ---> Running in efb85c4526bf ---> 02270c80a4e4Removing intermediate container efb85c4526bfSuccessfully built 02270c80a4e4[root@kong rootfs]# docker images |grep busyboxbasebusyboxbase           latest       02270c80a4e4    9 seconds ago    1.01 MB[root@kong rootfs]#

運行并使用

使用docker run發現此鏡像所啟動的容器并無異常之處

[root@kong rootfs]# docker run --rm -it busyboxbase sh/ # hostnameb7f9e9646746/ # uname -aLinux b7f9e9646746 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 GNU/Linux/ #

小結

這篇文章介紹了如何使用busybox結合from scratch機制創建docker的基礎鏡像以及相關原理。本文利用busybox 1.28.1版本創建了一個1.01M的可用的基礎鏡像,從瑞士軍刀到瑞士指甲刀,你可以繼續優化到若干K都是可行的,但是到了10M以下其實應該更多考慮的是后續的擴展性和功能性的因素了。但是從另外的角度考慮,集成進來了那么多功能的同時,也將這些功能的不安定因素也集成進來了。利用from scratch機制,創建小并且依賴性少的上下文環境是非常有用的。

參考文獻

https://docs.docker.com/develop/develop-images/baseimages/

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲片av在线| 日韩精品视频在线观看网址| 国模视频一区二区三区| 精品久久久久久久久中文字幕| 国产精品永久在线| 97超级碰在线看视频免费在线看| 国产亚洲欧洲高清一区| 亚洲999一在线观看www| 精品亚洲国产视频| 日韩中文字幕在线精品| 亚洲女人被黑人巨大进入al| 海角国产乱辈乱精品视频| 亚洲国产中文字幕久久网| 欧美高清电影在线看| 国产精品美女视频网站| 北条麻妃一区二区三区中文字幕| 色一区av在线| 国产精品高精视频免费| 欧美成年人在线观看| 亚洲国产一区自拍| 欧美疯狂性受xxxxx另类| 欧美日韩视频免费播放| 国产精品999| 国产一级揄自揄精品视频| 欧美乱大交做爰xxxⅹ性3| 精品视频一区在线视频| 欧美大尺度电影在线观看| 羞羞色国产精品| 欧美日韩午夜剧场| 日韩av高清不卡| 久久久噜噜噜久久中文字免| 亚洲色图欧美制服丝袜另类第一页| 色妞欧美日韩在线| 国产亚洲欧美另类中文| 久久久久久亚洲精品中文字幕| 色噜噜国产精品视频一区二区| 国产精品一区二区av影院萌芽| 日韩免费看的电影电视剧大全| 成人a在线视频| 亚洲美女中文字幕| 久久精品国产2020观看福利| 日韩美女在线观看| 欧美日韩中文字幕在线视频| 亚洲美女性视频| 久久精品视频免费播放| 中国china体内裑精亚洲片| 国产精品电影一区| 国产欧美精品va在线观看| 成人羞羞国产免费| 日韩精品一区二区视频| 国产精品久久电影观看| 日韩美女在线观看| 色播久久人人爽人人爽人人片视av| 成人在线视频网| 性色av香蕉一区二区| 中文字幕日韩专区| 欧美视频国产精品| 日韩欧美aⅴ综合网站发布| 国产欧美日韩中文字幕在线| 日韩高清电影好看的电视剧电影| 日韩在线视频线视频免费网站| 日韩视频欧美视频| 亚洲精品日韩欧美| 在线电影中文日韩| 久久99亚洲精品| 久久国内精品一国内精品| 中文字幕欧美日韩va免费视频| 亚洲欧美制服第一页| 一区二区三区四区视频| 成人免费视频网址| 亚洲成人av在线播放| 国产一区二区三区在线观看视频| 国产精品三级网站| 久久亚洲一区二区三区四区五区高| 国产精品久久一| 亚洲国产天堂久久国产91| 中国日韩欧美久久久久久久久| 日韩精品视频在线观看网址| 亚洲电影免费观看高清完整版在线观看| 98精品国产高清在线xxxx天堂| 在线精品高清中文字幕| 久久精品成人动漫| 欧美性生交大片免费| 日韩视频免费在线| 亚洲国产精品va在看黑人| 97久久久久久| 亚洲视频精品在线| 国产在线拍揄自揄视频不卡99| 日韩在线国产精品| 国产欧美一区二区三区在线| 日韩亚洲精品电影| 久久久久久尹人网香蕉| 欧美亚洲第一页| 欧美另类极品videosbest最新版本| 国产精品久久久久久久久久小说| 亚洲а∨天堂久久精品9966| 日韩中文字幕在线看| 欧美一区三区三区高中清蜜桃| 最新国产成人av网站网址麻豆| 国产视频久久久久| 亚洲精品久久久久中文字幕欢迎你| 精品国产老师黑色丝袜高跟鞋| 久久国产精品久久久| www.亚洲天堂| 久久综合伊人77777蜜臀| 久久久999精品免费| 日韩欧美在线观看| 国产日韩精品综合网站| 欧洲亚洲在线视频| 一个人看的www欧美| 国产精品尤物福利片在线观看| 国产三级精品网站| 成人欧美一区二区三区黑人| 欧美又大粗又爽又黄大片视频| 91av在线免费观看| 日韩av一区二区在线观看| 久久免费观看视频| 久久躁日日躁aaaaxxxx| 5278欧美一区二区三区| 久久欧美在线电影| 色香阁99久久精品久久久| 91久久久久久久久久久| 中文字幕在线看视频国产欧美在线看完整| 亚洲最新av在线| 亚洲影院色无极综合| 欧美激情小视频| 日韩中文在线不卡| 久久久久九九九九| 色偷偷噜噜噜亚洲男人的天堂| 亚洲第一区在线观看| 亚洲成人激情在线观看| 日韩激情片免费| 亚洲精品aⅴ中文字幕乱码| 91久久久久久久一区二区| 亚洲国产精品va| 亚洲片国产一区一级在线观看| 亚洲精选中文字幕| 欧美激情视频免费观看| 日韩欧美在线视频观看| 亚洲成人精品在线| 日韩欧美在线视频| 欧美在线观看网站| 精品国产精品自拍| 91成人精品网站| 日韩免费在线视频| 成人性生交xxxxx网站| 亚洲欧美日韩中文视频| 国产亚洲精品久久久优势| 大伊人狠狠躁夜夜躁av一区| 亚洲成人av在线播放| 中文字幕日韩在线观看| 国产精品久久国产精品99gif| 免费av一区二区| 亚洲成人999| 亚洲第一视频在线观看| 欧美中文字幕精品| 久久视频在线观看免费| 91影视免费在线观看| 国产精品福利网站| 国产91露脸中文字幕在线| 国产精品视频白浆免费视频| 91香蕉嫩草神马影院在线观看| 亚洲a级在线观看| 日韩av影院在线观看|