GG資源網

Docker安裝 鏡像管理 性能優化 大全

Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。容器完全使用沙箱機制,相互之間不會有任何介面。

  • 快速,一致地交付你的應用:Docker容器可以確保從開發環境到生產環境的一致性,簡化軟體交付過程。
  • 響應式部署和擴展:Docker的輕量級和快速啟動特性使得基於容器的應用可以在短時間內被自動擴展或縮減。
  • 在同一硬體上運行更多的工作負載:Docker是資源友好的,可以讓你在同一套硬體上運行更多的應用。

目錄:

  • Docker安裝
    • Linux上安裝Docker
    • Windows上安裝Docker
    • macOS上安裝Docker
    • 驗證安裝
  • Docker鏡像管理
    • 查找鏡像
    • 拉取鏡像
    • 查看本地鏡像
    • 刪除鏡像
    • 構建鏡像
  • Docker容器管理
    • 運行容器
    • 查看運行中的容器
    • 停止容器
    • 啟動已停止的容器
    • 刪除容器
    • 容器日誌
  • Docker網路管理
    • 查看網路
    • 創建網路
    • 運行容器時指定網路
    • 連接容器到網路
    • 斷開容器與網路的連接
    • 刪除網路
  • Docker卷和數據管理
    • 創建卷
    • 運行容器時掛載卷
    • 查看卷
    • 刪除卷
  • Docker Compose使用
    • 安裝Docker Compose
    • 使用Compose文件定義服務
    • 啟動服務
    • 停止服務
  • 製作Dockerfile
    • 示例:Python Flask 應用
    • 製作java jar文件Dockerfile
  • Docker Swarm集群管理
    • Swarm集群
    • Swarm集群
    • Swarm節點
    • 部署服務到Swarm
    • Swarm服務
  • 安全管理
    • 官方鏡像
    • 掃描鏡像中的漏洞
    • 最小化容器許可權
    • 管理容器的網路訪問
    • 安全存儲敏感數據
  • Docker性能優化
    • 優化容器啟動時間
    • 資源限制
    • 日誌管理
  • Docker文件系統和存儲優化
    • Overlay2 文件系統
    • 多階段構建
  • Docker安全加固
    • 使用非root用戶運行容器
    • 利用Docker秘密管理敏感信息
  • Docker監控和日誌管理
    • 使用Prometheus和Grafana進行監控
    • 配置日誌驅動
  • Docker CI/CD集成
    • 示例:使用Docker在GitLab CI/CD中構建和推送鏡像
  • Docker常見問題解答

文章目錄

Docker安裝

Docker支持多種平台,包括Ubuntu、Debian、CentOS等Linux發行版,以及Windows和macOS。

Linux上安裝Docker

以Ubuntu為例,首先更新應用包索引:

然後安裝Docker:

Windows上安裝Docker

在Windows上,可以通過安裝Docker Desktop來使用Docker。訪問Docker官網下載Docker Desktop安裝程序,然後按照嚮導完成安裝。

macOS上安裝Docker

在macOS上,同樣可以通過安裝Docker Desktop來使用Docker。訪問Docker官網下載Docker Desktop安裝程序,然後按照嚮導完成安裝。

驗證安裝

安裝完成後,可以通過運行hello-world鏡像來驗證Docker是否正確安裝:

如果安裝正確,你將看到一條消息,說明你的Docker正在運行,並且能夠從Docker Hub拉取鏡像。

或者使用docker version命令看下docker版本,能看到版本說明也是安裝成功:

Docker鏡像管理

Docker鏡像是一個輕量級、可執行的獨立軟體包,包含運行應用所需的所有內容:代碼、運行時、庫、環境變數和配置文件。

查找鏡像

在Docker Hub上查找鏡像:

這個命令會列出Docker Hub中與ubuntu相關的鏡像。

拉取鏡像

從Docker Hub拉取一個鏡像到本地:

這個命令會從Docker Hub拉取Ubuntu 18.04的官方鏡像。

