Docker的使用及核心命令

文章目錄

  • Docker基礎概念
  • 鏡像管理命令
    • 鏡像查看和搜索
    • 鏡像下載和刪除
    • 鏡像構建
  • 容器生命周期管理
    • 創建和啟動容器
    • 容器控制命令
    • 容器清理
  • 容器交互和調試
    • 進入容器
    • 文件操作
    • 日志和監控
  • 數據管理
    • 數據卷(Volume)
    • 綁定掛載
  • 網絡管理
    • 網絡基礎操作
    • 端口映射
  • Dockerfile和Docker Compose的作用說明
    • Dockerfile的作用
    • Docker Compose的作用
  • 兩者的關系
  • 總結

Docker基礎概念

在深入命令之前,先理解幾個關鍵概念:

  • 鏡像(Image):應用的只讀模板,包含運行應用所需的所有內容
  • 容器(Container):鏡像的運行實例,是應用的實際運行環境
  • 倉庫(Repository):存儲和分發鏡像的地方,如Docker Hub

簡單類比:鏡像就像是"類",容器就是"類的實例對象"。

鏡像管理命令

鏡像查看和搜索

# 查看本地鏡像列表
docker images
docker image ls# 搜索Docker Hub上的鏡像
docker search nginx
docker search --limit 5 mysql  # 限制搜索結果數量

鏡像下載和刪除

# 下載鏡像
docker pull nginx                    # 下載最新版本
docker pull nginx:1.20              # 下載指定版本
docker pull mysql:8.0               # 下載MySQL 8.0# 刪除鏡像
docker rmi nginx:latest              # 刪除指定鏡像
docker rmi $(docker images -q)      # 刪除所有鏡像(慎用)
docker image prune                   # 刪除懸空鏡像(推薦)

鏡像構建

# 從Dockerfile構建鏡像
docker build -t myapp:v1.0 .        # 構建并打標簽
docker build -t myapp:latest --no-cache .  # 不使用緩存構建# 從容器創建鏡像(不推薦,但有時有用)
docker commit container_name new_image:tag

容器生命周期管理

創建和啟動容器

# 運行容器的基本命令
docker run hello-world               # 運行測試容器# 常用參數組合
docker run -d --name mynginx -p 8080:80 nginx
# -d: 后臺運行
# --name: 指定容器名稱
# -p: 端口映射 (主機端口:容器端口)# 交互式運行
docker run -it ubuntu:20.04 /bin/bash
# -i: 交互模式
# -t: 分配偽終端# 掛載數據卷
docker run -d --name myapp -v /host/path:/container/path nginx
docker run -d --name mydb -v myvolume:/var/lib/mysql mysql:8.0

容器控制命令

# 查看容器狀態
docker ps                           # 查看運行中的容器
docker ps -a                        # 查看所有容器(包括停止的)
docker ps -q                        # 只顯示容器ID# 啟動和停止容器
docker start container_name          # 啟動已停止的容器
docker stop container_name           # 優雅停止容器
docker kill container_name           # 強制停止容器
docker restart container_name        # 重啟容器# 暫停和恢復容器
docker pause container_name          # 暫停容器
docker unpause container_name        # 恢復容器

容器清理

# 刪除容器
docker rm container_name             # 刪除已停止的容器
docker rm -f container_name          # 強制刪除運行中的容器
docker rm $(docker ps -aq)          # 刪除所有容器# 自動清理
docker container prune               # 刪除所有停止的容器
docker system prune                  # 清理未使用的鏡像、容器、網絡
docker system prune -a               # 更徹底的清理(包括未使用的鏡像)

容器交互和調試

進入容器

# 在運行的容器中執行命令
docker exec -it container_name /bin/bash    # 進入容器交互終端
docker exec container_name ls /app          # 在容器中執行單條命令
docker exec -u root container_name /bin/bash # 以root用戶身份進入

文件操作

# 容器和主機之間復制文件
docker cp file.txt container_name:/app/     # 從主機復制到容器
docker cp container_name:/app/file.txt ./   # 從容器復制到主機# 查看容器文件系統變化
docker diff container_name

日志和監控

# 查看容器日志
docker logs container_name           # 查看容器日志
docker logs -f container_name        # 實時跟蹤日志
docker logs --tail 100 container_name # 查看最后100行日志
docker logs -t container_name        # 顯示時間戳# 查看容器詳細信息
docker inspect container_name        # 查看容器詳細配置
docker stats                        # 實時查看所有容器資源使用情況
docker stats container_name         # 查看指定容器資源使用

數據管理

數據卷(Volume)

# 創建和管理數據卷
docker volume create myvolume        # 創建數據卷
docker volume ls                     # 列出所有數據卷
docker volume inspect myvolume      # 查看數據卷詳情
docker volume rm myvolume           # 刪除數據卷# 使用數據卷
docker run -d --name webapp -v myvolume:/app/data nginx

綁定掛載

