搜尋
首頁運維Docker最有系統的掌握Docker核心技術(總結分享)

這篇文章為大家帶來了關於docker核心技術之容器操作,以及Dockerfile詳解等等相關問題,希望對大家有幫助。

最有系統的掌握Docker核心技術(總結分享)

一. Docker

1. 簡介

  • 基於Linux核心的Cgroup, Namespace, 以及Union FS等技術,將進程進行封裝隔離,屬於作業系統層面的虛擬技術,由於隔離的進程獨立於宿主和其它的隔離進程,因此稱為容器
  • 最初實作是基於LXC,從0.7以後開始移除LXC,改用自行開發的Libcontainer, 從1.11開始, 則進一步演進為使用runC和Containerd
  • Docker在容器的基礎上,進行了進一步的封裝,從檔案系統、網路互連到進程隔離等等,極大的簡化了容器的創建和維護,使得Docker技術比虛擬機技術更為輕巧、快捷

#2. Docker優勢

  • 更有效率地利用系統資源
  • 更快速的啟動時間
  • 一致的運行環境
  • 持續交付和部署
  • 更輕鬆的遷移
  • 更輕鬆地維護與擴充

3. Docker與虛擬機器比較

2. Docker安裝

參考文章安裝: Install Docker Engine on Ubuntu | Docker Documentation

##三.容器操作

  • #docker run:
                -it 互動

                -d 後台運作 # #pamp          -v 磁碟掛載

  • #啟動已終止容器

docker start

  • 停止容器

docker stop

  • 檢視容器程序

docker ps

  • 查看容器細節

  • docker inspect 

  • # 拷貝檔案到容器內

#docker cp file1 :/file_to_path

  • ##docker退出容器,而不關閉容器: ctrl q p

docker退出容器,而關閉容器: exit

    查詢docker所有映像
docker images

#Docker映像倉庫

# ########Docker hub: https://hub.docker.com######建立私人映像倉庫: docker run -d -p 5000:5000 registry###### 四. Dockerfile詳解######Dockerfile一般分為四個部分:基礎映像資訊、維護資訊、映像操作指令、容器啟動時操作指令############常用指令##### ##########FROM:指定基礎鏡像,必須為第一個指令#########格式:######        FROM ###### FROM :####

        FROM @

範例:

        FROM ubuntu

MAINTINT #格式:

        MAINTAINER

範例

        MAINTAINER ribbon

RUN:在建構中執行的指令建構指令時執行的命令

##格式:        shell執行:RUN

        exec執行:RUN ["executable", "param1", "param2"]

##範例:

        RUN apk update

        RUN ["/etc/execfile", "arg1", "arg2"]

##  d -get install這兩個指令永遠用&&連接,否則apt-get update建置層被緩存,會導致新package無法安裝

ADD: 將本機檔案新增到容器中, tar等類型

會自動解壓縮,可以存取網路資源,類似wget

格式:

        ADD ...

範例:

        ADD bin/amd64/httpserver /httpserver

COPY: 功能類似ADD,但不會解壓縮文件,無法存取網路資源

#在Dockerfile中使用multi-stage: Dockerfile 中的multi-stage(多階段建置) - sparkdev - 部落格花園

格式:

        COPY ... ... ... d;d ;

範例:

        COPYbin/amd64/httpserver /httpserver

CMD: 建置容器後調用,也就是在容器啟動時才進行呼叫

#格式:

        CMD ["executable","param1","param2"] (執行可執行文件,優先)

        CMD ["param1","param2"] (設定了ENTRYPOINT,則直接呼叫ENTRYPOINT新增參數)         CMD command param1 param2 (執行shell內部指令)

