docker 基礎(chǔ)鏡像

dokcer 基礎(chǔ)鏡像選擇

目前常用的Linux發(fā)行版主要包括Debian/Ubuntu系列和CentOS/Fedora系列。前者以自帶軟件包版本較新而出名;后者則宣稱(chēng)運(yùn)行更穩(wěn)定一些。選擇哪個(gè)操作系統(tǒng)取決于讀者的具體需求。同時(shí),社區(qū)還推出了完全基于Docker的Linux發(fā)行版CoreOS。

使用Docker,只需要一個(gè)命令就能快速獲取一個(gè)Linux發(fā)行版鏡像,這是以往包括各種虛擬化技術(shù)都難以實(shí)現(xiàn)的。這些鏡像一般都很精簡(jiǎn),但是可以支持完整Linux系統(tǒng)的大部分功能。

常用的操作系統(tǒng)鏡像預(yù)覽

REPOSITORY TAG IMAGE ID SIZE
busybox latest 020584afccce 1.22MB
alpine 3.9.5 82f67be598eb 5.53MB
centos 7.2.1511 9aec5c5fe4ba 195MB
debian buster 1b686a95ddbf 114MB

docker 鏡像制作選擇最佳實(shí)踐

在制作docker鏡像時(shí),使用 multi stage 構(gòu)建各個(gè)不同階段的命令文件,最終copy到busybox或alpilne中執(zhí)行。這樣做得好處有二:

  1. 保持鏡像最小,busybox,alpine 是最小的操作系統(tǒng)鏡像

  2. 有各種linux工具使用,busybox本身是一個(gè)linux工具集

  3. 構(gòu)建stage建議使用alpine和其它的官方包, 主要理由是此鏡像比busybox稍大,但是比其他的系統(tǒng)鏡像都小,有人就問(wèn)了,為撒不用busybox呢,因?yàn)閎usybox沒(méi)有包管理工具,這帶來(lái)很多不便;這點(diǎn)也是busybox和alpine的主要區(qū)別

下面是一個(gè) go protoc的Dockerfile示例:


## stage 1 : install protoc
FROM alpine:3.9.5 as stage1

## install protobuf
RUN apk update && apk add --no-cache protobuf
RUN protoc --version
RUN type protoc

## stage 2 : install protoc-gen-go
FROM golang:1.14 as stage2
# Build Delve
RUN go get github.com/golang/protobuf/protoc-gen-go && go install $GOPATH/src/github.com/golang/protobuf/protoc-gen-go
RUN go get google.golang.org/grpc/cmd/protoc-gen-go-grpc && go install $GOPATH/src/google.golang.org/grpc/cmd/protoc-gen-go-grpc
RUN ls $GOPATH/bin && echo $GOPATH

#COPY --from=stage1 /usr/bin/protoc /go/bin/

## stage 3 : copy command file to buxybox
FROM  stage1
RUN mkdir -p /go/bin
#COPY --from=stage1 /usr/bin/protoc /go/bin/
COPY --from=stage2 /go/bin/protoc-gen-go /go/bin/
COPY --from=stage2 /go/bin/protoc-gen-go-grpc /go/bin/
#
ENV PATH=$PATH:/go/bin

RUN ls /go/bin

ENTRYPOINT ["protoc"]
CMD ["--version"]

  • build
docker build -t kekek/grpc:v1 .

  • run
docker run --rm -v $(pwd):$(pwd) -w $(pwd) kekek/grpc:v1 --go-grpc_out=. --go_out=.  --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative helloworld.proto

BusyBox

BusyBox是一個(gè)集成了一百多個(gè)最常用Linux命令和工具(如cat、echo、grep、mount、telnet等)的精簡(jiǎn)工具箱,它只有幾MB的大小,很方便進(jìn)行各種快速驗(yàn)證,被譽(yù)為“Linux系統(tǒng)的瑞士軍刀”。BusyBox可運(yùn)行于多款POSIX環(huán)境的操作系統(tǒng)中,如Linux(包括Android)、Hurd、FreeBSD等。

busybox鏡像雖然小巧,但包括了大量常見(jiàn)的Linux命令,可以用它快速熟悉Linux命令。

alpine

Alpine操作系統(tǒng)是一個(gè)面向安全的輕型Linux發(fā)行版。它不同于通常的Linux發(fā)行版,Alpine采用了musl libc和BusyBox以減小系統(tǒng)的體積和運(yùn)行時(shí)資源消耗,但功能上比BusyBox又完善得多。在保持瘦身的同時(shí),Alpine還提供了自己的包管理工具apk,可以通過(guò)https://pkgs.alpinelinux.org/packages查詢(xún)包信息,也可以通過(guò)apk命令直接查詢(xún)和安裝各種軟件。

Alpine Docker鏡像也繼承了Alpine Linux發(fā)行版的這些優(yōu)勢(shì)。相比于其他Docker鏡像,它的容量非常小,僅僅只有5MB左右(Ubuntu系列鏡像接近200MB),且擁有非常友好的包管理機(jī)制。官方鏡像來(lái)自docker-alpine項(xiàng)目。

目前Docker官方已開(kāi)始推薦使用Alpine替代之前的Ubuntu作為基礎(chǔ)鏡像環(huán)境。這樣會(huì)帶來(lái)多個(gè)好處,包括鏡像下載速度加快,鏡像安全性提高,主機(jī)之間的切換更方便,占用更少磁盤(pán)空間等。

目前,大部分Docker官方鏡像都已經(jīng)支持Alpine作為基礎(chǔ)鏡像,因此可以很容易地進(jìn)行遷移。

