深入理解 Docker 及常用命令

在云計算與容器化技術飛速發展的今天,Docker 已成為開發者必備的核心技能。本文將從底層原理到實戰操作,系統梳理 Docker 的核心知識體系,結合大量實操案例幫助讀者快速掌握容器化部署的全流程。

一、Docker 核心概念與底層原理

1.1 容器技術的本質突破

理解 Docker 的關鍵在于區分內核與用戶空間的邊界。容器內的進程并非運行在虛擬環境中,而是直接依托宿主內核運行,這與虛擬機有本質區別。以宿主為 Ubuntu、容器為 CentOS 為例:

  • 容器模式:CentOS 容器中的進程直接向 Ubuntu 內核發送系統調用(syscall),僅通過鏡像提供獨立的用戶空間(userland)
  • 虛擬機模式:CentOS 進程先與虛擬機內的 CentOS 內核交互,再通過虛擬硬件層轉發至宿主系統

這種設計使得 Docker 容器具備輕量級特性 —— 一個 Tomcat 容器的資源占用通常小于 50MB,而傳統虛擬機至少需要 512MB 內存。

1.2 Docker 架構深度解析

Docker 核心組件架構圖:

  • 客戶端(Client):用戶交互入口,通過 API 與守護進程通信
  • 守護進程(Daemon):運行在宿主機后臺,負責容器生命周期管理
  • 鏡像(Images):只讀的文件系統模板,采用分層存儲結構
  • 容器(Containers):鏡像的運行實例,可看作 "帶有讀寫層的鏡像"
  • 倉庫(Registry):集中存儲鏡像的服務,分為公共倉庫與私有倉庫

1.3 容器 vs 虛擬機:性能與架構對比

維度容器(Docker)虛擬機(VM)
啟動時間毫秒級(100ms-500ms)分鐘級(1min-3min)
資源占用共享宿主內核,資源消耗極低獨立操作系統,資源占用高
隔離級別進程級隔離(Namespace+Cgroup)系統級隔離(硬件虛擬化)
鏡像大小通常 10MB-500MB至少 1GB 以上
應用場景微服務部署、持續集成多操作系統環境、資源隔離
運行機制對比圖:

二、Docker 版本體系與選型建議

2.1 版本分類與特性差異

Docker 主要分為兩大版本體系:

  • 社區版(Docker CE)

    • 免費開源,適合開發測試環境
    • 每季度發布新版本(3 月 / 6 月 / 9 月 / 12 月)
    • 支持周期為 6 個月
  • 企業版(Docker EE)

    • 付費訂閱,提供官方技術支持
    • 包含高級安全特性(如 Trustee)
    • 支持周期長達 24 個月

2.2 版本號解析

Docker 24.0.5為例:

  • 24:主版本號,每年更新一次
  • 0:次版本號,代表重大功能更新
  • 5:修訂號,包含 bug 修復和小功能增強

生產環境建議:選擇偶數年份的 LTS 版本(如 20.10 LTS),兼顧穩定性與新特性支持。

三、多平臺 Docker 安裝實戰

3.1 CentOS 8 安裝指南

完整安裝腳本:
# 1. 卸載舊版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 2. 設置倉庫
sudo yum install -y yum-utils
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 3. 安裝Docker CE
sudo yum install docker-ce docker-ce-cli containerd.io# 4. 啟動服務并設置開機自啟
sudo systemctl start docker
sudo systemctl enable docker# 5. 驗證安裝
sudo docker run hello-world

3.2 Ubuntu 22.04 安裝優化

推薦安裝方式:
# 使用APT源安裝(推薦)
sudo apt-get update
sudo apt-get install \ca-certificates \curl \gnupg \lsb-releasecurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 優化Docker存儲驅動(推薦使用overlay2)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"storage-driver": "overlay2","registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOFsudo systemctl daemon-reload
sudo systemctl restart docker

3.3 常見安裝問題解決方案

  1. 端口沖突問題

    # 查看占用80端口的進程
    sudo lsof -i:80
    # 停止沖突服務
    sudo systemctl stop nginx
    
  2. SELinux 限制

    # 臨時關閉SELinux
    setenforce 0
    # 永久關閉(修改配置文件)
    sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    

四、Docker 核心命令實戰手冊

4.1 鏡像管理命令集