查看本地鏡像

查看當前系統上的Docker鏡像列表:

截圖中是我之前拉的SRS鏡像。

刪除鏡像

刪除一個本地鏡像:

這個命令會刪除本地的Ubuntu 18.04鏡像。

構建鏡像

使用Dockerfile構建新的鏡像:

這個命令會根據當前目錄下的Dockerfile來構建一個名為my-ubuntu的鏡像。

Docker容器管理

容器是獨立運行的一個或一組應用,以及它們的運行環境。通過Docker容器,開發者可以打包應用與環境,並在任何支持Docker的平台上無縫部署。

運行容器

從鏡像啟動一個新容器:

這個命令會從ubuntu:18.04鏡像啟動一個名為my-container的容器,並啟動一個互動式的bash會話。

查看運行中的容器

查看當前正在運行的容器:

停止容器

停止一個運行中的容器:

啟動已停止的容器

啟動一個已停止的容器:

刪除容器

刪除一個容器:

注意:只有停止狀態的容器才能被刪除。

容器日誌

查看容器的輸出日誌:

這個命令會顯示容器的標準輸出。

Docker網路管理

Docker網路允許容器間通信,以及容器與外部世界通信。Docker提供了多種網路模式,包括bridge、host、none和overlay等。

查看網路

列出所有Docker網路:

創建網路

創建一個新的網路:

這個命令創建了一個名為my-bridge-network的bridge網路。

運行容器時指定網路

在特定網路中運行容器:

這個命令在my-bridge-network網路中啟動了一個名為my-container的容器,並運行nginx服務。

連接容器到網路

將已存在的容器連接到網路:

斷開容器與網路的連接

從網路中斷開容器:

刪除網路

刪除一個網路:

Docker卷和數據管理

Docker卷用於持久化和共享容器的數據。通過使用卷,可以將數據生命周期從容器生命周期中解耦出來。

創建卷

創建一個新的卷:

運行容器時掛載卷

在容器中使用卷:

這個命令啟動了一個nginx容器,將my-volume卷掛載到容器的/data目錄。

查看卷

列出所有卷:

刪除卷

刪除一個卷:

Docker Compose使用

Docker Compose是一個用於定義和運行多容器Docker應用的工具。通過Compose,你可以使用YAML文件來配置應用的服務。

安裝Docker Compose

請根據官方文檔指引安裝Docker Compose。

使用Compose文件定義服務

創建一個docker-compose.yml文件,定義服務:

啟動服務

通過Docker Compose啟動服務:

停止服務

停止由Docker Compose啟動的服務:

製作Dockerfile

製作一個Dockerfile通常涉及定義從哪個基礎鏡像開始、如何構建你的應用、以及當容器啟動時需要執行什麼命令等步驟。下面是一個簡單的示例,展示了如何為一個Python Flask應用創建一個Dockerfile

示例:Python Flask 應用

假設你有一個簡單的Flask應用,結構如下:

其中,app.py是Flask應用的主文件,requirements.txt列出了所有的Python依賴。

app.py

@app.route('/')
def hello_world():
return 'Hello, Docker!'

if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')

requirements.txt

Dockerfile

接下來,創建一個Dockerfile來容器化這個Flask應用。

# 設置工作目錄
WORKDIR /app

# 將當前目錄內容複製到位於/app中的容器中
COPY . /app

# 安裝requirements.txt中指定的任何所需包
RUN pip install --no-cache-dir -r requirements.txt

# 使埠80可用於該容器外的環境
EXPOSE 80

# 定義環境變數
ENV NAME World

# 在容器啟動時運行app.py
CMD ["python""app.py"]

這個Dockerfile執行了以下步驟:

  1. 從官方Python 3.8 slim鏡像開始構建。
  2. 將工作目錄設置為容器內的/app
  3. 複製當前目錄下的所有文件到容器內的/app目錄。
  4. 使用pip安裝requirements.txt文件中列出的所有依賴。
  5. 將容器的埠80設置為對外開放。
  6. 設置一個環境變數NAME,值為World
  7. 定義容器啟動時執行的默認命令為python app.py

