Docker基礎(chǔ)(2)—— Docker安裝及基礎(chǔ)操作

Docker基礎(chǔ)(1)—— Docker基本概念
Docker基礎(chǔ)(2)—— Docker安裝及基礎(chǔ)操作

二、環(huán)境配置

1、下載安裝

macOS安裝Docker還是比較簡(jiǎn)單的。下載 StableEdge 版本的 Docker for Mac,安裝。

也可以使用Homebrew安裝:$ brew cask install docker 。

Windows用戶可以參考教程

2、運(yùn)行

點(diǎn)擊Docker圖標(biāo)運(yùn)行之后右上角菜單欄會(huì)出現(xiàn)一個(gè)鯨魚(yú)圖標(biāo),這個(gè)圖標(biāo)表明了Docker的運(yùn)行狀態(tài)。

第一次點(diǎn)擊圖標(biāo),可能會(huì)看到這個(gè)安裝成功的界面,點(diǎn)擊 "Got it!" 可以關(guān)閉這個(gè)窗口。

以后每次點(diǎn)擊鯨魚(yú)圖標(biāo)會(huì)彈出操作菜單。

啟動(dòng)終端,通過(guò)命令可以檢查安裝后的 Docker 版本。

下面嘗試運(yùn)行一個(gè)Nginx服務(wù)器:

3、鏡像加速

鑒于國(guó)內(nèi)網(wǎng)絡(luò)問(wèn)題,后續(xù)拉取 Docker 鏡像十分緩慢,建議安裝 Docker 之后配置國(guó)內(nèi)鏡像加速。

三、Docker架構(gòu)

DOCKER_HOST:我們進(jìn)行操作的宿主機(jī)
Docker daemon:守護(hù)進(jìn)程(核心程序),做各種Docker操作
Client:客戶端,將命令交給daemon,由daemon來(lái)做實(shí)際的操作
Registry:倉(cāng)庫(kù),所有Docker玩家共享Docker鏡像的服務(wù) (Docker Registry提供一個(gè)集中的存儲(chǔ)、分發(fā)鏡像的服務(wù))

四、實(shí)戰(zhàn)之鏡像操作

1、拉取鏡像

1.1 可以去Docker hub查找自己想要的鏡像

也可以使用 > docker search nginx 指令。

1.2 指令:> docker pull nginx

執(zhí)行Docker run 時(shí)若在本地找不到鏡像,則會(huì)去倉(cāng)庫(kù)拉取,存于本地。

2、列出鏡像

2.1查看已有鏡像:> docker images 等同于 > docker image ls

ls只顯示頂層鏡像,加上-a可顯示中間層鏡像,這樣會(huì)看到很多無(wú)標(biāo)簽的鏡像。這些無(wú)標(biāo)簽的鏡像很多都是中間層鏡像,是其它鏡像所依賴的鏡像。(這些無(wú)標(biāo)簽鏡像不應(yīng)該刪除,否則會(huì)導(dǎo)致上層鏡像因?yàn)橐蕾噥G失而出錯(cuò)。實(shí)際上,這些鏡像也沒(méi)必要?jiǎng)h除,因?yàn)橄嗤膶又粫?huì)存一遍,而這些鏡像是別的鏡像的依賴,因此并不會(huì)因?yàn)樗鼈儽涣谐鰜?lái)而多存了一份。當(dāng)刪除那些依賴它們的鏡像后,這些依賴的中間層鏡像也會(huì)被連帶刪除。)

若想列出部分鏡像可在ls后加鏡像倉(cāng)庫(kù)名 如:> docker image ls ubuntu

3、刪除本地鏡像 > docker image rm

4、構(gòu)建鏡像

4.1 使用Dockerfile定制鏡像

在一個(gè)空白目錄中,建立一個(gè)文本文件,并命名為 Dockerfile。內(nèi)容為:

這個(gè) Dockerfile 很簡(jiǎn)單,一共就兩行。涉及到了兩條指令,F(xiàn)ROM 和 RUN 。