命令格式功能說明實戰示例
docker search [關鍵詞]從倉庫搜索鏡像docker search mysql
docker pull [鏡像名]拉取鏡像到本地docker pull nginx:1.23-alpine
docker images查看本地鏡像列表docker images -a
docker rmi [鏡像ID]刪除本地鏡像docker rmi $(docker images -q)
docker tag [源鏡像] [目標鏡像]鏡像打標簽docker tag nginx:latest mynginx:v1

4.2 容器生命周期管理

核心操作命令:
  1. 創建容器docker create -it --name mycentos centos:7 /bin/bash
  2. 運行容器docker run -d -p 8080:80 --name myapp tomcat:9.0
  3. 進入容器docker exec -it mycentos bash
  4. 查看日志docker logs -f myapp
  5. 數據備份docker cp mycontainer:/data /backup

4.3 高級管理技巧

批量操作腳本:
# 停止所有運行中的容器
docker stop $(docker ps -q)# 清理所有停止的容器
docker rm $(docker ps -aq)# 清理未使用的鏡像
docker image prune -a
資源限制配置:
# 限制容器使用1GB內存
docker run -m 1g --memory-swap=2g myapp# 限制CPU使用率為2個核心
docker run --cpus=2 myapp

五、Docker 倉庫管理與實踐

5.1 公共倉庫高效使用