構建和運行Docker鏡像

在包含Dockerfile的目錄中運行以下命令來構建鏡像:

構建完成後,運行你的容器:

這會將容器的80埠映射到宿主機的4000埠。現在,你可以通過訪問http://localhost:4000來訪問你的Flask應用。

這只是一個基本的Dockerfile示例。根據你的應用需求,你可能需要調整和優化你的Dockerfile,例如使用多階段構建來減小鏡像大小,或者添加更多的配置和優化步驟。

製作java jar文件Dockerfile

製作一個用於Java應用(打包成jar文件)的Dockerfile通常需要考慮基礎鏡像、構建環境、運行環境和啟動命令等因素。以下是一個示例,展示如何為一個簡單的Spring Boot應用創建一個Dockerfile

假設

  • 你的Spring Boot應用已經被打包成一個名為app.jar的jar文件。
  • 你想要在容器內運行這個jar文件。

Dockerfile

# 設置工作目錄為/app
WORKDIR /app

# 將jar文件複製到容器的/app目錄下
COPY target/app.jar /app/app.jar

# 暴露應用運行的埠
EXPOSE 8080

# 定義容器啟動時執行的命令
CMD ["java""-jar""/app/app.jar"]

這個Dockerfile執行了以下步驟:

  1. 基礎鏡像:從官方OpenJDK 11 slim版本的鏡像開始構建。這個鏡像包含了運行Java應用所需的JRE環境。
  2. 工作目錄:將容器內的工作目錄設置為/app
  3. 複製jar文件:將構建好的jar文件(假設位於你的項目的target目錄下)複製到容器的/app目錄下。請根據你的實際構建路徑修改COPY命令中的源路徑。
  4. 暴露埠:將容器的埠8080設置為對外開放,這假設你的Spring Boot應用默認監聽在8080埠上。如果你的應用監聽的是其他埠,請相應地修改此處。
  5. 啟動命令:定義了容器啟動時執行的命令,使用java -jar來運行jar文件。

構建和運行Docker鏡像

在包含Dockerfile的目錄中運行以下命令來構建鏡像:

構建完成後,運行你的容器:

這會將容器的8080埠映射到宿主機的8080埠。現在,你可以通過訪問http://localhost:8080來訪問你的Spring Boot應用。

 

請注意,這個示例假設你的Spring Boot應用已經被構建並打包成jar文件。在實際的項目中,你可能會使用Maven或Gradle作為構建工具,並且可能會在Dockerfile中包含構建步驟,或者使用多階段構建來優化最終鏡像的大小。

Docker Swarm集群管理

Docker Swarm是Docker的原生集群管理工具,它允許你將多個Docker主機組成一個集群,在集群中部署和管理容器。

Swarm集群

在主節點上初始化Swarm集群:

這個命令會初始化一個Swarm集群,並將當前節點設置為管理節點。

Swarm集群

在工作節點上加入Swarm集群:

使用管理節點提供的加入令牌來加入集群。

Swarm節點

在管理節點上查看集群的節點信息:

部署服務到Swarm

在Swarm集群中部署服務:

這個命令會在Swarm集群中創建一個名為my-web的服務,並部署3個nginx容器實例。

Swarm服務

列出所有Swarm服務:

查看特定服務的詳細信息:

縮放服務的副本數量:

更新服務:

安全管理

Docker安全包括鏡像安全、容器運行時安全、網路安全等方面。

官方鏡像

儘可能使用官方鏡像,減少安全風險。

掃描鏡像中的漏洞

使用Docker Hub或其他第三方工具掃描鏡像中的安全漏洞。

最小化容器許可權

使用最小許可權原則運行容器,例如,避免使用--privileged標誌。

管理容器的網路訪問

根據需要配置容器的網路訪問策略,避免不必要的外部訪問。

安全存儲敏感數據

