容器技術技術入門與Docker環境部署

目錄

一:Docker 概述

1:什么是Docker

2:Docker 的優勢

3:Docker的應用場景

4:Docker核心概念

二:Docker 安裝

三:Docker 鏡像操作

1:獲取鏡像

2:查看鏡像信息

3:查看鏡像的詳細信息

4:修改鏡像標簽(老名字+新名字)

5:刪除鏡像

6:存出鏡像和載入鏡像

四:Docker 容器操作


一:Docker 概述

? ? ? ? ?因為 Docker 輕便、快速的特性,可以使應用達到快速迭代的目的。每次小的變更,馬上就可以看到效果,而不用將若干個小變更積攢到一定程度再變更。每次變更一小部分其實是一種非常安全的方式,在開發環境中能夠快速提高工作效率。
? ? ? ? ?Docker 容器能夠幫助開發人員、系統管理員、質量管理和版本控制工程師在一個生產環節中一起協同工作。制定一套容器標準能夠使系統管理員更改容器的時候,程序員不需要關心容器的變化,而更專注自己的應用程序代碼。從而隔離開了開發和管理,簡化了開發和部署的成本。

1:什么是Docker

類別描述
定義Docker是一種輕量級的容器技術,用于打包應用程序及其依賴項,實現應用的隔離和可移植性。
核心功能創建輕量級、可移植、自給自足的容器,簡化部署和調試工作。
技術原理共享宿主機操作系統內核,但容器間擁有獨立的文件系統、進程空間和網絡接口。
與傳統虛擬化對比傳統虛擬化需模擬完整操作系統(如VM),而容器僅虛擬化用戶空間,更輕量高效。
優勢1. 高效利用資源
2. 快速啟動和部署
3. 環境一致性(開發、測試、生產)
4. 易于擴展和維護
應用場景1. 微服務架構
2. 持續集成/持續部署(CI/CD)
3. 云原生應用開發
4. 多租戶環境隔離
容器特點像一個獨立“盒子”,包含應用所需的代碼、運行時、工具和庫,與其他容器隔離運行。

2:Docker 的優勢

? ? ? ? Docker 容器運行速度很快,啟動和停止可以在秒級實現,比傳統虛擬機要快很多;Docker 核心解決的問題是利用容器來實現類似虛擬機的功能,從而利用更加節省的硬件資源提供給用戶更多的計算資源。因此,Docker 容器除了運行其中的應用之外,基本不消耗額外的系統資源,在保證應用性能的同時,又減小了系統開銷,使得一臺主機上同時運行數千個 Docker 容器成為可能。
? ? ? ? 傳統虛擬化技術(如 Vware、VirtualBox 等)是通過虛擬機管理程序(Hypervisor)在物理服務器上創建多個虛擬機(VM),每個虛擬機都包含完整的操作系統。而容器技術是在操作系統層面進行虛擬化,多個容器共享宿主機的操作系統內核。
? ? ? ? 容器技術和傳統虛擬化的主要區別在于:

對比維度容器技術傳統虛擬化
資源占用共享宿主機內核,僅包含應用及依賴項,資源占用少,啟動速度快(秒級)。每個虛擬機需獨立運行完整操作系統,資源占用高(CPU、內存、存儲),啟動較慢(分鐘級)。
隔離性進程級隔離,依賴宿主機內核,隔離性較弱(但可通過配置增強)。硬件級隔離,每個虛擬機有獨立OS,安全性更高。
性能直接調用宿主機內核,性能損耗極低,接近原生應用。需通過虛擬化層(Hypervisor)訪問硬件,存在額外性能開銷。
適用場景高密度微服務、CI/CD、快速擴展、云原生應用。需要強隔離的多租戶環境、異構OS運行(如Windows與Linux共存)。
代表技術Docker、Kubernetes、LXC。VMware、Hyper-V、KVM。

? ? ? ?Docker 操作方便,可以通過 Dockerfile 配置文件支持靈活的自動化創建和部署。表1將 Docker容器技術與傳統虛擬機的特性進行了比較。