FROM指令指定基礎(chǔ)鏡像,RUN指令用來(lái)執(zhí)行命令(RUN指令會(huì)在一個(gè)容器中進(jìn)行操作)。還有很多其他的Dockerfile指令(如:COPY、ADD、CMD、ENTRYPOINT、ENV、ARG、WORKDIR、EXPOSE 等)可自行學(xué)習(xí)。

4.2 構(gòu)建鏡像 > docker build -t nginx:v4 .

“.”表示當(dāng)前目錄,用于指定上下文路徑

當(dāng)我們進(jìn)行鏡像構(gòu)建的時(shí)候,并非所有定制都會(huì)通過(guò) RUN 指令完成,經(jīng)常會(huì)需要將一些本地文件復(fù)制進(jìn)鏡像,比如通過(guò) COPY 指令、ADD 指令等。而 docker build 命令構(gòu)建鏡像,其實(shí)并非在本地構(gòu)建,而是在服務(wù)端,也就是 Docker 引擎中構(gòu)建的。那么在這種客戶端/服務(wù)端的架構(gòu)中,如何才能讓服務(wù)端獲得本地文件呢?

這就引入了上下文的概念。當(dāng)構(gòu)建的時(shí)候,用戶會(huì)指定構(gòu)建鏡像上下文的路徑,docker build 命令得知這個(gè)路徑后,會(huì)將路徑下的所有內(nèi)容打包,然后上傳給 Docker 引擎。這樣 Docker 引擎收到這個(gè)上下文包后,展開(kāi)就會(huì)獲得構(gòu)建鏡像所需的一切文件。(若路徑下有些文件不需要上傳給Docker引擎,可以將其放在.dockerignore中)

構(gòu)建成功,測(cè)試一下:

5、上傳鏡像 > docker push

5.1 上傳前要先登陸Docker Hub

指令 > docker login ,輸入用戶名和密碼。

5.2 更改倉(cāng)庫(kù)名

指令 > docker tag nginx:v4 huangbaoling/nginx ,我這里沒(méi)寫(xiě)標(biāo)簽則默認(rèn)是latest,我們也可以 > docker tag nginx:v4 huangbaoling/nginx:4

(對(duì)已有Docker鏡像做tag,注意新tag需要附帶注冊(cè)用戶名huangbaoling。如果是在內(nèi)網(wǎng)倉(cāng)庫(kù)操作則附帶服務(wù)器地址 docker.sunseaiot.cn)

當(dāng)沒(méi)有做tag直接push時(shí),默認(rèn)的路徑是library,是官方鏡像段路徑。前面提到的兩段式路徑是多用戶環(huán)境下,推送鏡像段規(guī)范是:> docker push 注冊(cè)用戶名/鏡像名

上傳成功。

五、實(shí)戰(zhàn)之容器操作

1、新建并啟動(dòng)容器

1.1 查看已有鏡像:> docker images

1.2 啟動(dòng)容器指令:> docker run -d -p 8088:80 nginx

這個(gè)寫(xiě)法有誤,-d后再-it是無(wú)效的,會(huì)直接進(jìn)入后臺(tái)
-it相當(dāng)于-i加-t,會(huì)進(jìn)入shell終端,可以操作nginx

-d:后臺(tái)運(yùn)行容器并打印容器

-i:保證輸入有效

-t:分配個(gè)偽終端

-p:開(kāi)放容器端口給主機(jī) (-p 本機(jī)端口:鏡像端口),Docker Hub上可查看到鏡像端口和鏡像使用到一些信息

其他參數(shù)用法可參考 >docker run -help

2、進(jìn)入容器

2.1 ps指令查看進(jìn)程信息

容器外:> docker ps 列出所有運(yùn)行的容器

容器內(nèi):> ps -ef

查看容器信息指令 > docker container ls 和 > docker ps 是一樣的效果

2.2 進(jìn)入容器內(nèi)部 > docker exec -it ____ bash

(____中填寫(xiě)容器ID、容器名,ID可以只填部分?jǐn)?shù)據(jù),只要能與其他容器區(qū)分)