Docker Hub 使用技巧:
  1. 鏡像加速:配置國內鏡像源

    {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    
  2. 組織管理:創建團隊倉庫

    # 登錄組織倉庫
    docker login -u myteam -p password team.docker.com
    # 推送鏡像到組織倉庫
    docker push team.docker.com/myapp:v1
    

5.2 私有倉庫搭建實戰

基于 Harbor 搭建企業級倉庫:
  1. 安裝 Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  2. 部署 Harbor

    # docker-compose.yml
    version: '2'
    services:proxy:image: nginx:1.18-alpineports:- "443:443"- "80:80"registry:image: registry:2volumes:- /data/registry:/var/lib/registryharbor-core:image: harbor-core:v2.8.0environment:- DB_HOST=postgresql# 其他服務...
    
  3. 安全配置

    # 生成自簽名證書
    openssl genrsa -out ca.key 4096
    openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=harbor.mydomain.com"# 配置客戶端信任證書
    cp ca.crt /etc/docker/certs.d/harbor.mydomain.com/ca.crt
    systemctl restart docker
    

六、Docker 鏡像深度解析

6.1 鏡像分層存儲原理

Docker 鏡像采用 UnionFS 分層存儲,以 Nginx 鏡像為例:

  1. 基礎層:alpine 操作系統(約 5MB)
  2. 運行時層:Nginx 二進制文件(約 30MB)
  3. 配置層:默認配置文件(約 1MB)
  4. 用戶層:自定義配置(可變層)

這種設計實現了鏡像的高效復用,多個容器可共享同一基礎層。

6.2 Dockerfile 最佳實踐

高性能 Dockerfile 示例:

dockerfile

# 基礎鏡像選擇
FROM alpine:3.16 AS builder# 安裝編譯依賴
RUN apk add --no-cache gcc g++ make# 復制源碼
WORKDIR /app
COPY . .# 編譯應用
RUN make all# 生產環境鏡像
FROM alpine:3.16
RUN apk add --no-cache libstdc++# 復制編譯結果
COPY --from=builder /app/dist/myapp /usr/bin/# 暴露端口
EXPOSE 8080# 啟動命令
CMD ["myapp", "-config", "/etc/myapp.conf"]

6.3 鏡像優化技巧

  1. 分層優化

    dockerfile

    # 錯誤示例:多層操作
    RUN apt-get update
    RUN apt-get install -y python3# 正確示例:合并操作
    RUN apt-get update && apt-get install -y python3
    
  2. 體積優化

    dockerfile

    # 使用多階段構建
    FROM python:3.9-slim AS builder
    # 構建階段...FROM python:3.9-slim
    # 僅復制必要文件
    COPY --from=builder /app/dist /app
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909659.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【衛星通信】衛星與5G深度融合的架構研究——釋放非地面網絡潛能,構建全球無縫連接【3GPP TR 23.700-19 V0.1.0 (2025-04)】

引言 隨著5G網絡部署的持續推進&#xff0c;衛星通信在覆蓋偏遠地區、保障應急通信等場景中的重要性日益凸顯。3GPP Technical Report&#xff08;TR&#xff09;23.700-19 V0.1.0&#xff08;2025-04&#xff09;作為Release 20階段的最新研究成果&#xff0c;系統性地探討了…

kicad運行時出錯,_Pnext->_Myproxy = nullptr;訪問內存出錯

花費了比較長的時間&#xff0c;解決了編譯過程中遇到的許多問題后&#xff0c;終于把這個開源的工程編譯好了&#xff0c;運行post build 腳本將需要的鏈接文件拷貝好。正當我以為沒有任何問題了&#xff0c;雙擊可執行程序運行。 結果運行起來的時候報錯了&#xff0c;提示無…

資深Java工程師的面試題目(一)并發編程

以下是幾道針對Java并發編程的面試題&#xff0c;涵蓋基礎知識、高級概念和實際應用場景&#xff0c;適合資深Java工程師的面試評估&#xff1a; 1. 線程池與任務調度 題目: 描述Java線程池的核心參數&#xff08;如corePoolSize、maximumPoolSize、keepAliveTime等&#xff…

解決Spark4.0.0依賴問題

Apache Spark 4.0.0 沖突解決指南 1. 問題背景 在嘗試運行一個基于 Apache Spark 4.0.0 的 Java 應用程序。根據 Spark 4.0.0 的發布說明&#xff0c;該版本默認支持 Scala 2.13 和 JDK 17。在初始設置和運行過程中&#xff0c;遇到了以下主要問題&#xff1a; 依賴沖突 (PO…

什么是SeaTunnel

SeaTunnel&#xff1a;高性能、分布式數據集成平臺 1. 什么是SeaTunnel&#xff1f; SeaTunnel&#xff08;原名Waterdrop&#xff09;是一個高性能、分布式、可擴展的數據集成平臺&#xff0c;專為大規模數據同步、ETL&#xff08;Extract, Transform, Load&#xff09;和實…

Android 使用OkHttp 下載文件失敗問題定位和修復

一、背景 使用Okhttp下載文件時,存在失敗情況,剛開始以為是網絡問題,后面添加相關日志發現,是在網絡波動比較大的情況下,被判為timeout超時,結束了下載任務。 二、解決方案 有問題的下載配置寫法: 注:這里只是展示配置下載的關鍵代碼 val client OkHttpClient()val request…

【Docker基礎】Docker核心概念:命名空間(Namespace)之PID詳解

目錄 引言 1 基礎概念回顧 1.1 命名空間概述 1.2 命名空間的類型 2 PID命名空間詳解 2.1 PID命名空間的概念 2.2 PID命名空間的作用 2.3 PID命名空間的工作原理 2.3.1 PID命名空間的創建與銷毀 2.3.2 PID命名空間的層次結構 2.3.3 PID命名空間的進程ID映射 3 PID命…

SSM框架:企業級Java開發利器

SSM框架詳解&#xff1a;Java企業級開發的核心基石 SSM框架是Java企業級開發中最流行的框架組合&#xff0c;由Spring、Spring MVC和MyBatis三大框架整合而成。這個輕量級的框架組合為Java開發者提供了高效、靈活的企業級應用解決方案。 一、SSM框架組成解析 1. Spring框架 …

網絡安全中的人工智能應用

人工智能&#xff08;AI&#xff09;在網絡安全中的應用從根本上改變了企業抵御網絡威脅的方式。它利用先進的機器學習&#xff08;ML&#xff09;算法分析多源海量風險數據&#xff0c;挖掘威脅模式&#xff0c;從而更輕松地快速應對新興風險。AI 能以驚人的速度和準確性幫助發…

Vue + Spring Boot 前后端交互實踐:正確使用 `Content-Type: application/json` 及參數傳遞方式

在前后端分離開發中&#xff0c;前端通過 HTTP 請求與后端進行數據交互是常見的操作。其中&#xff0c;Content-Type 是決定請求體格式的重要字段之一。本文將以一個具體的例子出發&#xff0c;講解如何在 Vue 前端 使用 Axios 發送 JSON 格式請求&#xff0c;并在 Spring Boot…

微服務拆分 SpringCloud

拆分原則 什么時候拆分 大多數小型項目&#xff1a; 一般是先采用單體架構&#xff0c;隨著用戶規模擴大、業務復雜后再逐漸拆分為微服務架構&#xff08;前易后難&#xff09;。確定的大型項目&#xff1a; 資金充足&#xff0c;目標明確&#xff0c;可以直接選擇微服務架構…

DataX Hive寫插件深度解析:從數據寫入到Hive表關聯實戰

引言 在大數據處理流程中&#xff0c;將數據高效寫入Hive表是數據倉庫建設的關鍵環節。DataX作為阿里巴巴開源的數據同步工具&#xff0c;其Hive寫插件&#xff08;Hdfswriter&#xff09;提供了將數據寫入HDFS并與Hive表無縫關聯的能力。本文將系統介紹Hdfswriter的功能特性、…

基于國產USRP搭建十六通道同步采集系統, 耗費200萬 歡迎免費體驗

隨著無線通信、雷達探測和電子偵察等技術的發展&#xff0c;多通道信號同步采集的需求日益突出。我司基于8臺USRP-LW N321設備&#xff0c;構建了一套高精度十六路通道信號同步采集系統&#xff0c;該系統通過并行采集與精確時頻對齊&#xff0c;可為空間譜測向和MIMO系統等關鍵…

《前端編譯工具源映射配置:Webpack與Gulp的深度剖析》

當我們深入探索不同前端編譯工具時&#xff0c;Webpack與Gulp在源映射配置上的差異與特色&#xff0c;如同隱藏在代碼深處的神秘寶藏&#xff0c;等待我們去挖掘、去解讀。 Webpack作為現代前端構建的核心工具&#xff0c;在源映射配置方面展現出了高度的靈活性與可定制性。它…

4. 時間序列預測的自回歸和自動方法

4.1自回歸 自回歸是一種時間序列預測方法&#xff0c;僅依賴于時間序列的先前輸出&#xff1a;該技術假設下一個時間戳的未來觀測值與先前時間戳的觀測值存在線性關系。 在自回歸中&#xff0c;前一個時間戳的輸出值成為預測下一個時間戳的輸入值&#xff0c;并且誤差遵循簡單線…

Android 多屏幕旋轉控制原理與實戰

在嵌入式設備、雙顯示終端或定制系統中&#xff0c;Android 多屏幕控制&#xff08;尤其是屏幕方向旋轉&#xff09;是一個兼具挑戰與價值的功能模塊。本文將深入分析如何識別多個顯示、如何通過系統 API 控制旋轉&#xff0c;并討論為何某些 displayId 無法旋轉。 &#x1f4c…

faiss上的GPU流程,GPU與CPU之間的聯系

GPU使用流程 1、初始化階段 1.1:初始化GPU資源對象 目的: 為GPU上的操作分配和管理資源,例如臨時內存和CUDA流。 操作: 創建StandardGpuResources對象來管理GPU的內存和計算資源。例如: faiss::gpu::StandardGpuResources res; res.setTempMemory(1024 * 1024 * 512); …

在CentOS 7系統安裝PostgreSQL 15時出現`libzstd.so.1`依賴缺失問題

--> 正在處理依賴關系 libzstd.so.1()(64bit)&#xff0c;它被軟件包 postgresql15-server-15.13-1PGDG.rhel7.x86_64 需要---> 軟件包 python3-pip.noarch.0.9.0.3-8.el7 將被 安裝---> 軟件包 python3-setuptools.noarch.0.39.2.0-10.el7 將被 安裝--> 解決依賴關…

走進Coinate|迪拜第二大交易平臺如何構建極速金融引擎

在加密資產交易飛速發展的今天&#xff0c;技術實力已成為交易平臺生存與發展的核心競爭力。與那些高調營銷卻技術薄弱的平臺不同&#xff0c;來自迪拜的頭部交易平臺——Coinate&#xff0c;則始終堅持”以技術立命”的發展路徑。 在迪拜這片充滿創新與資本活力的中東熱土&am…

手機日志是什么?如何調試手機日志

目錄 一、手機日志的類型&#xff1a; 二、如何查看和調試手機日志&#xff08;以 Android 為例&#xff09;&#xff1a; 方法 1&#xff1a;使用 Android Studio ADB&#xff08;推薦&#xff09; 方法 2&#xff1a;使用手機端日志工具&#xff08;免電腦&#xff09; …