特性Docker 容器虛擬機
啟動速度秒級(快速啟動,適合動態伸縮)分鐘級(需啟動完整操作系統)
計算能力損耗幾乎無(直接調用宿主機內核)約 50%(需通過虛擬化層訪問硬件)
性能接近原生(低延遲,高吞吐)較弱(受虛擬化開銷影響)
單機系統支持量上千個(輕量級,共享內核)幾十個(資源占用高)
隔離性進程級隔離(通過命名空間/Cgroups限制資源,隔離性較弱但可配置增強)完全隔離(獨立OS,硬件級安全)
資源占用極低(僅包含應用及依賴項)高(需分配獨立OS、虛擬硬件)
適用場景微服務、CI/CD、云原生應用、高密度部署強隔離需求(如多租戶、異構OS)、傳統應用遷移
代表技術Docker, Kubernetes, PodmanVMware, Hyper-V, KVM

容器技術的優勢主要體現在以下幾個方面:

優勢具體表現與傳統虛擬化對比應用場景示例
隔離性進程級隔離,故障容器不影響其他容器(通過命名空間/Cgroups實現)。弱于虛擬機的硬件級隔離,但已滿足多數應用需求。多租戶SaaS服務、微服務架構
可移植性一次打包,隨處運行(依賴統一鏡像格式),避免環境差異問題。虛擬機需攜帶完整OS鏡像,體積大且環境適配復雜。跨云平臺部署、開發-生產環境一致性保障
資源高效利用共享宿主機內核,無冗余OS開銷,單機可運行上千容器。虛擬機需為每個實例分配獨立OS資源,利用率低(單機通常僅幾十個實例)。高密度計算、邊緣計算資源優化
快速部署擴展秒級啟動,支持快速水平擴展和自動伸縮(如K8s HPA)。虛擬機啟動需分鐘級,擴展速度慢。突發流量應對、CI/CD流水線加速
版本控制鏡像分層存儲,支持版本回滾和增量更新(通過Dockerfile管理)。虛擬機快照體積大,回滾效率低。藍綠部署、熱修復
生態工具鏈豐富的編排工具(K8s/Swarm)、監控(Prometheus)、日志(ELK)等開源解決方案。虛擬機管理工具(如vCenter)多為商業軟件,生態封閉。DevOps全流程自動化

? ? ? ? Docker之所以擁有眾多優勢,與操作系統虛擬化自身的特點是分不開的。傳統虛擬機需要有額外的虛擬機管理程序和虛擬機操作系統層,而 Docker 容器則是直接在操作系統層面之上實現的虛擬化。圖 2是 Docker 與傳統虛擬機架構。

3:Docker的應用場景

應用場景技術優勢實現方式典型案例
開發環境管理環境一致性(避免“在我機器上能跑”問題),依賴隔離。使用?Dockerfile?定義環境,通過鏡像共享給團隊。新成員快速搭建開發環境,跨OS團隊協作。
CI/CD 流水線快速構建、測試隔離、版本固化。在 Jenkins/GitLab CI 中集成 Docker,構建鏡像并推送至倉庫。自動化測試、一鍵回滾。
微服務架構獨立部署、資源隔離、彈性伸縮。每個微服務打包為容器,通過 Kubernetes 編排。電商系統、支付服務解耦。
云計算資源高效利用、秒級部署、多云兼容。云廠商提供容器服務(如 AWS ECS、阿里云 ACK)。突發流量自動擴容,混合云部署。
邊緣計算輕量級、低資源占用,適應異構設備。在邊緣節點部署容器化應用(如 IoT 數據處理)。工廠設備實時監控,CDN 節點優化。
數據科學環境復現、依賴管理。JupyterLab 或 ML 模型打包為容器,共享數據集和訓練環境。AI 團隊協作訓練模型。
遺留應用現代化無需重構代碼即可遷移至云環境。將傳統應用(如 Java WAR 包)容器化,逐步拆分微服務。銀行系統上云改造。

4:Docker核心概念

核心概念定義特點操作示例類比說明
鏡像只讀模板,包含運行容器所需的文件系統結構和依賴項。- 分層存儲(Union FS)
- 可復用、版本控制
- 靜態不可變
- 構建鏡像:docker build -t my-image .
- 拉取鏡像:docker pull nginx
類似虛擬機的“安裝光盤”或“快照”。
容器鏡像的運行實例,包含獨立的進程空間、網絡和文件系統。- 輕量級(秒級啟停)
- 隔離性(命名空間/Cgroups)
- 動態可讀寫
- 啟動容器:docker run -d --name my-container nginx
- 進入容器:docker exec -it my-container bash
類似“正在運行的虛擬機實例”。
倉庫集中存儲和分發鏡像的服務,分為公有倉庫(Docker Hub)和私有倉庫(自建)。- 支持多標簽(tag)
- 權限控制(私有倉庫)
- 鏡像版本管理
- 推送鏡像:docker push my-repo/my-image:tag
- 搜索鏡像:docker search mysql
類似“應用商店”或“代碼倉庫(Git)”。