# 掛載主機目錄到容器
docker run -d --name dev-env -v $(pwd):/workspace node:14
docker run -d --name logs -v /var/log:/container/logs nginx# 只讀掛載
docker run -d --name readonly-app -v /host/config:/app/config:ro nginx

網絡管理

網絡基礎操作

# 網絡管理
docker network ls                    # 列出所有網絡
docker network create mynetwork     # 創建自定義網絡
docker network inspect mynetwork    # 查看網絡詳情
docker network rm mynetwork         # 刪除網絡# 容器連接到網絡
docker run -d --name app1 --network mynetwork nginx
docker network connect mynetwork container_name    # 將已存在容器連接到網絡
docker network disconnect mynetwork container_name # 斷開網絡連接

端口映射

# 各種端口映射方式
docker run -d -p 8080:80 nginx              # 映射到指定端口
docker run -d -p 127.0.0.1:8080:80 nginx    # 映射到指定IP
docker run -d -P nginx                       # 隨機映射所有暴露端口# 查看端口映射
docker port container_name

Dockerfile和Docker Compose的作用說明

Dockerfile的作用

Dockerfile是什么?
Dockerfile是一個文本文件,包含了一系列指令,用來自動化構建Docker鏡像。它就像是"鏡像的制作配方"。

主要作用:

  1. 標準化環境構建:確保每次構建的環境完全一致,讓團隊成員使用相同的運行環境。

  2. 自動化鏡像制作

    FROM node:16             # 選擇基礎環境
    WORKDIR /app             # 設置工作目錄
    COPY package.json ./     # 復制依賴文件
    RUN npm install          # 安裝依賴
    COPY . .                 # 復制源代碼
    CMD ["npm", "start"]     # 設置啟動命令
    

Docker Compose的作用

Docker Compose是什么?
Docker Compose是用來定義和管理多容器應用的工具,通過一個YAML文件描述整個應用的架構。

主要作用:

  1. 多容器編排管理

    services:web:        # Web服務image: nginxdb:         # 數據庫服務image: mysqlcache:      # 緩存服務image: redis
    
  2. 簡化復雜應用部署:只用一個命令啟動整個應用棧、自動處理容器間依賴關系和統一管理網絡和數據卷。

  3. 服務間通信管理:自動創建內部網絡、服務間可通過服務名直接通信、統一管理端口映射。

兩者的關系

協作關系:

  • Dockerfile負責"如何制作鏡像"
  • Docker Compose負責"如何編排容器"
  • 通常在docker-compose.yml中引用Dockerfile

使用場景:

場景使用工具原因
單個應用容器化Dockerfile只需要構建一個鏡像
微服務架構部署Dockerfile + Docker Compose需要編排多個服務
開發環境搭建Docker Compose需要數據庫、緩存等多個服務
CI/CD流水線主要用Dockerfile構建和推送鏡像

總結

  • Dockerfile = “制作配方”:告訴Docker如何一步步構建你的應用鏡像
  • Docker Compose = “指揮家”:協調多個容器協同工作,形成完整的應用系統

兩者結合使用,能夠實現從單個應用的容器化到復雜系統的自動化部署,是現代軟件開發中不可或缺的工具組合。

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

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

相關文章

考研408計算機網絡第36題真題解析(2021-2023)

(2023.36)在使用 CSMA/CD 協議的環境中,使用截斷二進制指數退避算法,來選擇重傳時機,算法 有如下規定: (1)基本的退避時間為爭用期 2τ,假設某網絡具體的爭用期為 51.2us…

Asio C++ Library是用來做什么的

hriskohlhoff/asio 是由 Chris Kohlhoff 主導維護的開源 C 庫,專注于提供高效、跨平臺的異步 I/O 支持,廣泛應用于網絡編程、并發控制和高性能系統開發。 📘 項目概述 項目名稱:Asio C Library 下載地址:https://down…

ac791的按鍵ad_channel

每次ad_channel這個參數都要給我一定的迷惑性,讓我以為這是通道的數量

機器人巡檢與巡邏的區別進行詳細講解和對比

機器人巡檢與巡邏的區別進行詳細講解和對比 盡管這兩個詞經常被混用,但在技術和應用層面上,它們有著本質的區別。核心區別在于:巡檢是“深度體檢”,而巡邏是“治安巡查”。 以下將從多個維度進行詳細講解和對比。 一、核心概念與目…

先進電機拓撲及控制算法介紹(3)——以“數據”驅動電機實現真正的無模型

1. 背景介紹 之前已經介紹過“無模型預測控制(Model-Free Predictive Control/MFPC)”中的“無模型預測電流控制(Model-Free Predictive Current Control/MFPCC)”,可參考下面知乎。 https://zhuanlan.zhihu.com/p/6…

C primer plus (第六版)第十一章 編程練習第5,6題

題目:5.設計并測試?個函數,搜索第1個函數形參指定的字符串,在其中查找第2個函數形參指定的字符?次出現的位置。如果成功,該函數返指向該字符的指針,如果在字符串中未找到指定字符,則返回空指針…

