Docker 入門基礎

Docker是一個能把開發的應用程序自動部署到容器的開源引擎。Docker是新的容器化技術,輕巧,易移植[Build Once, Configure Once And Run Anywhere]。Docker引擎的基礎是Linux容器[LXC]技術,我們可以簡單的將Docker容器理解爲一種沙盒,每個容器內運行一個應用,不同容器相互隔離,容器間可以建立通信機制。


Docker具有速度快、隔離框架優雅、物美價廉、CPU/內存消耗低、快速開關機、跨雲計算基礎架構等特性,所以Docker具有以下幾方面優勢:

>> 縮短開發週期,實現快速的交付和部署

>> 高效的資源利用

>> 輕鬆的遷移和擴展

>> 簡單的更新管理

直觀參數對比傳統的虛擬機,如下圖


Docker有三個組件和三個基本元素

三個組件分別是:

Docker Client是用戶界面,它支持用戶與Docker Daemon之間的通信

Docker Daemon運行於主機上,處理服務請求。

Docker Index是中央registry[倉庫] Hub,支持擁有共有與私有訪問權限的Docker容器鏡像的備份

三要素分別是:

Docker Containers負責應用程序的運行,包括操作系統、用戶添加的文件以及元數據。

Docker Images是一個只讀模板,用來運行Docker容器

DockerFile是文件指令集,用來說明如何自動創建Docker鏡像

 

Docker是一個C/S架構的程序。Docker客戶端只需向Docker服務器或者守護線程發出請求。服務器或守護進程將完成所有工作並返回結果。Docker提供了一個命令行工具以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以用本地的Docker客戶端連接遠程Docker守護進程


Docker 鏡像是一個構建容器的只讀模板,它包含了容器啓動所需的所有信息,包括運行程序和配置數據。Docker鏡像是由文件系統疊加而成的。自低而上分別是:引導文件系統[bootfs] -> root文件系統[rootfs] -> 只讀文件系統-> 讀寫文件系統

root文件系統+只讀文件系統被稱爲鏡像,鏡像是可以疊放的,最下層的稱爲基礎鏡像[base image]、下面層的爲父鏡像,當docker容器啓動時。docker會加載最頂層的讀寫文件系統,我們程序就是在讀寫層中執行的

 

Docker 容器類似於一個輕量級的沙盒,Docker利用容器來運行和隔離應用[容器間是線程隔離的]。容器是鏡像創建的應用運行實例,容器中可以運行一個或多個進程。Docker容器可以將其啓動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。

 

Docker 倉庫是Docker鏡像文件存放的場所。Docker倉庫分爲共有和私有兩種。Docker倉庫和註冊服務器[registry]的區別,如下圖:


Docker API 在Docker生態系統中一共有三種API[RESTful風格]

>> RegistryAPI 提供了與來存儲Docker鏡像的DockerRegistry集成功能

>> DockerHub API 提供了與Docker Hub集成的功能

>> DockerRemote API 提供與Docker守護進程進行集成的功能

 

Docker 安裝:

http://blog.csdn.net/mickjoust/article/details/51578629

http://www.cnblogs.com/zzcit/p/5845717.html

 

Docker 常用命令:

#####################################################################

Docker info -->查看docker系統信息

 

#####################################################################

Docker version--> 查看docker版本號

 

#####################################################################

Docker images <參數> <倉庫>-->本地系統中有哪些鏡像

參數:

-a 列出本地所有的鏡像含中間映像層

--digests 顯示鏡像的摘要信息

-f 顯示滿足條件的鏡像

例如:

顯示倉庫是nginx的鏡像:



#####################################################################

Docker rmi <參數> <鏡像>--> 刪除某個鏡像

參數:

-f 強制刪除

 

#####################################################################

Docker build <參數> <容器> -->利用DockerFile創建鏡像

參數:

-t 給鏡像添加一個標籤[tag]

-q 安裝模式,直接輸出結果

 

#####################################################################

Docker history <鏡像> --> 查看docker 鏡像的歷史版本[或者說創建過程]

例如:



#####################################################################

Docker save -o<保存文件名> <鏡像>--> 把鏡像保存到打包文檔中

參數:

-o = output 保存的文件名

例如:



#####################################################################

Docker load [-i 文件]|[< 文件] --> 從打包文件或者STDIN加載一個鏡像

例如:



#####################################################################

Docker import <容器> --> 導入文件並創建鏡像

 

#####################################################################

Docker pull <鏡像> --> 從遠端拉取一個鏡像

 

#####################################################################

Docker push <鏡像> --> 將鏡像推送到DockerRepository[鏡像倉庫],需要註冊賬戶才能上傳自制鏡像

 

#####################################################################

Docker search <參數> <鏡像> -->在Docker Registry中查找鏡像

參數:

-s 列出收藏次數不小於指定次數的鏡像

 

#####################################################################

Docker login <參數> <倉庫>--> 登陸到一個Docker鏡像倉庫[默認Docker Hub]

參數:

-u 用戶名

-p 密碼

 

#####################################################################

Docker logout 登出Docker鏡像

 

#####################################################################

Docker commit <參數> <容器> -->提交一個新鏡像

參數:

-a = --author

-c = --change

-m 提交的信息

-p 暫停容器在提交的時候

 

#####################################################################

Docker cp 宿主機目錄 容器目錄 --> 用於容器和宿主機之間的數據拷貝

例如:



#####################################################################

Docker diff <容器> --> 檢查容器裏文件結構的更改

 

#####################################################################

Docker ps <參數> --> 列出所有的容器

-a:列出所有的正在執行和停止的容器

-n:後面跟顯示行數

-q:只輸出容器ID

例如:

docker ps -n 10 列出前十個容器

 

#####################################################################