2.3 退出容器 exit

注意退出容器并不是終止容器,容器仍然在運(yùn)行。

(這針對(duì)的是2.2的情況,若執(zhí)行的docker run -it ubuntu,因?yàn)闆](méi)有后臺(tái)運(yùn)行-d,所以在偽終端執(zhí)行exit后容器也就結(jié)束了。)

3、 終止容器 > docker container stop ____

(____中可填寫(xiě)容器ID、容器名,可以只填部分?jǐn)?shù)據(jù),只要能與其他容器區(qū)分)

在容器中寫(xiě)入的內(nèi)容會(huì)存放在容器存儲(chǔ)層,若只是將容器stop,存儲(chǔ)層中的內(nèi)容不會(huì)消失,下次restart還在,若是將容器remove,容器存儲(chǔ)層會(huì)隨著容器一起消失,所以若想保存內(nèi)容,應(yīng)當(dāng)掛載到外部宿主。

4、 刪除容器

4.1 單個(gè)刪除 > docker container rm _____

(____中可填寫(xiě)容器ID、容器名,可以只填部分?jǐn)?shù)據(jù),只要能與其他容器區(qū)分)

4.2 清除所有出于終止?fàn)顟B(tài)的容器 > docker container prune

六、總結(jié)

容器技術(shù)有很多種,Docker只是其中一種,只是它的流行度比較高。注意區(qū)分容器技術(shù)和虛擬化技術(shù)的區(qū)別(容器和虛擬機(jī)之間的主要區(qū)別在于虛擬化層的位置和操作系統(tǒng)資源的使用方式)。

前面我們分析了容器的輕量的原因,但因此也會(huì)給容器帶來(lái)局限性:一,由于所有容器都是與宿主機(jī)共用內(nèi)核的,容器與容器之間的隔離性就會(huì)差很多;二,容器里面是不存放數(shù)據(jù)的,容器里面的數(shù)據(jù)會(huì)隨著容器的生命周期而消失,如果想要持久化的存儲(chǔ),必須要依靠外部的存儲(chǔ)設(shè)備。(所有的文件寫(xiě)入操作,都應(yīng)該使用 數(shù)據(jù)卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫(xiě)會(huì)跳過(guò)容器存儲(chǔ)層,直接對(duì)宿主(或網(wǎng)絡(luò)存儲(chǔ))發(fā)生讀寫(xiě),其性能和穩(wěn)定性更高。數(shù)據(jù)卷的生存周期獨(dú)立于容器,容器消亡,數(shù)據(jù)卷不會(huì)消亡。因此,使用數(shù)據(jù)卷后,容器刪除或者重新運(yùn)行之后,數(shù)據(jù)卻不會(huì)丟失。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《Docker從入門(mén)到實(shí)踐》閱讀筆記 原書(shū)地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,627評(píng)論 1 39
  • 在前面兩節(jié)我們學(xué)習(xí)了如何安裝以及簡(jiǎn)單的運(yùn)行管理docker容器,在本節(jié)我們將會(huì)更多的探討關(guān)于docker鏡像的知識(shí)...
    井底蛙蛙呱呱呱閱讀 4,267評(píng)論 0 5
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,998評(píng)論 1 21
  • 只要有遠(yuǎn)方來(lái)的朋友,我都會(huì)帶他們來(lái)見(jiàn)你。 因?yàn)槟愕淖鹑菝利?,因?yàn)槟愕牡滋N(yùn)深厚、大氣——你的每一棵樹(shù)都有來(lái)歷,樹(shù)上的...
    諶歷閱讀 3,578評(píng)論 47 192
  • 有供應(yīng)必然有需求,有需求必然有供應(yīng)。 在市場(chǎng)中,當(dāng)供應(yīng)大于需求時(shí),這時(shí)表現(xiàn)為供過(guò)于求(商品過(guò)多,貶值)。當(dāng)需求大于...
    Senven詩(shī)瑪閱讀 630評(píng)論 0 0

友情鏈接更多精彩內(nèi)容