範例:

        CMD ["Hhelm"--


        CMD echo "1111"

#ENTRTPOINT: 設定容器,使其可執行化

格式:

        ENTRYPOINT ["executable", "param1", "param2"] (可執行檔, 優先)

   shell   #範例:##卷##格式:

        LABEL = = =<value> ...


'

##        LABEL multi.label1="value1" multi.label2="value2" other="value3"

##ENV: 設定環境變數

格式:

        ENV

範例:

        ENV MY_SERVICE_PORT=80 UDP_N0的連接埠

格式:        EXPOSE [...]

範例:

    POSE

##        EXPOSE 80/tcp

卷##        VOLUME []

#範例:

        VOLUME ["/data", "/usr1/jenkins"]

##USER:指定執行#USER:容器時的使用者名稱或UID,後續的RUN 也會使用指定使用者。

格式:

  USER user

  USER user:group

  USER uid

#   USER uid:gid

 與問題 US##   USER uid:gid

 ER groupUS##ER user:#US>

## 範例:

  USER www

ARG: 用於指定傳遞給建置執行時間的變數

格式:

    ARG [=]

範例:

    ARG build_user=ribbon

五. Linux NameSpace詳解

  •  NamesSpace詳解:

Linux NameSpace_Frank_Abagnale的部落格-CSDN部落格 這篇文章比較詳細的介紹,可以參考這篇

  • NameSpace的常用操作

  • 檢視目前系統的namespace:

lsns -t

  • #看某個行程的namespace:

ls -la /proc//ns/

  • # 查看某namespace執行指令

nsenter -t -n 

#六. Linux Cgroups詳解

  • Cgroups詳解

##容器核心:cgroups - 簡書 可以參考這篇文章來進行了解

    #模擬Cgroups控制CPU資源

#模擬Cgroups控制CPU資源

通過模擬來更好的熟悉Cgroups控制資源的效果, 先建立cpudemo資料夾

# 執行top可以看到busyloop佔用兩個CPU資源

 將進程加入cgroup進程組態群組

 設定cpuquota

 可以看到成功將佔用200% CPU資源的降低成1%

#########模擬Cgroups超過限定memory資源被OOM kill############/ sys/fs/cgroup/memory目錄下建立memorydemo資料夾################ 執行消耗記憶體程序, 使用watch查詢記憶體使用量############ ############# 將進程配置進cgroups設定群組########## 設定最大記憶體大小############## 等待程序被OOM kill, dmesg可以看到殺死訊息############################備註:刪除自主建立的cgroup資料夾, 需要使用cgroup-tools###################七. Union FS############Docker前面所使用的技術都是源自於linux的技術並沒有創新,而Docker的創新正是檔案系統。 #########

1.  概念: 

  • 將不同目錄掛載在同一個虛擬檔案系統下的檔案系統
  • 支援為每個成員目錄設定readonly、readwrite和without -able權限
  • 檔案系統分層,對readonly權限的目錄可以進行邏輯上的修改,這裡的修改屬於增量的,不影響readonly部分
  • 通常Union FS的用途:多個disk掛載到同一個目錄下, 另一個是將readonly部分和writeable的目錄結合在一起

2. 圖解Union FS

       Docker映像的設計中,引入了層(layer)的概念,也就是說,使用者製作鏡像的每一步操作,都會產生一個層,也就是一個增量rootfs(一個目錄),這樣應用A和應用B所在的容器共同引用相同的ubuntu作業系統層、Golang環境層(作為唯讀層),而各自有各自應用程式層,和可寫層。啟動容器的時候透過UnionFS把相關的層掛載到一個目錄,當作容器的根檔案系統。

3.容器儲存驅動程式

4. 模擬Union FS更好理解效果

       由於docker目前版本上使用的是overlayFS的儲存驅動,所以我們就以overlay掛載方式來進行實驗,overlayfs透過三個目錄:lower目錄、upper目錄、以及work目錄實現,其中lower目錄可以是多個,work目錄為工作基礎目錄,掛載後內容會被清空,且在使用過程中其內容用戶不可見,最後聯合掛載完成給使用者呈現的統一視圖稱為為merged目錄。

執行以下命令:

mkdir upper lower merged work
echo "lower" > lower/in_lower.txt
echo "from lower" > lower/in_both.txt
echo "from upper" > upper/in_both.txt
echo "upper" > upper/in_upper.txt
path=$(pwd)
mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

#       可以看到使用overlay儲存驅動程式檔案掛載實現的效果。實驗完成後恢復環境需要先umount merged目錄後, 再將四個目錄進行刪除操作,先刪除其他的可能會出現rm: cannot remove 'merged/': Device or resource busy,導致merged目錄刪除不掉。

c. Docker網路

1. 安裝工具

Centos系統:

        $ yum install bridge-utils

Ubuntu系統:

        $ apt-get  install bridge-utils

2. Docker網路模式

  •  #docker內建的查詢網路模式

  • docker run選擇運作的網路模式 

##        1) host模式:使用--net=host 指定。 host公用一套net

        2)none模式:使用--net=none指定。網路設定需要由自己進行設定

#        3)bridge模式:使用 --net=bridge 指定,預設設定。

docker網路邏輯圖 橋接器與NAT

        4)container模式:使用 --net=container:NAME_or_ID 指定。使用其他容器的網路設定

# 網路模式圖大概如下圖

3. 模擬Docker起網橋的操作

  • 建立--net=none nginx 

  •  建立network namespace

  •  建立網頁namespace連結

  • ## 檢查目前已建立的橋接裝置

  •  創建veth對

  • # 進行A網路配置

  • 進行B網路設定 