Docker inspect<參數> <容器>--> 查看容器信息

 

#####################################################################

Docker top <容器> --> 查看容器中運行的進程信息

 

#####################################################################

Docker attach <容器> --> 進入某個容器[Ctrl+ D 退出容器]

 

#####################################################################

Docker events <參數> --> 從服務器獲取實時事件

參數:

-f  根據條件過濾事件

--since 指定時間戳後的所有事件

--until 顯示到指定時間爲止

 

#####################################################################

Docker logs <參數> <container name|container ID> --> 查看容器日誌

參數:

-f 動態監控Docker日誌

-tail 列出最新N條容器日誌

 

#####################################################################

Docker export <參數> <容器>--> 導出容器到STDOUT

參數:

-o 將輸入內容寫到文件中



#####################################################################

Docker port <鏡像> <端口號>--> 查看端口映射情況

 

#####################################################################

Docker run <參數> <鏡像> <初始命令> --> 基於鏡像創建啓動一個容器

TIPS:

Docker create 也可以創建一個鏡像,但是創建的容器是出於停止狀態,也就是說docker create + docker start = docker run

參數:

-i:以交互模式運行容器

-t:容器啓動後會進入其命令行[分配一個僞終端],Ctrl + d 退出容器

-v:需要將本地哪個目錄掛載到容器中 | -v <宿主機目錄>:<容器目錄>

比如docker.cn/docker/centos:centos7

-p:端口映射

-P:對外公開dockerfile中EXPOSE指定的端口

-d:以後臺方式運行容器[會創建一個守護線程]

-e:傳遞一個環境變量

--name 設置容器的名稱

--restart 設置容器重啓的標誌[有always、on-failure等]

例如:

-p 2222:3333 指定docker虛擬機的2222端口,映射爲container的3333  端口,要訪問就需要xxx.xxx.xxx.xxxx:3333

鏡像ID:可以用[倉庫名:標籤名]的形式代替

初始命令:一般進入命令行交互用 /bin/bash[bash shell 一般默認的linux默認的shell] shell是殼的意思,表明這個是操作系統和人的交互平臺,windows的桌面也是一個shell

例如:



#####################################################################

Docker start <容器> --> 啓動某個容器

Docker restart 的不同之處在與它會停止正在運行的某個容器並啓動它

 

#####################################################################

Docker stop <容器> --> 停止某容器

它會首先向容器發送 SIGTREM 信號,等待一段時間後再發送SIGKILL 信號終止容器

Docker kill 是強制關閉容器沒有Docker stop那麼優雅

 

#####################################################################

Docker exec <參數> <容器> <命令> --> 在容器中執行命令

docker exec 的功能比docker attach強大很多,進入容器同時可以動態的加入新的命令執行

參數:

-d 分離模式:在後臺運行

-i 即使沒有附加也保持STDIN打開

-t 分配一個僞終端

比如:



#####################################################################

Docker rm <參數> <鏡像> -->刪除某個容器

參數:

-f 強力刪除正在運行的容器

-l 移除容器間的鏈接

-v 移除與容器關聯的空間

 

#####################################################################

Docker port <容器> --> 查看docker容器的端口映射

 

#####################################################################

Docker pause <容器> --> 暫停容器中所有進程

Docker unpause<容器> --> 恢復容器中所有進程

 

#####################################################################

Docker help -->查看所有的docker命令

 

#####################################################################

Docker-machine sshdefault[虛擬機名字] --> 進入toolbox中運行的虛擬機[僅限於Windows中]

 

Dockfile 是由一行行命令語句組成,並且支持#開頭的註釋行。Dockerfile分爲以下四分部:

四部分

指令

基礎鏡像信息

FROM

維護者信息

MAINTAINER

鏡像操作指令

RUN、COPY、ADD、EXPOSE等

容器啓動時執行命令

CMD、ENTRYPOINT

FROM <imagename> --> 告訴Docker我們的鏡像是基於哪一個鏡像

MAINTAINER<author name> --> 設置鏡像的作者

RUN <commad>--> 在指定鏡像裏執行命令,默認的是使用 /bin/sh -c來執行[也可以使用exec格式的RUN指令]

ADD <源文件> <目標路徑>--> 複製文件 還有自動解壓歸檔文件的功能

CMD --> 在容器運行時提供一些命令及參數[可被DockerRun覆蓋]

ENTRYPOINT --> 在容器運行時提供一些命令及參數[不可被DockerRun覆蓋]

EXPOSE --> 指定容器在運行時監聽的端口

WORKDIR --> 指定RUN、CMD、ENTRYPOINT命令的工作目錄

ENV <key><value> --> 設置環境變量[鍵值對]

USER --> 設置容器運行時的UID

VOLUME --> 用於讓你的容器訪問宿主主機上的目錄

ONBUILD --> 爲鏡像添加觸發器觸發器會在build過程中插入新的指令

 

TIPS

>> 刪除所有Docker ID和Tag爲none的鏡像

docker images | grep none | awk ‘{print $3}’| xargs docker rmi  ==> 可以引申到刪除沒用或者停止的Docker Container

>> Dockerfile中WORKDIR與RUN cd的區別

WORKDIR是切換當前的工作目錄,所以對後面的語句也生效。RUN cd只是對當前這條語句生效,但是工作目錄還是沒有變[默認的工作目錄是根目錄/]

>> docker hub與docker registry的工作區別

docker hub: 複製保存集中的信息訪問:用戶賬戶、鏡像的校驗碼、共有和私有鏡像倉庫的區別等。docker hub有以下幾個組件:Web UI、Meta-data元數據存儲、訪問認證、token管理

 


參考資料:

《第一本Docker書》

《Docker技術入門與實戰》

DockerOne翻譯的Docker入門教程

runoob.com的Docker菜鳥教程

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章