二:Docker 安裝

? ? Docker 支持在主流的操作系統平臺上進行使用,包括 Windows 系統、Linux 系統、以及 Macos 系統等。目前最新的 RHEL、Cent 0s 以及 Ubuntu 系統官方軟件源中都已經默認自帶了 Docker 包,可直接安裝使用,也可以用 Docker 自己的 YUM 源進行配置。

? ? Centos 系統下安裝 Docker 可以有兩種方式:一種是使用CURL 獲得 Docker 的安裝腳本進行安裝,另一種是使用 YUM 倉庫來安裝 Docker。注意:目前 Docker 只能支持 64 位系統。

本安裝方式使用阿里的軟件倉庫
?

# 步驟 1: 添加軟件源信息
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# 步驟 2: 安裝必要的系統工具
yum install -y yum-utils# 步驟 3: 安裝 Docker-CE
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean all
yum makecache
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 步驟4:添加國內鏡像站
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee-tech","https://docker.hlmirror.com"]
}
EOF# 步驟5:開啟Docker服務
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker version# 步驟6:優化內核參數
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOFsysctl -p

三:Docker 鏡像操作

? ? 運行 Docker 容器前需要本地存在對應的鏡像。如果不存在本地鏡像,Docker 就會嘗試從默認鏡像倉庫下載。鏡像倉庫是由 Docker 官方維護的一個公共倉庫,可以滿足用戶的絕大部分需求。用戶也可以通過配置來使用自定義的鏡像倉庫。

1:獲取鏡像

[root@localhost ~]# docker pull nginx

? ? ? ? docker pull 是 Docker 里的一個關鍵命令,其主要功能是從 Docker 鏡像倉庫(默認是 DockerHub)中拉取鏡像到本地 Docker 主機

命令語法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

參數說明:

OPTIONS(可選參數)

-a,--all-tags:拉取指定倉庫中的所有標簽的鏡像。
--disable-content-trust:默認值為 true,該選項用于禁用鏡像內容驗證,也就是不驗證鏡像的簽名。
NAME[ :TAG|@DIGEST]

NAME:這是要拉取的鏡像的名稱,它可以包含倉庫地址和命名空間信息。例如,在 DockerHub 上的鏡像,如果是官方鏡像,通常直接寫鏡像名,如nginx;如果是用戶或組織的鏡像,則格式為 用戶名/鏡像名,像 dockerlibrary/redis。
TAG(可選):指定要拉取的鏡像的具體標簽,用于區分同一鏡像的不同版本。若不指定標簽,默認會拉取 latest 標簽的鏡像。
DIGEST(可選):通過鏡像的摘要信息來精確指定要拉取的鏡像版本,這能確保拉取的是特定哈希值對應的精確鏡像,避免因標簽可能指向不同版本而產生混淆。格式如nginx@sha256:abcdef123456...
? ? 對于 Docker 鏡像來說,如果下載鏡像時不指定標簽,則默認會下載倉庫中最新版本的鏡像,即選擇標簽為 latest 標簽,也可通過指定的標簽來下載特定版本的某一鏡像。這里標簽(tag)就是用來區分鏡像版本的。

? ? 從整個下載的過程可以看出,鏡像文件是由若干層(Layer)組成,稱之為AUFS(聯合文件系統),是實現增量保存與更新的基礎,下載過程中會輸出鏡像的各層信息。鏡像下載到本地之后就可以隨時使用該鏡像了。 用戶也可以選擇從其他注冊服務器倉庫下載,這時需要在倉庫名稱前指定完整的倉庫注冊服務器地址。

2:查看鏡像信息
?

[root@localhost ~]# docker images

? ? ? ? ? docker images 是 Docker 中一個基礎且常用的命令,主要用于列出本地 Docker 主機上的鏡像信息。docker images 命令會列出本地 Docker 主機上所有可用的鏡像,展示鏡像的基本信息,幫助用戶了解本地鏡像的存儲情況,包括鏡像的倉庫名、標簽、鏡像 ID、創建時間和大小等。

? ? 從顯示的情況可以讀出以下信息:

REPOSITORY:鏡像屬于的倉庫:
TAG:鏡像的標簽信息,標記同一個倉庫中的不同鏡像;
IMAGE ID:鏡像的唯- ID 號,唯一標識一個鏡像;
CREATED:鏡像創建時間:
VIRTUAL SIZE:鏡像大小;
命令語法:docker images [OPTIONS] [REPOSITORY[:TAG]]

參數說明:

OPTIONS(可選參數)

-a, --all:顯示所有鏡像(包括中間層鏡像)。默認情況下,docker images 只顯示頂層鏡像。
digests:顯示鏡像的摘要信息。
-f,--filter filter:根據指定的條件過濾輸出結果。過濾條件可以是多種類型,例如 dangling=true表示只顯示虛懸鏡像(沒有標簽的鏡像)。
--format string:使用 Go 模板語法自定義輸出格式。
--no-trunc:不截斷輸出信息,完整顯示鏡像 ID 等較長的字段。
-9,--quiet:只顯示鏡像的 ID。
REPOSITORY [:TAG](可選)

REPOSITORY:指定要顯示的鏡像倉庫名稱。
TAG:指定要顯示的鏡像標簽。如果不指定標簽,默認顯示所有標簽的鏡像。

3:查看鏡像的詳細信息

[root@localhost ~]# docker inspect c15

? ? ? ?docker inspect 是 Docker 中一個非常實用的命令,它用于返回 Docker 對象(如容器、鏡像、網絡、卷等)的底層詳細信息,這些信息以 JSON 格式展示,方便用戶深入了解 Docker 對象的配置和狀態。
命令語法:docker inspect[OPTIONS]NAME|ID [NAME|ID...]參數說明:
OPTIONS:可選參數,用于指定輸出格式或過濾特定信息,常見的選項有:
? --format,-f:指定輸出格式,使用 Go 模板語法。
? --size,-s:在輸出中顯示容器的文件系統大小(僅適用于容器)
NAME|ID:要檢查的 Docker 對象的名稱或 ID,可以指定多個對象。可檢查的 Docker 對象
docker inspect 可以檢査多種 Docker 對象,常見的包括:
容器(Container):獲取容器的詳細信息,如運行狀態、網絡配置、掛載點等。
鏡像(Image):查看鏡像的構建歷史、層信息、環境變量等。
網絡(Network):了解網絡的配置,如驅動類型、子網信息等。
卷(Volume):獲取卷的詳細信息,如掛載路徑、驅動類型等。

4:修改鏡像標簽(老名字+新名字)

[root@localhost ~]# docker tag nginx nginx:v1
[root@localhost ~]# docker images

? ? ? ? ?在 Docker 中,docker tag 命令用于為現有的 Docker 鏡像添加一個新的標簽(tag)。標簽本質上是鏡像的一個別名,它可以讓你更方便地引用和管理鏡像,同時也有助于區分不同版本或用途的鏡像。

命令語法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

參數說明:

SOURCE_IMAGE[:TAG]:指定源鏡像的名稱和標簽。SOURCE IMAGE 是源鏡像的名稱,「:TAG] 是可選的標簽,如果不指定標簽,默認使用 latest。
TARGET_IMAGE[:TAG]:指定目標鏡像的名稱和標簽。這是你要為源鏡像添加的新標簽。同樣,TARGET_IMAGE 是目標鏡像的名稱,[:TAG]是可選的標簽,如果不指定標簽,默認使用 latest。
? ? ? ?docker tag 命令并不會創建一個新的鏡像,它只是為現有的鏡像添加一個額外的標簽。多個標簽可以指向同一個鏡像,這些標簽只是鏡像的不同引用方式。

5:刪除鏡像

# 用鏡像名刪除
[root@localhost ~]# docker rmi nginx:v1# 用鏡像ID刪除 
[root@localhost ~]# docker rmi c15

命令語法:docker rmi [OPTIONS] IMAGE [IMAGE...]

參數說明:

OPTIONS(可選參數)

-f,--force:強制刪除鏡像。即使有容器正在使用該鏡像,也會嘗試刪除,但不建議輕易使用,因為可能導致容器無法正常運行。
--no-prune:默認情況下,刪除鏡像時會同時刪除該鏡像相關的未使用的父鏡像層(虛懸鏡像),使用該選項可以禁止刪除這些父鏡像層。
IMAGE

指定要刪除的鏡像,可以是鏡像的名稱、標簽、鏡像 ID,也可以同時指定多個鏡像。例如:nginx:latest、123456789abc 等。
注意事項:

