前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
以下內容全文出自書目:《 Docker 進階與實戰 》
1. Docker 定義:一個開源的容器引擎,可以方便地對容器進行管理,不同容器可以共享底層的只讀鏡像。
2. Docker 是一個典型的 C/S 架構的應用。
3.?Docker deamon 可以被理解成?Docker? Server ,也常常用?Docker? Engine 來描述它。
4. 容器以鏡像為基礎,同時又為鏡像提供了一個標準和隔離的執行環境。鏡像是這個運行環境的靜態體現。
5. Registry 是存放鏡像的倉庫,通常被部署在服務器或者云端。支持鏡像的分發和更新。
? ? 倉庫的名字通常由兩部分組成,中間以斜線分開,前是用戶名,后是鏡像名。如:tom/ubuntu 。
? ? Docker 公司提供的官方 Registry 叫?Docker Hub 。鑒權認證保證了 Registry 訪問的安全性。
? ? 若要將鏡像 push 到第三方 Registry , 那么鏡像名中必須包含該 Registry 地址。
? ? 其實 Registry 也是一個單獨的開源項目。任何人都可以下載后部署一個自己的 Registry 。
?
6.?Docker? 的安裝:
sudo ape-get install docker.io
7.?Docker? Container : 內核容器技術。自動構建時當前機器的配置不會影響鏡像的構建過程。
? ? Docker? 容器與主機共享操作系統內核。
8. 容器虛擬化是一種操作系統虛擬化,屬于輕量級的虛擬化。
9. Namespace : 命名空間 / 名字空間,主要作訪問隔離。將內核的全部資源作封裝,使得每個空間有一份獨立資源,不同進程在各自空間內對同一種資源的使用不會相互干擾。
10. Cgroup? 是 Control group 的簡稱,亦稱為控制組,主要作資源控制。用于限制和隔離一組進程對系統資源的使用。
11. 容器組成公式:
容器 = cgroup + namespace + rootfs + 容器引擎(用戶態工具)Cgroup : 資源控制Namespace : 訪問隔離rootfs :文件系統隔離容器引擎 :生命周期控制
12. $$ 表示當前進程。
13. IPC 是 Inter - Process Communication 的簡寫:進程間通信。
14. Mount Namespace 用于隔離文件系統掛載點,刪除方式:
ip netns delete new_ns
15. host 的普通用戶進程在容器里可以是 0 號用戶,也就是 root 用戶。
16.?Docker? image 是用來啟動容器的只讀模板。
17. 導入鏡像有 2 個可用命令:
docker import / docker load 。 docker load? 一般只用于導入由 docker save 導出的鏡像。
18.生成鏡像方式:
docker commit :可增量的生成一個鏡像。docker build : 通過 dockerfile 文件生成鏡像。
19. 列出容器:
docker ps
20. 列出鏡像:
docker images?
21. 查看容器和鏡像詳細信息:
docker inspect
22. Docker images 包含數據必要的元數據。數據由一層層的 image layer 組成,元數據則是一些 JSON 文件。用來描述數據(image layer)之間的關系及容器的一些配置信息。
23.?Docker? 對鏡像進行了完整性校驗,其完整性的憑證是由鏡像倉庫提供的。
24. image ID 實際上只是最上層的 layer ID,所以?Docker? inspect 也適用于任何一層 layer 。
25. “ env ”? : 容器啟動時會作為容器的環境變量。“ Cmd ” : 容器啟動時的默認命令。
26.?Docker? image 可使用寫時復制,快并節省空間。
27. 若制作 image 時使用到了上些關鍵信息(賬號、密碼等),則需要在同層刪除,不然這些信息會一直存在于 image 中。
28. 若下載鏡像不帶標簽,會把 ubuntu 倉庫下官方(默認 tag )鏡像全部下載。
29. 沙盒:隔離的網絡運行環境,保存了容器網絡棧的配置,包括了對網絡接口、路由表和 DNS 配置的管理。
30. docker create 、 docker run 可帶參數:-v : 添加數據卷,并可多次指定來掛載多個數據卷。
? ? ? -v 會在容器的 /tmp/data 目錄下創建一個新的數據卷。
? ? ? 可用 docker Inspet 查看數據卷在主機中的位置。
? ? ? -v 也可將?Docker? daemon 所在主機上的文件或文件夾掛載到容器中。
? ? ? -v 參數的主機目錄必須使用絕對路徑,若指定路徑不存在,?Docker 會自動創建該目錄。
? ? ? ?使用數據卷容器存儲的數據不會輕易丟失,刪除容器、甚至是初始化該數據卷的 dbdata ,該數據卷也不會被刪除。
31. 在本機部署 Convoy 插件后可用 Convoy 創建一個卷: ( 見書?P103 )
sudo convoy create volume_name
刪除:
sudo convoy delete volume_name
備份:
sudo convoy backup create snaplvoll --dest vfs:///opt/convoy/
32. Linux 的命令 ulimit 可對一些資源起限制作用,包括:
core dump 文件的大小、進程數據段的大小、可創建文件的大小、常駐內存集的大小 、打開文件的數量、進程棧的大小、CPU 時間 、單個用戶最大線程數、進程最大虛擬內存
33. Docker 可設置容器的根文件系統為只讀模式。
34.?Dockerfile 由四部分組成:
基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動命令
? ? ?其第一條有效信息必須是基礎鏡像信息: FROM 指令。用來指定要制作的鏡像繼承自哪個鏡像。
? ? ?可以寫多個? FROM 指令來構建復雜鏡像。? ? ?
EXPOSE : 暴露端口CMD :容器啟動時執行的命令。每個 Dockerfile 只能有一條 CMD 命令,寫了多條時只有最后一條會被執行。若用戶啟動容器時指定了運行命令,則會覆蓋 CMD 指定命令。VOLUME :創建一個可從本地主機或其它容器掛載的掛載點。常用來存放數據庫或需要永久保存的數據。ENV :指定一個環境變量。被后續 RUN 命令使用并在容器運行時保持。
35.?Docker 制作鏡像的順序:
1. 解析 Dockerfile,找到基礎鏡像。2. 以基礎鏡像為基礎,創建一個容器。3. 在容器中按順序執行 Dockerfile 中的命令。4. 若不是 RUN 命令,如 ENV 命令,記錄下來以便啟動時執行。5. 把屬性命令記錄在 Image 的屬性中。6. 所有命令執行完后,commit 該容器為新的鏡像。
36.?Docker run 命令中用 -p 實現端口映射。
? ? ? 80:8089? 表示將主機上的 80 端口映射到容器中的 8089 端口。(對外端口:容器內端口)
37.?Docker build 命令可跟參數 -f :指定 build 命令中的 “ dockerfile ”? 選項來設置所需的?Dockerfile 。
38. docker-compose-yml 文件中:
1. “ ports?” 對應 docker run 中的 -p 參數。2. “ volumes ” 對應 -v 選項。3. “ links ” 對應 “ --links ” 選項。
39.搭建 Jenkins 環境有 2 種方式:
? ? ?1) 直接在主機中配置 Jenkins 環境 。
? ? ?2) 使用??Docker 鏡像配置 Jenkins 環境:
1. 下載 Jenkins 鏡像: docker pull jenkins2. 啟動 Jenkins 容器: docker run -d -p 49001:8080 -t Jenkins-d : 后臺運行; -p : 端口映射; -t :給容器命名。
?