使用Docker secrets或其他加密工具安全地存儲和管理敏感數據。

Docker性能優化

優化Docker的性能,包括容器性能優化、資源分配、日誌管理等。

優化容器啟動時間

盡量減少容器鏡像的大小,使用Alpine Linux等輕量級基礎鏡像。

資源限制

合理分配容器的CPU和內存資源,避免資源爭搶導致的性能下降。

日誌管理

合理配置容器日誌的大小和滾動策略,避免日誌文件過大影響性能。

Docker文件系統和存儲優化

Overlay2 文件系統

Overlay2是Docker推薦的存儲驅動,因為它提供了良好的性能和兼容性。Overlay2通過創建一個層疊的文件系統,將容器和鏡像的變更層放在頂層,而共享的只讀層保持不變。

多階段構建

利用Dockerfile的多階段構建可以減小最終鏡像的大小,提高構建效率。例如,您可以在一個階段中編譯您的應用,然後在另一個階段中僅複製編譯後的二進位文件到一個新的輕量級基礎鏡像中。

# 第二階段:運行
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Docker安全加固

使用非root用戶運行容器

默認情況下,容器以root用戶運行,這可能帶來潛在的安全風險。通過在Dockerfile中指定非root用戶,可以增加容器的安全性。

利用Docker秘密管理敏感信息

對於需要在容器中使用的敏感信息(如資料庫密碼),應避免直接在Dockerfile或環境變數中硬編碼,而是使用Docker秘密(Docker Secrets)來安全地管理這些數據。

Docker監控和日誌管理

使用Prometheus和Grafana進行監控

Prometheus是一個開源監控解決方案,可以與Docker容器化環境很好地集成。通過導出容器和Docker守護進程的度量標準,Prometheus可以收集並存儲這些數據,而Grafana可以用來可視化這些數據。

配置日誌驅動

Docker支持多種日誌驅動程序,可以將容器的日誌發送到不同的目的地,如本地文件、json-file或遠程日誌伺服器。通過合理配置日誌驅動,可以有效管理容器日誌。

Docker CI/CD集成

Docker可以與Jenkins、GitLab CI/CD等持續集成和持續部署工具無縫集成。通過在CI/CD管道中使用Docker,可以自動化構建、測試和部署容器化應用。

示例:使用Docker在GitLab CI/CD中構建和推送鏡像

Docker常見問題解答

Q: 如何刪除所有停止的容器?

A: 使用docker container prune命令。

Q: 如何刪除懸空(dangling)鏡像?

A: 使用docker image prune命令。

Q: Docker容器與虛擬機有何不同?

A: Docker容器是輕量級的,共享宿主機的內核,而虛擬機包括完整的操作系統和虛擬硬體,因此更重。

Q: 如何備份Docker容器中的數據?

A: 可以通過創建數據卷的快照來備份數據,或者使用docker cp命令將數據從容器複製到宿主機。

由於網站搬家,部分鏈接失效,如無法下載,請聯繫站長!謝謝支持!
1. 帶 [親測] 說明源碼已經被站長親測過!
2. 下載後的源碼請在24小時內刪除,僅供學慣用途!
3. 分享目的僅供大家學習和交流,請不要用於商業用途!
4. 本站資源售價只是贊助,收取費用僅維持本站的日常運營所需!
5. 本站所有資源來源於站長上傳和網路,如有侵權請郵件聯繫站長!
6. 沒帶 [親測] 代表站長時間緊促,站長會保持每天更新 [親測] 源碼 !
7. 盜版ripro用戶購買ripro美化無擔保,若設置不成功/不生效我們不支持退款!
8. 本站提供的源碼、模板、插件等等其他資源,都不包含技術服務請大家諒解!
9. 如果你也有好源碼或者教程,可以到審核區發布,分享有金幣獎勵和額外收入!
10.如果您購買了某個產品,而我們還沒來得及更新,請聯繫站長或留言催更,謝謝理解 !
GG資源網 » Docker安裝 鏡像管理 性能優化 大全