? ? ?在刪除鏡像之前,要確保沒有正在運行或已停止的容器依賴該鏡像。可以使用 docker ps -a命令査看所有容器,使用 docker stop 和 docker rm 命令停止并刪除依賴該鏡像的容器后,再刪除鏡像。
? ? ? 鏡像的刪除是不可逆的操作,刪除后無法恢復,所以在執行刪除操作前要謹慎確認。
? ? ?當刪除一個有多個標簽的鏡像時,刪除一個標簽只是移除該標簽的引用,只有當所有標簽都被刪除后,鏡像才會真正從磁盤上刪除。

6:存出鏡像和載入鏡像

# (1) 導出鏡像
[root@localhost ~]# docker save -o nginx.tar nginx:latest# (2) 刪除鏡像 
[root@localhost ~]# docker rmi nginx:latest# (3) 導入鏡像
[root@localhost ~]# docker load < nginx.tar

注意事項:

文件大小:保存的鏡像文件可能會非常大,尤其是包含多個大型鏡像時。在保存和傳輸這些文件時,要確保有足夠的磁盤空間和網絡帶寬。
鏡像版本:保存的鏡像文件中包含的是特定版本(標簽)的鏡像。在恢復鏡像時,要確保使用正確的標簽和版本。
跨平臺兼容性:雖然 Docker 鏡像是設計為跨平臺的,但在不同的操作系統上保存和加載鏡像時,可能會遇到一些兼容性問題。盡量在相同或兼容的操作系統版本之間傳輸和使用鏡像。
鏡像依賴:如果保存的鏡像依賴于其他基礎鏡像,確保在目標環境中也有這些基礎鏡像,或者將它們一起保存和傳輸。

四:Docker 容器操作

? ? 容器是 Docker 的另一個核心概念。簡單說,容器是鏡像的一個運行實例,是獨立運行的一個或一組應用以及它們所必需的運行環境,包括文件系統、系統類庫、she11 環境等。鏡像是只讀模板,而容器會給這個只讀模板添加一個額外的可寫層。

容器的創建與啟動

