摘要:反過來別的上的鏡像,也不能在樹莓派上運(yùn)行。如果需要找樹莓派專用的鏡像,那就在上搜索或相關(guān)就能找到了。有一個(gè)叫的倉(cāng)庫(kù)制作了非常多樹莓派專用,可以參考下。樹莓派安裝,最難的在于正確的選擇源和添加,才能找到版本適合的并下載。
最近學(xué)習(xí)Machine Learning發(fā)現(xiàn)好多人都用docker,之前一直聽說但是感覺和自己無關(guān)。但是現(xiàn)在發(fā)現(xiàn)原來docker是個(gè)這么方便的東西,可以跨平臺(tái)(不分什么版本的linux,甚至mac和windows也行)運(yùn)行。所以這里開一篇來記錄學(xué)習(xí)感受。
參考:Docker 完全指南
參考: Gitbook - Docker — 從入門到實(shí)踐
不提那些難懂的術(shù)語(yǔ),大白話就是:
一個(gè)Docker就是一個(gè)Linux的Live CD系統(tǒng),跟USB系統(tǒng)一樣,有完整的系統(tǒng)文件目錄和程序。
我們可以在這個(gè)與外界隔離的便攜系統(tǒng)里隨便讀寫操作,只是每次進(jìn)入它時(shí)候,都會(huì)恢復(fù)最開始的樣子,像什么事都沒發(fā)生一樣。
我們可以像定制Live CD或WinPE一樣,定制這個(gè)小系統(tǒng)里面默認(rèn)裝什么軟件。一旦定制好了,就是不可更改的,非常穩(wěn)定。
一開始發(fā)現(xiàn)很亂很難理解,覺得所有人都把它說的太復(fù)雜了。直到后來發(fā)現(xiàn),其實(shí)它的運(yùn)行邏輯很簡(jiǎn)單。
實(shí)際上,可以把Docker看成是給電腦安裝Linux系統(tǒng)時(shí)的Live CD,或者是給Windows用USB安裝系統(tǒng)時(shí)的WinPE。這樣會(huì)方便理解一點(diǎn)。
回想下自己在給PC或是虛擬機(jī)上安裝Linux系統(tǒng)時(shí),都會(huì)有個(gè)Live CD選項(xiàng)。也是就是你可以什么都不安裝,直接進(jìn)入系統(tǒng),所有的工具都能用,所有的軟件都能安裝,所有的配置也可以改。只不過你重啟過后,一切修改的地方都恢復(fù)原樣了。
每篇攻略都會(huì)提到這三個(gè)基本概念:
鏡像 Image
相當(dāng)于一個(gè)系統(tǒng)光盤的ISO鏡像文件,是只讀的。你可以直接進(jìn)入image中各種操作沒有障礙,感覺就像進(jìn)入_Live CD_系統(tǒng)了。只是所有操作都會(huì)在退出時(shí)消失,下次進(jìn)image時(shí)候還是初始的樣子。
容器 Container
就像給"ISO文件"加了一層可讀寫的外衣,所有的變動(dòng)都會(huì)保存在Container里,而image還是image,不會(huì)變。就像你可以隨便換衣服,但是身體不會(huì)變。
倉(cāng)庫(kù) Repo
一般指的Dockerhub,就是一個(gè)像Github的網(wǎng)站,只不過不是收集代碼,而是收集各種image鏡像。你可以隨意上傳下載各大廠商或個(gè)人制作的鏡像。
安裝DockerDocker分CE和EE兩個(gè)版本,一個(gè)社區(qū)公開免費(fèi),一個(gè)商業(yè)付費(fèi)。
參考官方:About Docker CE
Ubuntu上安裝Docker參考官方安裝步驟:Get Docker CE for Ubuntu
準(zhǔn)備工作:
#安裝SSL相關(guān),讓apt通過HTTPS下載: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common # 添加docker的GPG key curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - #檢查key是否相符(9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88) sudo apt-key fingerprint 0EBFCD88 #添加docker的apt下載源 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" #更新源 sudo apt-get update
安裝docker:
$ sudo apt-get install docker-ce
卸載Docker:
$ sudo apt-get remove docker docker-engine docker.ioMac上安裝Docker
直接下載app:
樹莓派上安裝Docker樹莓派是基于ARM架構(gòu)的,和PC不同。所以即使樹莓派上能做一些docker鏡像,也不能在別的PC上運(yùn)行。反過來別的PC上的docker鏡像,也不能在樹莓派上運(yùn)行。
如果需要找樹莓派專用的鏡像,那就在Dockerhub上搜索ARM或Rpi相關(guān)就能找到了。
有一個(gè)叫Hypriot的倉(cāng)庫(kù)制作了非常多樹莓派專用docker,可以參考下。
樹莓派安裝Docker,最難的在于正確的選擇源和添加GPG-key,才能找到版本適合的docker并下載。這個(gè)過程是非常繁瑣且很難有統(tǒng)一方案的。
另外:官方的一鍵安裝版本已經(jīng)失效了。必須手動(dòng)操作。
參考另一篇筆記:樹莓派安裝Docker
運(yùn)行Docker[站外圖片上傳中...(image-e81557-1548159126389)]
從Image鏡像創(chuàng)建一個(gè)Container容器:
# 新建一個(gè)Container容器(如果本地有image則直接從它創(chuàng)建,如果沒有則從網(wǎng)上下載) # 進(jìn)入docke的shell -t,即進(jìn)入虛擬的一個(gè)系統(tǒng),有自己的/root文件系統(tǒng)結(jié)構(gòu) $ docker run -it: #如: $ docker run -it jekyll/jekyll:latest bash # 為container指定名稱(而不是只用ID來引用) $ docker run -it --name
查看已有的:
# 查看已有的images $ docker images # 查看已創(chuàng)建的containers $ docker container ls -a
運(yùn)行一個(gè)已有的Container:
# 先啟動(dòng)container $ docker containerstart # 運(yùn)行(掛載)container,掛載后自動(dòng)進(jìn)入容器里的shell $ docker attach # 或者一句話完成(--attach) $ docker start -a
刪除已有的:
# 刪除image $ docker rm無需sudo執(zhí)行docker# 刪除container $ docker rm
為了每次執(zhí)行docker不需要總是輸入sudo,我們需要為docker創(chuàng)建一個(gè)用戶組,并授予權(quán)限才行:
# 創(chuàng)建docker用戶組 sudo groupadd docker # 把當(dāng)前用戶加入到docker用戶組 sudo gpasswd -a $USER docker # 更新當(dāng)前用戶組變動(dòng)(就不用退出并重新登錄了) newgrp docker掛載Host主機(jī)上的文件夾
我們肯定不會(huì)滿足于docker只訪問自己的小世界里的文件系統(tǒng)(什么數(shù)據(jù)都沒有),所以有必要讓它能訪問外界Host主機(jī)上的一些文件夾。比如我有一個(gè)docker是作為下載機(jī)用的,那么我肯定得讓它把下載好的東西存到我的主機(jī)上,要不然就白下載了。
參考:Docker學(xué)習(xí)---掛載本地目錄
掛載文件夾是在docker運(yùn)行鏡像的命令里就指定的(利用-v參數(shù)):
$ docker run -it -v: ubuntu64 /bin/bash #或者作為只讀掛載 (:ro) $ docker run -it -v : :ro ubuntu64 /bin/bash
注意,掛載的雙方都必須是絕對(duì)路徑。
映射Docker里的端口到Host主機(jī)上的端口如果Docker里運(yùn)行的是Web服務(wù)比如Nginx,里面有一個(gè)網(wǎng)站,那你必須得把”虛擬機(jī)“里的端口映射到外部才能正??吹骄W(wǎng)頁(yè)。
映射是在運(yùn)行docker命令時(shí)指定的,比如把里面的80端口映射到外面的8888端口,命令如下:
$ docker run --name webserver -d -p 80:8888 nginx
然后你在主機(jī)上的瀏覽器訪問http://localhost:8888,就可以看到nginx里的網(wǎng)頁(yè)了。
直接在鏡像上改動(dòng)的內(nèi)容,會(huì)在退出時(shí)全部消失。但是我們經(jīng)常需要把這些變動(dòng)保存下來。
Docker保存這些變動(dòng)的機(jī)制就是——生成另一個(gè)只讀鏡像。(-_-!)
雖然正??磥?,這不太好吧。但實(shí)際上,這很好!
Docker鏡像實(shí)際上是非常小的,所以生成另一個(gè)鏡像也沒有多費(fèi)事。而且這種機(jī)制保證了每個(gè)鏡像的不可隨便修改的性質(zhì),這一點(diǎn)就極大的避免了混亂。
Docker保存更改有兩種方式:
docker commit:就像git commit一樣,把每次改動(dòng)作為一個(gè)commit提交,可以追溯歷史
Dockerfile:這是從頭build構(gòu)建一個(gè)鏡像的配置文件,把你想改動(dòng)的地方(如安裝一個(gè)程序)寫成一句bash命令,加到Dockerfile這個(gè)文件里,它就會(huì)按照你的要求執(zhí)行所有的命令,然后生成一個(gè)新的鏡像。
Commit可以追溯歷史,但是變動(dòng)了哪些地方是對(duì)外界黑箱的。
Dockerfile確實(shí)明明白白寫清楚有哪些改變。
所以一般情況下,正式構(gòu)建一個(gè)鏡像,都是用Dockerfile的。
"docker commit" 將變動(dòng)過的Container保存為鏡像參考:利用 commit 理解鏡像構(gòu)成
docker commit命令,可以將容器的存儲(chǔ)層保存下來成為鏡像。換句話說,就是在原有鏡像的基礎(chǔ)上,再疊加上容器的存儲(chǔ)層,并構(gòu)成新的鏡像。以后我們運(yùn)行這個(gè)新鏡像的時(shí)候,就會(huì)擁有原有容器最后的文件變化。
慎用docker commit:
由于命令的執(zhí)行,還有很多文件被改動(dòng)或添加了。這還僅僅是最簡(jiǎn)單的操作,如果是安裝軟件包、編譯構(gòu)建,那會(huì)有大量的無關(guān)內(nèi)容被添加進(jìn)來,如果不小心清理,將會(huì)導(dǎo)致鏡像極為臃腫。
此外,使用 docker commit 意味著所有對(duì)鏡像的操作都是黑箱操作,生成的鏡像也被稱為黑箱鏡像,換句話說,就是除了制作鏡像的人知道執(zhí)行過什么命令、怎么生成的鏡像,別人根本無從得知。而且,即使是這個(gè)制作鏡像的人,過一段時(shí)間后也無法記清具體在操作的。雖然 docker diff 或許可以告訴得到一些線索,但是遠(yuǎn)遠(yuǎn)不到可以確保生成一致鏡像的地步。這種黑箱鏡像的維護(hù)工作是非常痛苦的。
而且,回顧之前提及的鏡像所使用的分層存儲(chǔ)的概念,除當(dāng)前層外,之前的每一層都是不會(huì)發(fā)生改變的,換句話說,任何修改的結(jié)果僅僅是在當(dāng)前層進(jìn)行標(biāo)記、添加、修改,而不會(huì)改動(dòng)上一層。如果使用 docker commit 制作鏡像,以及后期修改的話,每一次修改都會(huì)讓鏡像更加臃腫一次,所刪除的上一層的東西并不會(huì)丟失,會(huì)一直如影隨形的跟著這個(gè)鏡像,即使根本無法訪問到。這會(huì)讓鏡像更加臃腫。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28071.html
摘要:刪除鏡像表示強(qiáng)行刪除是將鏡像保存成文件加載鏡像結(jié)語(yǔ)是個(gè)好東西,以上僅僅是一些常用基本操作,但它就像通往新世界的大門,為大規(guī)模集群化部署提供了可能,以后有空再寫一下容器編排的文章,敬請(qǐng)關(guān)注 showImg(https://segmentfault.com/img/remote/1460000014989024?w=1292&h=710); 引言 相信很多技術(shù)同學(xué)在開發(fā)時(shí)都會(huì)使用虛擬機(jī),配...
摘要:目前,騰訊內(nèi)部業(yè)務(wù)運(yùn)行環(huán)境基本全部實(shí)現(xiàn)了容器化,在技術(shù)大會(huì)中,騰訊云高級(jí)產(chǎn)品經(jīng)理劉永峰曾發(fā)表演講時(shí)代,公有云面臨的挑戰(zhàn)和機(jī)遇。本文中劉永峰展望了容器技術(shù)在游戲云的應(yīng)用。 容器技術(shù)是一種輕量級(jí)虛擬化技術(shù),能夠以很細(xì)的粒度,虛擬化獨(dú)立的系統(tǒng)運(yùn)行環(huán)境。這就意味著,一臺(tái)物理的服務(wù)器,或者是一臺(tái)云上面的虛擬服務(wù)器,能夠同時(shí)運(yùn)行成百上千個(gè)獨(dú)立的容器?;谟螒蛐袠I(yè)短平快的鮮明特點(diǎn), 每一個(gè)游戲世界里面,每...
摘要:并不是因?yàn)樗情W亮的新事物或者它是一些虛構(gòu)的最佳實(shí)踐,而是因?yàn)橄駚嗰R遜或者已經(jīng)在這上面投入了年的心血,他們告訴了我們?nèi)绾螛?gòu)建真正有規(guī)模的系統(tǒng)。截止目前,我們已經(jīng)部署了由亞馬遜等提供的重量級(jí)虛擬化服務(wù)器。 周一時(shí)候數(shù)人云與大家分享了一篇關(guān)于Docker的反方言論——《一份Docker的反方辯論——我還是用Heroku好了》,一周之后,同樣的作者,又為Docker正名,寫了一篇正方言論。D...
摘要:一個(gè)容器起來,能夠?qū)ν夥?wù),這時(shí)就看下一步的負(fù)載均衡服務(wù)發(fā)現(xiàn)以及編排。它們有不同的應(yīng)用場(chǎng)景,比如傾向于四層的負(fù)載均衡。不單是負(fù)載均衡,它同時(shí)解決了服務(wù)發(fā)現(xiàn)和負(fù)載均衡兩個(gè)點(diǎn)。 今天是數(shù)人云容器三國(guó)演義Meetup嘉賓演講實(shí)錄第二彈。數(shù)人云工程師春明為大家奉送了一盤干貨的大餐,讓我們讀讀源碼,深入了解一下SwarmKit的世界吧! 小數(shù)前方預(yù)警:有大量代碼出現(xiàn)! showImg(htt...
閱讀 521·2021-10-09 09:44
閱讀 2100·2021-09-02 15:41
閱讀 3558·2019-08-30 15:53
閱讀 1836·2019-08-30 15:44
閱讀 1293·2019-08-30 13:10
閱讀 1200·2019-08-30 11:25
閱讀 1478·2019-08-30 10:51
閱讀 3370·2019-08-30 10:49