Altium Designer(AD)PCB絲印批量修改

目錄 1 Altium Designer(AD)PCB絲印的字體批量修改 1.1選中所有絲印 1.1.1選中一個絲印:鼠標左鍵點擊 1.1.2查找相似對象:鼠標右鍵或快捷鍵N 1.1.3如下圖所示絲印被全部選中 1.2絲印字體信息修改 1.2.1打開屬性面板——>位置/屬性/字體修改 1.2.2絲印字體修改 1.2.…

AI+華為HarmonyOS開發工具DevEco Studio詳細安裝指南

作者:長江支流 日期:2025-09-13 第一部分:AI工具使用 一、如何使用DeepSeek幫助自己的工作? (一)提示詞 為了與時俱進,充分利用最新技術、提高效率,采用AI生成部分材料&#xf…

【Ambari監控】— API請求邏輯梳理

附錄:完整內容和源代碼下載請參照 https://doc.janettr.com/ 一、前序章節回憶 我們在前面章節拆解了 Collector 的啟動過程,并定位了控制器 TimelineWebServices。 本節聚焦 Collector 對外暴露的 REST 服務,搭建「接口全景圖」。 二、接口…

論文閱讀 2025-9-13 論文閱讀隨心記

隨便記錄一下最近閱讀的幾篇論文 1. Does DINOv3 Set a New Medical Vision Standard? 第一章 動機 (Motivation) 自然圖像領域的成功范式:大型語言模型(LLMs)和視覺基礎模型(如 DINO 系列)證明,通過自監督…

Avalonia 基礎導航實現:從頁面切換到響應式交互全指南

在 Avalonia 開發中,導航功能是構建多頁面應用的核心需求。Avalonia 無需依賴第三方庫,僅通過內置控件與 MVVM 模式即可實現靈活的頁面切換。本文將以 “基礎導航” 為核心,從 ViewModel 與 View 設計、導航邏輯實現,到樣式美化與…

UniApp 分包異步化配置及組件引用解決方案

具體參考微信小程序文檔基礎能力 / 分包加載 / 分包異步化 一、分包頁面組件配置 在 UniApp 的pages.json中,為分包頁面(或主包如 tabbar 頁面)配置異步組件時,需同時設置usingComponents和componentPlaceholder: {&…

系統核心解析:深入操作系統內部機制——進程管理與控制指南(一)【進程/PCB】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

微論-神經網絡特征空間的動態聚集,對抗災難性遺忘的新范式

這是一個非常有趣且富有想象力的理論構想。受陀螺儀啟發,我將陀螺儀的“定軸性”與“進動性”原理引入神經網絡的特征空間,探討一種對抗災難性遺忘的新范式。---### **基于陀螺儀原理的神經網絡記憶鞏固理論探討**#### **引言:記憶的流失與穩…

鴻蒙審核問題——折疊屏展開態切換時,輸入框內容丟失

文章目錄背景解決歷程1、無意中發現了眉目2、確定問題原因3、解決辦法4、官方文檔5、總結背景 奇葩的事情年年有啊,今年特別多。這不今天又遇到了一個奇葩的問題。鴻蒙NextAPP上架AppGallery市場,審核拒了,說是折疊屏手機展開態切換時&#…

前后端分離架構中,Node.js的底層實現原理與線程池饑餓問題解析

在VueJava/.NET的前后端分離架構中,Node.js的底層實現原理與線程池饑餓問題解析 一、架構概述:Node.js的定位與角色 在現代Web開發中,Vue.js作為前端框架與Java/.NET后端結合的架構非常流行。在這種架構中,Node.js通常扮演著兩個關…

Django ModelForm:快速構建數據庫表單

Django 中的 forms.ModelForm —— 它是 Django 表單系統和 ORM 的一個“橋梁”,能幫助你快速基于 數據庫模型(Model) 自動生成表單,極大減少重復代碼。1. 什么是 ModelForm 普通 Form (forms.Form):完全手寫字段&…

補 json的作用

:“我開車直接擰鑰匙就能走,為什么還要看儀表盤和用中控臺?”直接點擊“運行”,就像是汽車的自動駕駛模式。它能幫你開起來,但你不知道它走的是哪條路,油門踩多深。使用 launch.json 配置,就像是…

apache詳細講解(apache介紹+apache配置實驗+apache實現https網站)

1.apache HTTP server介紹httpd項目地址:https://httpd.apache.org/ 在Apache2中有三種工作模式,使用者可以根據不同的業務場景來進行選擇(1)prefork模式prefork模式是一種老而穩的模式:一個主進程管理者多個子進程,每個子進程單獨處理用戶請求&#xf…

jajajajajajajava

線程1 線程概念進程:進程指正在內存中運行的程序。進程具有一定的獨立性。線程:線程是進程中的一個執行單元。負責當前進程中程序的執行。一個進程中至少有一個線程。如果一個進程中有多個線程,稱之為多線程程序。java中的線程采用的是搶占式調度,如果線…