產生eth0網路裝置在nginx docker中

給eth0設定ip 閘道 

  •  nginx可以存取

  • 設定nat, 讓windows透過ip也可以存取

  • 使用完刪除指定nat規則

#推薦學習:《docker影片教學

以上是最有系統的掌握Docker核心技術(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
Linux上的Docker:最佳實踐和技巧Linux上的Docker:最佳實踐和技巧Apr 13, 2025 am 12:15 AM

在Linux上使用Docker的最佳實踐包括:1.使用dockerrun命令創建和運行容器,2.利用DockerCompose管理多容器應用,3.定期清理未使用的鏡像和容器,4.採用多階段構建優化鏡像大小,5.限制容器資源使用提升安全性,6.遵循Dockerfile最佳實踐提高可讀性和維護性。這些實踐能幫助用戶高效使用Docker,避免常見問題並優化容器化應用。

將Docker與Linux一起使用:綜合指南將Docker與Linux一起使用:綜合指南Apr 12, 2025 am 12:07 AM

在Linux上使用Docker可以提高開發和部署效率。 1.安裝Docker:使用腳本在Ubuntu上安裝Docker。 2.驗證安裝:運行sudodockerrunhello-world。 3.基本用法:創建Nginx容器dockerrun--namemy-nginx-p8080:80-dnginx。 4.高級用法:創建自定義鏡像,使用Dockerfile構建並運行。 5.優化與最佳實踐:使用多階段構建和DockerCompose,遵循編寫Dockerfile的最佳實踐。

Docker監視:收集指標和跟踪集裝箱健康Docker監視:收集指標和跟踪集裝箱健康Apr 10, 2025 am 09:39 AM

Docker監控的核心在於收集和分析容器的運行數據,主要包括CPU使用率、內存使用、網絡流量和磁盤I/O等指標。通過使用Prometheus、Grafana和cAdvisor等工具,可以實現對容器的全面監控和性能優化。

Docker群:建築物可擴展和彈性的容器簇Docker群:建築物可擴展和彈性的容器簇Apr 09, 2025 am 12:11 AM

DockerSwarm可用於構建可擴展和高可用性的容器集群。 1)初始化Swarm集群使用dockerswarminit。 2)加入Swarm集群使用dockerswarmjoin--token:。 3)創建服務使用dockerservicecreate--namemy-nginx--replicas3nginx。 4)部署複雜服務使用dockerstackdeploy-cdocker-compose.ymlmyapp。

Kubernetes的Docker:用於企業應用程序的集裝箱編排Kubernetes的Docker:用於企業應用程序的集裝箱編排Apr 08, 2025 am 12:07 AM

如何利用Docker和Kubernetes進行企業應用的容器編排?通過以下步驟實現:創建Docker鏡像並推送到DockerHub。在Kubernetes中創建Deployment和Service以部署應用。使用Ingress管理外部訪問。應用性能優化和最佳實踐,如多階段構建和資源限制。

Docker故障排除:診斷和解決常見問題Docker故障排除:診斷和解決常見問題Apr 07, 2025 am 12:15 AM

Docker常見問題可以通過以下步驟診斷和解決:1.查看容器狀態和日誌,2.檢查網絡配置,3.確保卷掛載正確。通過這些方法,可以快速定位並修復Docker中的問題,提升系統穩定性和性能。

Docker面試問題:Ace您的DevOps工程採訪Docker面試問題:Ace您的DevOps工程採訪Apr 06, 2025 am 12:01 AM

Docker是DevOps工程師必備的技能。 1.Docker是開源的容器化平台,通過將應用程序及其依賴打包到容器中,實現隔離和可移植性。 2.Docker的工作原理包括命名空間、控制組和聯合文件系統。 3.基本用法包括創建、運行和管理容器。 4.高級用法包括使用DockerCompose管理多容器應用。 5.常見錯誤有容器無法啟動、端口映射問題和數據持久化問題,調試技巧包括查看日誌、進入容器和查看詳細信息。 6.性能優化和最佳實踐包括鏡像優化、資源限制、網絡優化和使用Dockerfile的最佳實踐。

Docker安全硬化:保護您的容器免受漏洞Docker安全硬化:保護您的容器免受漏洞Apr 05, 2025 am 12:08 AM

Docker安全強化的方法包括:1.使用--cap-drop參數限制Linux能力,2.創建只讀容器,3.設置SELinux標籤。這些策略通過減少漏洞暴露面和限制攻擊者能力來保護容器安全。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)