操作類型命令語法核心功能關鍵參數示例適用場景
創建容器docker create [OPTIONS] IMAGE從鏡像創建容器(不自動啟動)-it(交互式終端)
-p 宿主機端口:容器端口
-v 宿主機目錄:容器目錄
--name 容器名
docker create -it --name mycentos -p 80:80 centos:7預配置容器后再啟動
查看容器docker ps [OPTIONS]列出容器狀態-a(顯示所有容器)
-q(僅顯示ID)
-f "name=xxx"(過濾)
docker ps -a | grep nginx監控容器運行狀態
啟動容器docker start [OPTIONS] CONTAINER啟動已存在的容器-a(附加輸出流)
-i(保持交互)
docker start -ai mycentos重新啟動已停止的容器
創建并啟動容器docker run [OPTIONS] IMAGE [COMMAND]創建并立即啟動容器(鏡像不存在時自動拉取)-d(后臺運行)
--rm(退出后自動刪除)
-e 環境變量
--network 網絡
docker run -d --name web -p 8080:80 -e "ENV=prod" nginx快速部署服務
后臺持續運行docker run -d IMAGE [COMMAND]啟動守護式容器(需容器內有常駐進程)--cpus 2(限制CPU核心)
-m 512m(限制內存)
--restart=always(自動重啟)
docker run -d --cpus=1 -m 1g --restart=always redis部署數據庫、消息隊列等持久化服務
停止容器docker stop [OPTIONS] CONTAINER優雅停止容器(發送SIGTERM信號)-t(超時時間,默認10秒)docker stop -t 5 mynginx安全關閉服務
強制停止容器docker kill [OPTIONS] CONTAINER強制終止容器(發送SIGKILL信號)-s(指定信號,如SIGKILLdocker kill mynginx容器無響應時強制終止
刪除容器docker rm [OPTIONS] CONTAINER刪除已停止的容器-f(強制刪除運行中的容器)
-v(同時刪除關聯卷)
docker rm -fv old_container清理無用容器釋放資源
場景推薦命令原因及關鍵參數擴展用法
調試容器docker run -it IMAGE /bin/bash-it:分配交互式終端,直接進入容器內部調試。
/bin/bash:指定啟動Shell。
1. 快速排查配置問題:docker run -it --rm alpine sh
2. 檢查環境變量:docker run -it python env
批量預配置容器docker create?+?docker start1.?create:預先配置網絡、卷等參數。
2.?start:按需啟動,適合批量管理。
結合腳本批量操作:
for i in {1..5}; do docker create --name node-$i nginx; done
運行服務類容器docker run -d IMAGE-d:后臺守護進程模式。
自動拉取鏡像(若本地不存在)。
1. Web服務:docker run -d -p 80:80 --name web nginx
2. 數據庫:docker run -d -e MYSQL_ROOT_PASSWORD=123 mysql
臨時測試容器docker run --rm IMAGE--rm:容器退出后自動刪除,避免殘留臨時容器。單次命令執行:
docker run --rm busybox echo "Hello World"
資源受限環境docker run -d --cpus=1 -m 512m--cpus:限制CPU核心數。
-m:限制內存,防止資源耗盡。
云原生部署:
docker run -d --cpus=0.5 -m 256m --name limit-app my-app
容器網絡配置docker run --network=host/bridge--network:指定網絡模式。
-?host:共享宿主機網絡棧。
-?bridge:默認隔離網絡。
高性能場景:docker run -d --network=host redis
數據持久化docker run -v /host/path:/container-v:掛載宿主機目錄到容器,數據持久化。數據庫數據存儲:
docker run -d -v /data/mysql:/var/lib/mysql mysql
操作類型命令語法核心功能關鍵參數注意事項典型場景
優雅停止容器docker stop [-t N] CONTAINER發送SIGTERM信號,允許容器完成清理后退出-t:超時時間(秒,默認10秒)1. 需確保容器內進程能處理SIGTERM
2. 有依賴關系的容器需按順序停止
安全關閉數據庫、微服務等
強制終止容器docker kill [-s SIGNAL] CONTAINER立即發送SIGKILL信號強制終止-s:指定信號(如SIGKILL/SIGTERM)1. 可能導致數據損壞
2. 僅用于無響應容器
容器死鎖或僵尸進程處理
進入容器docker exec -it CONTAINER COMMAND在運行中容器內執行交互式命令-it:交互式終端
-u user:指定用戶
-w /path:設置工作目錄
1. 容器必須處于運行狀態
2. 注意用戶權限(如root操作需謹慎)
調試、日志查看或配置修改
導出容器快照docker export CONTAINER > file.tar將容器文件系統導出為tar包(不含元數據)1. 與docker save區別:不保留鏡像層歷史
2. 導出前建議先停止容器
遷移容器狀態或備份
導入為鏡像docker import file.tar IMAGE:TAG從tar文件創建新鏡像(扁平化無歷史層)-c:添加Dockerfile指令(如CMD生成的鏡像無構建歷史,體積可能較大快速構建定制化基礎鏡像
刪除容器docker rm [-fv] CONTAINER刪除已停止的容器及關聯資源-f:強制刪除運行中容器
-v:同時刪除匿名卷
1. 數據卷刪除不可逆
2. 重要數據需提前備份
清理無用容器釋放資源
批量清理docker container prune一鍵刪除所有已停止的容器配合-f跳過確認提示定期維護

場景推薦命令優勢與原理擴展用法
正常停止服務docker stop -t 20 CONTAINER-?優勢:發送SIGTERM信號,允許應用優雅關閉(如保存數據、釋放連接)
-?參數-t 20?延長等待時間至20秒
1. 數據庫容器:docker stop -t 30 mysql
2. 微服務:docker stop -t 15 order-service
容器無響應時docker kill CONTAINER-?優勢:立即發送SIGKILL信號強制終止,快速釋放資源
-?注意:可能導致數據丟失,慎用
1. 指定信號:docker kill -s SIGKILL hung_container
2. 批量終止:docker kill $(docker ps -q)
調試運行中容器docker exec -it CONTAINER bash-?優勢:無需重啟容器,直接進入交互式終端調試
-?注意:容器需已運行且包含bash/sh
1. 指定用戶:docker exec -u root -it nginx bash
2. 執行單命令:docker exec redis redis-cli ping
臨時診斷網絡問題docker run --rm -it busybox ping-?優勢:使用輕量鏡像快速測試網絡,--rm自動清理
-?場景:檢查容器間通信或外網連通性
docker run --rm -it alpine ping 8.8.8.8
查看實時日志docker logs -f CONTAINER-?優勢:動態跟蹤日志輸出(類似tail -f
-?參數--since 10m?查看最近10分鐘日志
docker logs -f --tail 100 web_app
資源監控docker stats CONTAINER-?優勢:實時顯示CPU/內存/網絡等資源占用
-?擴展docker top CONTAINER查看進程列表
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
配置檢查docker inspect CONTAINER-?優勢:獲取容器詳細配置(網絡/IP/卷等)
-?技巧:結合jq解析JSON輸出
docker inspect web | jq .[0].NetworkSettings.IPAddress

數據持久化建議

  • 重要數據應通過-v掛載數據卷
  • 刪除容器時避免使用-v參數,除非確認數據可丟棄
# 停止所有運行中的容器
docker stop $(docker ps -q)# 刪除所有已停止容器
docker rm $(docker ps -aq)# 導出所有容器
for id in $(docker ps -aq); do docker export $id > $id.tar; done

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

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

相關文章

構建高效分布式系統:bRPC組合Channels與HTTP/H2訪問指南

構建高效分布式系統&#xff1a;bRPC組合Channels與HTTP/H2訪問指南 引言 在現代分布式系統中&#xff0c;下游服務訪問的復雜性日益增加。bRPC通過組合Channels和HTTP/H2訪問優化&#xff0c;提供了解決多層級RPC調用、負載均衡和協議兼容性問題的完整方案。本文將深入解析兩大…

WSL創建Ubuntu子系統與 VS code 開發

文章目錄一、打開Windows的虛擬化基礎功能二、安裝WSL和Ubuntu1. 安裝 WSL2. 安裝 Ubuntu三、 VScode一、打開Windows的虛擬化基礎功能 控制面板-程序和功能-啟動或關閉Windows功能&#xff0c;勾選適用于Linux的Windows子系統、虛擬機平臺&#xff0c; 完成后根據提示重啟電腦…

AlpineLinux二進制文件部署prometheus

在Alpine Linux上通過二進制文件部署Prometheus的步驟如下: 創建用戶和組: groupadd prometheus useradd -g prometheus -m -s /sbin/nologin prometheus下載Prometheus二進制文件: 你可以從Prometheus的官方GitHub發布頁面下載最新的二進制文件。例如,使用wget命令: wget…

IoT 小程序:如何破解設備互聯的碎片化困局?

一、IoT 設備管理為何需要輕量化解決方案&#xff1f;隨著物聯網設備規模爆發式增長 —— 預計 2025 年全球連接數將達 270 億臺&#xff0c;傳統 Native 應用開發模式的弊端日益凸顯&#xff1a;某智能家居廠商開發 3 款主流設備 APP&#xff0c;需維護 iOS/Android/ 小程序 3…

Word 怎么讓字變大、變粗、換顏色?

這是Word中最常用也最基礎的操作之一。學會它&#xff0c;你的文檔就會立刻變得重點突出&#xff0c;清晰易讀。 記住一個核心前提&#xff1a;無論做什么格式修改&#xff0c;第一步永遠是【先選中你要修改的文字】。 你可以把鼠標放在文字的開頭&#xff0c;按住左鍵&#xf…

Ruby 安裝 - Linux

Ruby 安裝 - Linux 引言 Ruby 是一種廣泛使用的高級編程語言,以其簡潔、優雅和強大的功能而聞名。在 Linux 系統上安裝 Ruby 是許多開發者的首要任務。本文將詳細介紹如何在 Linux 系統上安裝 Ruby,包括準備工作、安裝過程和常見問題解決。 準備工作 在開始安裝 Ruby 之前…

數組的應用示例

任意輸入【0,9】范圍內的整數&#xff0c;統計輸入的每一種數字的個數并輸出&#xff0c;輸入-1結束程序 #include <stdio.h> int main(){const int number 10;int x;int i;int count[number];for ( i 0; i < number; i){count[i] 0;}printf("請輸入0&#xf…

鴻蒙智行6月交付新車52747輛 單日交付量3651輛

近日&#xff0c;鴻蒙智行公布最新銷量數據&#xff0c;6月單月全系交付52747輛&#xff0c;單日交付量3651輛&#xff0c;分別刷新鴻蒙智行單月、單日銷量歷史新高。僅用39個月實現全系累計交付80萬輛&#xff0c;創下新勢力汽車最快交付紀錄。 尊界S800自5月30日上市以來&…

基于模糊控制及BP神經網絡開關磁阻電機的matlab仿真

1.模型簡介本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2015Rb&#xff09;軟件。2.仿真算法:1&#xff09;采用轉速、轉矩雙閉環控制算法&#xff1b;2&#xff09;外環是速度環&#xff0c;采用改進復合模糊控制&#xff0c;實現速度跟蹤&#xff1b;3&#xff09;…

最新團購源碼商城 虛擬商城系統源碼 全開源

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 最新團購源碼商城 虛擬商城系統源碼 全開源 基于PHP開發的多功能在線商城系統&#xff0c;適合個人、小型企業或創業團隊快速搭建自己的商品銷售平臺。系統界面美觀&#xff0c;功能豐富…

Visual Studio 舊版軟件下載教程

一、前言最近在開發過程中編譯使用Cuda的版本較低&#xff0c;導致與最新的Visual Studio Community 2022 17.14.8不兼容。編譯報錯如下&#xff1a;[cmake] C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\yvals_core.h(902): e…

樂橙亮相2025廣州建博會:用AI重新定義家庭安全與技術邊界

在智能鎖邁入AI新時代的關鍵節點&#xff0c;誰才是真正的技術引領者&#xff1f;2025年廣州建博會&#xff0c;樂橙用一場“不炫技、重本質”的深度展演給出了答案。智哪兒在現場了解到&#xff0c;在A區3.1-28展位&#xff0c;樂橙圍繞“智啟新境 All in Intelligent”這一主…

快速搭建服務器,fetch請求從服務器獲取數據

1.strapi首先strapi是一個api管理系統&#xff0c;可以讓我們直接用網頁的形式去定義自己的api&#xff0c;包括設置模型和權限等功能。首先直接在項目目錄里面安裝庫。npx create-strapilatest server --quickstart這樣就可以直接在項目目錄創建一個連接數據庫的服務器了。不用…

UGF開發記錄_3_使用Python一鍵轉換Excle表格為Txt文本

使用UnityGameFramework日常記錄_3_配一鍵轉換配置表 該系列只做記錄 不做教程 所以文章簡潔直接 會列出碰到的問題和解決方案 只適合UGF萌新 為了提高效率&#xff0c;我使用Python編寫了一個腳本&#xff0c;實現了一鍵將Excel表格批量轉換為帶分隔符的Txt文件&#xff0c…

leetcode 3440. 重新安排會議得到最多空余時間 II 中等

給你一個整數 eventTime 表示一個活動的總時長&#xff0c;這個活動開始于 t 0 &#xff0c;結束于 t eventTime 。同時給你兩個長度為 n 的整數數組 startTime 和 endTime 。它們表示這次活動中 n 個時間 沒有重疊 的會議&#xff0c;其中第 i 個會議的時間為 [startTime[i]…

大型語言模型(LLM)的最新研究進展及相關新信息技術

大型語言模型(LLM)的最新研究進展及相關新信息技術 一、Google的Gemini 2.0系列 1. Gemini 2.0 Flash Thinking 核心技術:引入“推理時計算”(Inference-Time Computation)機制,支持模型在回答復雜問題前自主“思考”,顯著提升數學和代碼任務的準確性。多模態能力:支…

c++-友元函數和友元類

友元友元提供了一種突破封裝的方式&#xff0c;有時提供了便利。但是友元會增加耦合度&#xff0c;破壞了封裝&#xff0c;所以 友元不宜多用。 友元分為&#xff1a;友元函數和友元類友元函數問題現在嘗試去在Date類里重載operator<<。無論怎樣設置參數&#xff0c;只要…

alpinelinux的網絡配置

在 Alpine Linux 中配置網絡&#xff0c;您可以根據以下步驟進行&#xff1a; 配置本機 hostname&#xff1a; 本機hostname保存在/etc/hostname文件中。 echo alpine-web > /etc/hostname hostname -F /etc/hostname # 立即生效運行結果&#xff1a; localhost:~# echo &qu…

day1--項目搭建and內容管理模塊

1. 項目搭建1.1 創建父工程1.1.1 創建xuecheng-plus-project工程1.1.2 導入依賴<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

騰訊云錄音文件快速識別實戰教程

文章目錄前言接口簡介前置條件實戰添加 Maven 依賴核心代碼示例參數說明個人簡介前言 本文介紹如何基于騰訊云語音識別 快速識別接口&#xff0c;實現通過 HTTPS POST 方式上傳音頻并快速識別同步返回識別結果的實戰流程。 接口簡介 騰訊云語音識別 快速識別接口 支持上傳音…