Docker筆記

Docker的基本概念

名詞 描述
Docker 鏡像(Images) Docker 鏡像是用于創(chuàng)建 Docker 容器的模板。類似于類(class)
Docker 容器(Container) 容器是獨立運行的一個或一組應(yīng)用。類似于實例(object)
Docker 客戶端(Client) Docker 客戶端通過命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 與 Docker 的守護進程通信。
Docker 主機(Host) 一個物理或者虛擬的機器用于執(zhí)行 Docker 守護進程和容器。
Docker 倉庫(Registry) Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。
Docker Machine Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應(yīng)的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

一份簡單的Dockerfile解析

這里是一個nuxt示例項目,打包的思路就是把項目代碼和node環(huán)境都打包在一起,每次修改代碼之后重新打包。

# 設(shè)置基于哪個鏡像文件,這里依賴node-alpine版本(一個基于alpine系統(tǒng)的node版本,體積?。?FROM node:8.11.3-alpine
# 復(fù)制當(dāng)前文件夾下文件到容器的/usr/nuxt-init目錄
COPY . /usr/nuxt-init
# 設(shè)置執(zhí)行命令的工作目錄(這里是運行npm的路徑)
WORKDIR /usr/nuxt-init
# RUN用于執(zhí)行初始化命令
RUN npm install cnpm && ./node_modules/cnpm/bin/cnpm i
# 設(shè)置環(huán)境變量(根據(jù)項目環(huán)境來設(shè)置,可選項)
ENV HOST 0.0.0.0
# 暴露3000端口給外面
EXPOSE 3000
# 啟動時執(zhí)行的命令,全文只能有一個,有多個時以最后一個為準(zhǔn)
# 這里的npm start是npm run start的簡寫
CMD [ "npm", "start" ]

Dockerfile文件要放在項目根目錄下,而且名稱不可更改。

根據(jù)Dockerfile生成docker鏡像

# 進入Dockerfile所在目錄
 docker build -t deploy:1.0 .

-t是給鏡像加上標(biāo)簽便于區(qū)分,格式為:<name>:<tag>;
最后的.(點)代表了對當(dāng)前文件夾下所有文件進行打包 ;

過濾不打包的文件 —— .dockerignore文件

有時會有一些文件不想打包到鏡像里面,這時候可以添加.dockerignore文件。用法和.gitignore一樣。

# Example
  .DS_Store
  npm-debug.log*
  selenium-debug.log
  .nuxt/
  /package-lock.json
  *.tar
  *.md

  # Editor directories and files
  .idea
  *.suo
  *.ntvs*
  *.njsproj
  *.sln

查看構(gòu)建完成的鏡像文件

docker images

該命令可以查看自己構(gòu)建的鏡像和從網(wǎng)上下載的鏡像文件

查看鏡像的信息

# Example
# 查看nginx鏡像的信息
docker inspect nginx
查看鏡像信息

運行鏡像

首先明確一個概念:容器,就是以某個鏡像運行起來的實例,就跟new了一個實例對象一樣。
就以上面的nuxt項目來模擬一個情景:用服務(wù)器的3001端口映射容器中nuxt項目的端口(nuxt的項目服務(wù)默認開啟的是3000端口,因為此時3000端口是指容器本身暴露了3000端口,不代表服務(wù)器也暴露了3000端口,所以我們需要給服務(wù)器和容器做一個映射);

docker run -d -p 3001:3000 --name mynuxt deloy:1.0 

-p 用于映射服務(wù)器端口和容器端口,格式為:<服務(wù)器端口>: <容器端口>(還有其他寫法,具體查文檔)
-d 表示讓進行在后臺運行,如果不加的話運行信息就會在當(dāng)前終端上顯示了,當(dāng)前終端關(guān)閉項目也會停掉。
--name代表這個容器實例的別名,后續(xù)可以通過該別名獲取容器ID等其他信息,實例別名不能重復(fù)。
最后的deloy:1.0就是鏡像名稱加上標(biāo)簽號了。

這里還有一個知識點,上面說了鏡像就像一個模板,可以以一個鏡像跑多個容器,每個容器之間是相互獨立的,你還可以用服務(wù)器的3002、3003接口去映射多個容器的3000接口。

運行上面的命令之后,你可以通過logs命令來查看容器內(nèi)項目的運行情況了。

docker logs <containerId>

containerId是指容器ID。
通過容器ID你就可以查看日志情況了,這時候又有一個問題了,怎么去查容器的容器ID呢,通過docker ps命令就可以了。

docker ps -a

直接使用docker ps的話可以查出當(dāng)前運行的docker實例,加上-a可以獲取到全部實例,包括運行中的和沒運行的,然后就可以根據(jù)實例名稱獲取到容器ID了。


查看實例列表

操作實例

實例的啟動,重啟和關(guān)閉

docker (start | restart | stop) <containerId>

實例也和其他服務(wù)一樣,可以進行關(guān)閉、啟動等操作,關(guān)閉之后的實例還存在于docker ps -a列表中。

刪除實例

docker rm [-f] <containerId>

運行中的實例不能進行刪除,如果要刪除的話,可以加上-f參數(shù)刪除運行中的實例。

查看運行中的容器內(nèi)情況

通過exec命令可以查看運行中的實例內(nèi)部信息。

docker exec -it  43148e2301b9 ls /usr/nuxt-init

執(zhí)行exec命令

-t:在新容器內(nèi)指定一個偽終端或終端。
-i:允許你對容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進行交互。
一般這兩個都是成對使用的。
43148e2301b9為運行中的容器ID,可通過docker ps獲取。
最后的ls /usr/nuxt-int可以替換成當(dāng)前鏡像支持的shell命令。

映射服務(wù)器中的目錄到容器內(nèi)的指定目錄。

舉一個運行nginx鏡像的例子:

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx 

命令說明:

  • -p 80:80:將容器的80端口映射到主機的80端口
  • --name mynginx:將容器命名為mynginx
  • -v $PWD/www:/www:將主機中當(dāng)前目錄下的www掛載到容器的/www
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當(dāng)前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf
  • -v $PWD/logs:/wwwlogs:將主機中當(dāng)前目錄下的logs掛載到容器的/wwwlogs

特別說明一下:

  1. 如果映射的目錄原本存在著關(guān)鍵文件,你在映射的目錄中也應(yīng)該存在該文件,就比如你映射了nginx的配置文件目錄,你也應(yīng)該把默認配置文件復(fù)制一份到你的映射目錄中,不然nginx跑不起來。
  2. 映射的過程中數(shù)據(jù)流是單向的,即映射的目錄中,容器內(nèi)目錄會同步服務(wù)器目錄的文件,服務(wù)器目錄新增文件,容器內(nèi)對應(yīng)目錄也會新增文件;但反過來不行,容器內(nèi)不允許向映射目錄進行寫文件操作。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 《Docker從入門到實踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,652評論 1 39
  • 參加工作以來,經(jīng)歷的第二家公司,用心的記錄用到的技術(shù)。 Docker是一個改進的容器技術(shù)。具體的“改進”體現(xiàn)在,D...
    草中人閱讀 289評論 0 0
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,755評論 0 120
  • 我要上班,家里又是沒人管女兒,六點鐘我就起床了。梳洗完,趁女兒還沒起床,我便開車去鄉(xiāng)下接婆婆。 回來...
    胡瑞格閱讀 215評論 0 1
  • 這幾天工作效率一直不高,心里很著急。感覺很焦慮。今早, 我一邊晨跑,一邊在想這個問題。我想到應(yīng)該調(diào)整一下工作方法。...
    SandyZhang_ce42閱讀 215評論 0 3

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