例如:

ubuntu/debian -> alpine

python:2.7 -> python:2.7-alpine

ruby:2.3 -> ruby:2.3-alpine

如果使用Alpine鏡像替換Ubuntu基礎(chǔ)鏡像,安裝軟件包時(shí)需要用apk包管理器替換apt工具,如 $ apk add --no-cache

Alpine中軟件安裝包的名字可能會(huì)與其他發(fā)行版有所不同,可以在https://pkgs.alpinelinux.org/packages網(wǎng)站搜索并確定安裝包的名稱(chēng)。如果需要的安裝包不在主索引內(nèi),但是在測(cè)試或社區(qū)索引中,那么可以按照以下方法使用這些安裝包:

$ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

$ apk --update add --no-cache

Debian/Ubuntu

Debian和Ubuntu都是目前較為流行的Debian系的服務(wù)器操作系統(tǒng),十分適合研發(fā)場(chǎng)景。

1.Debian系統(tǒng)簡(jiǎn)介及使用

眾多的Linux發(fā)行版,例如Ubuntu、Knoppix和Linspire及Xandros等,都基于Debian GNU/Linux。

官方提供了大家熟知的debian鏡像以及面向科研領(lǐng)域的neurodebian鏡像。

$ docker images debian
REPOSITORY  TAG   IMAGE ID  CREATED      SIZE
debian  buster  1b686a95ddbf  5 weeks ago      114MB

debian鏡像很適合作為基礎(chǔ)鏡像,用于構(gòu)建自定義鏡像。

2.Ubuntu系統(tǒng)簡(jiǎn)介及使用

Ubuntu是一個(gè)以桌面應(yīng)用為主的GNU/Linux操作系統(tǒng),Ubuntu基于Debian發(fā)行版和GNOME/Unity桌面環(huán)境,與Debian的不同在于它每6個(gè)月會(huì)發(fā)布一個(gè)新版本,每2年會(huì)推出一個(gè)長(zhǎng)期支持(Long Term Support,LTS)版本,一般支持3年。

當(dāng)試圖直接使用apt-get安裝一個(gè)軟件的時(shí)候,會(huì)提示E:Unable to locate package:

root@7d93de07bf76:/# apt-get install curl

Reading package lists... Done

Building dependency tree

Reading state information... Done

E: Unable to locate package curl

這并非系統(tǒng)不支持apt-get命令。Docker鏡像在制作時(shí)為了精簡(jiǎn)清除了apt倉(cāng)庫(kù)信息,因此需要先執(zhí)行apt-get update命令來(lái)更新倉(cāng)庫(kù)信息。更新信息后即可成功通過(guò)apt-get命令來(lái)安裝軟件:

root@7d93de07bf76:/# apt-get update

安裝curl工具:

root@7d93de07bf76:/# apt-get install curl -y

Reading package lists... Done

Building dependency tree

Reading state information... Done

...

root@7d93de07bf76:/# curl

curl: try 'curl --help' or 'curl --manual' for more information

接下來(lái),再安裝apache服務(wù):

root@7d93de07bf76:/# apt-get install -y apache2

啟動(dòng)這個(gè)apache服務(wù),然后使用curl來(lái)測(cè)試本地訪(fǎng)問(wèn):

root@7d93de07bf76:/# service apache2 start

配合使用-p參數(shù)對(duì)外映射服務(wù)端口,可以允許外來(lái)容器訪(fǎng)問(wèn)該服務(wù)。

CentOS/Fedora

1.CentOS系統(tǒng)簡(jiǎn)介及使用

CentOS和Fedora都是基于Redhat的常見(jiàn)Linux分支。CentOS是目前企業(yè)級(jí)服務(wù)器的常用操作系統(tǒng);Fedora則主要面向個(gè)人桌面用戶(hù)。

CentOS(Community Enterprise Operating System,社區(qū)企業(yè)操作系統(tǒng))是基于Red Hat Enterprise Linux源代碼編譯而成的。由于CentOS與Redhat Linux源于相同的代碼基礎(chǔ),所以很多成本敏感且需要高穩(wěn)定性的公司就使用CentOS來(lái)替代商業(yè)版Red Hat Enterprise Linux。CentOS自身不包含閉源軟件。

2.Fedora系統(tǒng)簡(jiǎn)介及使用

Fedora是由Fedora Project社區(qū)開(kāi)發(fā),紅帽公司贊助的Linux發(fā)行版。它的目標(biāo)是創(chuàng)建一套新穎、多功能并且自由和開(kāi)源的操作系統(tǒng)。對(duì)用戶(hù)而言,F(xiàn)edora是一套功能完備的、可以更新的免費(fèi)操作系統(tǒng),而對(duì)贊助商Red Hat而言,它是許多新技術(shù)的測(cè)試平臺(tái),被認(rèn)為可用的技術(shù)最終會(huì)加入到Red Hat Enterprise Linux中。

使用docker run命令直接運(yùn)行Fedora官方鏡像,并登錄bash:

常見(jiàn)資源參考

鏡像 鏡像官網(wǎng) 參考
busybox www.busybox.net 可以將busybox理解為一個(gè)超級(jí)簡(jiǎn)化版嵌入式Linux系統(tǒng) 文檔地址 https://zh.wikipedia.org/wiki/BusyBox
Alpine www.alpinelinux.org Alpine是一個(gè)面向安全的、輕量級(jí)的Linux系統(tǒng),基于musl libc和busybox, 包管理地址 https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374