如何理解Docker?

一,docker vs 虛擬機

虛擬機是在一臺物理機器上,利用虛擬化技術,虛擬出來多個操作系統,每個操作系統之間是隔離的。Docker是開源的應用容器引擎,依然需要先在電腦上安裝操作系統,然後安裝Docker容器的管理器纔可以。虛擬機是在硬件級別進行虛擬化,而Docker是在操作系統的層面虛擬化;虛擬機是通過模擬硬件搭建操作系統, Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

形象地說,虛擬機相當於一棟樓包含多套房,一套房一戶人家,共享地基,共享花園,獨立衛生間,廚房和寬帶。

docker像一套房被隔成多個小隔間(膠囊式公寓),每個膠囊住一位租戶,共享地基,共享花園,獨立衛生間,廚房和寬帶。

docker在操作系統層面虛擬化,多了一層容器管理器

由於docker的容器設定更輕巧,導致和虛擬機的性能等方面很多不同

二,docker原理

一種os虛擬化技術
一個開源的應用容器引擎
一次打包,到處運行

Docker的應用場景

    Web 應用的自動化打包和發佈。

    自動化測試和持續集成、發佈。

    在服務型環境中部署和調整數據庫或其他的後臺應用。

    從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。


Docker中一些概念:

宿主機host
運行docker所在的物理機,是docker運行的系統環境
鏡像image
相當於一個程序模板,通過這個模板可以生成很多相似的容器
容器container
docker運行的最小單位對象,通過鏡像實例化出來的一個可運行對象
倉庫register
用於存儲管理鏡像的倉庫,類似git管理代碼的倉庫,可以管理多版本的鏡像

一句話總結就是從倉庫中拉取鏡像,利用鏡像生成容器

鏡像的組成:

1. rootfs(容器根文件系統)
系統上看起來像操作系統的標準根目錄(/)。例如/usr,/var等目錄
2.Json文件(容器配置)
用來指定如何運行rootfs。例如,在容器啓動時,rootfs運行的命令或入口點;爲容器設置的環境變量;容器的工作目錄和其他設置

Docker打包了rootfs和JSON文件來創建基本鏡像。這樣就可以在rootfs上安裝其他內容,創建新的JSON文件,並使用更新的JSON文件來解決原始鏡像與新鏡像之間的差異。這樣就創建一個分層的鏡像。

鏡像分層

Docker 支持通過擴展現有鏡像,創建新的鏡像。Aufs是Another Union File System的縮寫,支持將多個目錄掛載到同一個虛擬目錄下。已構建的鏡像會設置成只讀模式,read-write寫操作是在read-only上的一種增量操作,固不影響read-only層。這樣可以做到共享資源和資源容備。

鏡像(Image)就是一堆只讀層(read-only layer)的統一視角

容器(container)的定義和鏡像(image)一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

三,理解docker命令

docker run

docker run :創建一個新的容器並運行一個命令
語法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name mynginx -d nginx:latest
使用docker鏡像nginx:latest以後臺模式啓動一個容器,並將容器命名爲mynginx。

docker build

docker build 命令用於使用 Dockerfile 創建鏡像。
語法:docker build [OPTIONS] PATH | URL | -

docker commit

docker commit :從容器創建一個新的鏡像。
語法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker save

docker save : 將指定鏡像保存成 tar 歸檔文件。
語法:docker save [OPTIONS] IMAGE [IMAGE...]
例:docker save ubuntu:load>/root/ubuntu.tar

四,dockerfile

docker build命令用於從Dockerfile構建映像。可以在docker build命令中使用-f標誌指向文件系統中任何位置的Dockerfile。
如docker build -f /path/to/a/Dockerfile 。Dockerfile用來創建一個自定義的image, 包含了用戶指定的軟件依賴等。


一些重點參數
•ENV
指定一個環境變量,會被後續 RUN 指令使用,並在容器運行時保持。格式爲 ENV TZ ”Asia/Shanghai“ RUN命令是Dockerfile執行命令的核心部分。它接受命令作爲參數並用於創建鏡像,RUN命令用於創建鏡像(在之前commit的層之上形成新的層)
• WORKDIR
WORKDIR命令用於設置CMD指明的命令的運行目錄。格式爲 WORKDIR /path/to/workdir
FROM
基礎鏡像可以爲任意鏡像。如果基礎鏡像沒有被發現,Docker將試圖從Docker image index來查找該鏡像。
FROM命令必須是Dockerfile的首個命令。如果同一個DockerFile創建多個鏡像時,可使用多個FROM指令(每個鏡像
一次)
• EXPOSE
指定在docker允許時指定的端口進行轉發
• VOLUME
VOLUME命令用於讓你的容器訪問宿主機上的目錄。格式爲 VOLUME [“/data”]
• COPY
COPY 將文件從路徑 <src複製添加到容器內部路徑 <dest>。 COPY <src> <dest>
• ADD
ADD命令有兩個參數,源和目標。它的基本作用是從源系統的文件系統上覆制文件到目標容器的文件系統。如果源是一個URL,那該URL的內容將被下載並複製到容器中。如果文件是可識別的壓縮格式,則docker會幫忙解壓縮。
• CMD
每個容器只能執行一條CMD命令,多個CMD命令時,只最後一條被執行
• ENTRYPOIN
配置容器啓動後執行的命令,並且不可被 docker run 提供的參數覆蓋。 每個 Dockerfile 中只能有一個ENTRYPOINT,當指定多個時,只有最後一個起效。


廣告部分測試:

歡迎大家來掃馬(測試測試)

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