最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker核心命令與實(shí)踐指南示例詳解

 更新時(shí)間:2025年06月17日 15:24:06   作者:weixin_52318532  
本文系統(tǒng)整理Docker的核心概念與常用命令,涵蓋鏡像管理、容器操作、數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)配置、Compose 編排以及 Dockerfile 構(gòu)建等內(nèi)容,感興趣的朋友跟隨小編一起看看吧

從零開始掌握 Docker:核心命令與實(shí)踐指南

摘要: 本文系統(tǒng)整理了 Docker 的核心概念與常用命令,涵蓋鏡像管理、容器操作、數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)配置、Compose 編排以及 Dockerfile 構(gòu)建等內(nèi)容。通過清晰的命令示例和實(shí)用說明,幫助開發(fā)者快速上手 Docker 容器化技術(shù),提升開發(fā)與部署效率。

關(guān)鍵詞: Docker, 容器化, 鏡像, 容器, Docker Compose, Dockerfile, 命令手冊(cè)

一、 Docker 鏡像管理

鏡像是 Docker 容器運(yùn)行的基礎(chǔ)模板。

1. 搜索鏡像

在 Docker Hub 或其他注冊(cè)中心查找鏡像。

docker search nginx

2. 拉取鏡像

下載鏡像到本地倉(cāng)庫(kù)。推薦指定標(biāo)簽(如 :latest:alpine)。

docker pull nginx          # 拉取最新版 (latest)
docker pull nginx:latest   # 顯式指定最新版
docker pull nginx:alpine   # 拉取 Alpine Linux 精簡(jiǎn)版

3. 查看本地鏡像

列出所有已下載的鏡像。

docker images
docker image ls  # 等效命令

4. 刪除鏡像

移除不再需要的本地鏡像。注意: 依賴該鏡像的容器必須先刪除或停止。

docker rmi nginx:latest    # 通過倉(cāng)庫(kù)名:標(biāo)簽刪除
docker rmi <鏡像ID>         # 通過唯一鏡像 ID 刪除 (更精確)

二、 Docker 容器操作

容器是鏡像的運(yùn)行實(shí)例。

1. 運(yùn)行容器

啟動(dòng)一個(gè)新的容器實(shí)例。

docker run nginx                      # 前臺(tái)運(yùn)行 (會(huì)占用終端)
docker run -d --name mynginx nginx    # 后臺(tái)運(yùn)行 (-d) 并命名容器 (--name)
docker run -d --name myweb -p 8080:80 nginx  # 后臺(tái)運(yùn)行,并將容器 80 端口映射到宿主機(jī) 8080 端口 (-p)
# 常用選項(xiàng):
#   -d: 后臺(tái)運(yùn)行 (detached mode)
#   --name: 為容器指定一個(gè)易記的名稱
#   -p <主機(jī)端口>:<容器端口>: 端口映射
#   -it: 交互模式運(yùn)行 (通常與 /bin/bash 結(jié)合進(jìn)入容器)
#   -e: 設(shè)置環(huán)境變量
#   --restart=always: 容器退出時(shí)自動(dòng)重啟

2. 查看容器狀態(tài)

docker ps          # 查看正在運(yùn)行的容器
docker ps -a       # 查看所有容器 (包括已停止的)
docker ps -aq      # 查看所有容器的 ID (只顯示 ID, 常用于批量操作)

3. 啟動(dòng)/停止/重啟容器

docker start <容器名稱|容器ID>    # 啟動(dòng)已停止的容器
docker stop <容器名稱|容器ID>     # 優(yōu)雅停止運(yùn)行中的容器 (發(fā)送 SIGTERM)
docker restart <容器名稱|容器ID>  # 重啟容器

4. 查看容器資源使用與日志

docker stats <容器名稱|容器ID>      # 實(shí)時(shí)查看容器的 CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤等資源使用情況
docker logs <容器名稱|容器ID>       # 查看容器日志 (默認(rèn)顯示已產(chǎn)生的日志)
docker logs -f <容器名稱|容器ID>    # 持續(xù)跟蹤 (follow) 容器日志輸出 (類似 tail -f)

5. 進(jìn)入運(yùn)行中的容器

在運(yùn)行的容器內(nèi)啟動(dòng)一個(gè)交互式 Shell(通常是 /bin/bash 或 /bin/sh)。

docker exec -it mynginx /bin/bash
# -i: 保持 STDIN 打開
# -t: 分配一個(gè)偽終端 (TTY)

6. 刪除容器

移除不再需要的容器。注意: 正在運(yùn)行的容器需要先停止或使用 -f 強(qiáng)制刪除。

docker rm <容器名稱|容器ID>        # 刪除已停止的容器
docker rm -f <容器名稱|容器ID>     # 強(qiáng)制刪除運(yùn)行中的容器
docker rm $(docker ps -aq)       # 批量刪除所有已停止的容器 (危險(xiǎn)操作!)

三、 構(gòu)建與分享自定義鏡像

1. 提交容器更改創(chuàng)建新鏡像

基于一個(gè)運(yùn)行中的容器的當(dāng)前狀態(tài)創(chuàng)建新的鏡像層。

docker commit -m "update index.html" mynginx mynginx:v1.0
# -m: 提交信息
# mynginx: 源容器名稱
# mynginx:v1.0: 新鏡像名稱:標(biāo)簽

2. 保存鏡像為文件

將鏡像導(dǎo)出為 .tar 文件,方便離線傳輸或備份。

docker save -o mynginx.tar mynginx:v1.0
# -o: 指定輸出文件名

3. 從文件加載鏡像

從 .tar 文件恢復(fù)鏡像到本地倉(cāng)庫(kù)。

docker load -i mynginx.tar
# -i: 指定輸入文件

4. 分享鏡像到 Docker Hub (或其他注冊(cè)中心)

登錄:

docker login  # 默認(rèn)登錄 Docker Hub, 提示輸入用戶名密碼

標(biāo)記鏡像: 為本地鏡像添加符合目標(biāo)倉(cāng)庫(kù)規(guī)范的名稱(通常是 <DockerHub用戶名>/<倉(cāng)庫(kù)名>:<標(biāo)簽>)。

docker tag mynginx:v1.0 <你的DockerHub用戶名>/mynginx:v1.0

推送鏡像:

docker push <你的DockerHub用戶名>/mynginx:v1.0

四、 Docker 數(shù)據(jù)管理 (存儲(chǔ)卷 Volumes)

Docker 使用存儲(chǔ)卷 (Volumes) 或綁定掛載 (Bind Mounts) 來持久化容器數(shù)據(jù),避免容器刪除后數(shù)據(jù)丟失。

1. 目錄掛載 (Bind Mounts)

將宿主機(jī)上的一個(gè)具體目錄直接掛載到容器內(nèi)指定路徑。文件存在于宿主機(jī)文件系統(tǒng)上。

docker run -d -p 80:80 -v /宿主機(jī)/絕對(duì)路徑/nginxhtml:/usr/share/nginx/html --name myapp nginx
# -v /宿主機(jī)路徑:/容器路徑
  • 優(yōu)點(diǎn): 直觀,方便在宿主機(jī)直接修改文件。
  • 缺點(diǎn): 依賴宿主機(jī)特定目錄結(jié)構(gòu),移植性稍差。

2. 卷掛載 (Volumes)

使用 Docker 管理的命名卷掛載到容器內(nèi)路徑。卷存儲(chǔ)在 Docker 管理的區(qū)域 (/var/lib/docker/volumes/),與容器生命周期解耦。

docker run -d -p 80:80 -v mynginxconf:/etc/nginx -v mynginxhtml:/usr/share/nginx/html --name myapp nginx
# -v 卷名:/容器路徑
  • 優(yōu)點(diǎn): 移植性好,由 Docker 管理生命周期,備份/恢復(fù)方便。
  • 缺點(diǎn): 數(shù)據(jù)位置不如綁定掛載直觀。

3. 卷管理命令

docker volume ls                 # 列出所有 Docker 管理的卷
docker volume create myvolume    # 創(chuàng)建一個(gè)新的命名卷
docker volume inspect myvolume   # 查看指定卷的詳細(xì)信息 (包括其物理存儲(chǔ)位置 Mountpoint)
docker volume rm myvolume        # 刪除一個(gè)不再使用的卷
# 注意:刪除容器時(shí),使用 -v 選項(xiàng)可以同時(shí)刪除關(guān)聯(lián)的匿名卷 (未命名的卷)。命名卷需要顯式刪除。

五、 Docker 網(wǎng)絡(luò)管理

Docker 容器默認(rèn)通過 docker0 虛擬網(wǎng)橋連接并相互隔離。

1. 查看容器網(wǎng)絡(luò)信息

docker container inspect <容器名稱|容器ID>  # 查看容器詳細(xì)信息,包括其 IP 地址、網(wǎng)關(guān)、網(wǎng)絡(luò)配置等

2. 默認(rèn)網(wǎng)絡(luò) (docker0) 的局限性

  • 容器 IP 地址在重啟或重新創(chuàng)建后可能變化。
  • 默認(rèn)網(wǎng)絡(luò)不支持通過容器名稱進(jìn)行服務(wù)發(fā)現(xiàn)(只能通過易變的 IP 地址訪問)。

3. 創(chuàng)建自定義網(wǎng)絡(luò)

自定義網(wǎng)絡(luò)解決了 docker0 的局限性:

  • 為容器提供穩(wěn)定的、可預(yù)測(cè)的 IP 地址段。
  • 支持通過容器名稱作為主機(jī)名進(jìn)行服務(wù)發(fā)現(xiàn)(容器間可以直接用名字通信)。
docker network create mynet      # 創(chuàng)建一個(gè)名為 mynet 的自定義橋接網(wǎng)絡(luò)
docker network ls               # 列出所有 Docker 網(wǎng)絡(luò)

4. 將容器連接到自定義網(wǎng)絡(luò)

docker run -d -p 8081:80 --name app1 --network mynet nginx
docker run -d -p 8082:80 --name app2 --network mynet nginx
  • 現(xiàn)在 app1 可以直接通過 ping app2 或 http://app2 訪問 app2 容器,反之亦然。
  • 使用 docker inspect app1 查看其網(wǎng)絡(luò)配置,確認(rèn)它連接到了 mynet 并獲取了 IP。

5. 刪除網(wǎng)絡(luò)

注意: 只能刪除沒有容器連接的網(wǎng)絡(luò)。

docker network rm mynet

六、 使用 Docker Compose 編排多容器應(yīng)用

Docker Compose 使用 YAML 文件 (docker-compose.yml 或 compose.yml) 定義和運(yùn)行多容器 Docker 應(yīng)用。

1. 上線應(yīng)用 (啟動(dòng)服務(wù))

在包含 compose.yaml 文件的目錄下運(yùn)行:

docker compose -f compose.yaml up -d
# -f: 指定 Compose 文件 (默認(rèn)為 compose.yml 或 docker-compose.yml 時(shí)可省略)
# -d: 后臺(tái)運(yùn)行 (detached)
# up: 創(chuàng)建并啟動(dòng)所有定義的服務(wù)、網(wǎng)絡(luò)、卷
  • Compose 只會(huì)重建或重啟配置發(fā)生變化的容器(智能更新)。

2. 下線應(yīng)用 (停止并清理)

docker compose -f compose.yaml down      # 停止并移除容器、網(wǎng)絡(luò) (默認(rèn)保留卷和鏡像)
docker compose -f compose.yaml down --rmi all -v  # 停止并移除容器、網(wǎng)絡(luò),同時(shí)刪除所有相關(guān)鏡像(--rmi all)和卷(-v)
# --rmi all: 刪除 Compose 文件中定義的服務(wù)所使用的所有鏡像
# -v: 刪除 Compose 文件中定義的匿名卷和 compose 創(chuàng)建時(shí)指定的命名卷 (謹(jǐn)慎使用!)

七、 使用 Dockerfile 構(gòu)建鏡像

Dockerfile 是一個(gè)文本文件,包含構(gòu)建 Docker 鏡像所需的一系列指令。

常用 Dockerfile 指令

指令說明示例
FROM指定基礎(chǔ)鏡像。 所有構(gòu)建都以此為基礎(chǔ)。FROM openjdk:11
LABEL添加元數(shù)據(jù) (鍵值對(duì))。 如作者、描述、版本等。LABEL maintainer="liuqi@example.com"
COPY復(fù)制文件/目錄。 從構(gòu)建上下文復(fù)制到鏡像內(nèi)。COPY ./app.jar /app/app.jar
ADD類似 COPY,但功能更多 (支持 URL、自動(dòng)解壓 tar)。通常優(yōu)先用 COPY。ADD https://example.com/file.tar.gz /
WORKDIR設(shè)置工作目錄。 后續(xù)指令 (RUNCMDENTRYPOINTCOPYADD) 都在此目錄下執(zhí)行。WORKDIR /app
RUN執(zhí)行命令。 在構(gòu)建過程中運(yùn)行命令并創(chuàng)建新的鏡像層。常用于安裝軟件包。RUN apt-get update && apt-get install -y curl
EXPOSE聲明運(yùn)行時(shí)容器監(jiān)聽的端口。 只是一個(gè)文檔說明,實(shí)際映射需用 -p。EXPOSE 8080
ENV設(shè)置環(huán)境變量。 在構(gòu)建階段和運(yùn)行階段都可用。ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk
CMD指定容器啟動(dòng)時(shí)的默認(rèn)命令。 可以被 docker run 的命令覆蓋。CMD ["java", "-jar", "/app.jar"]
ENTRYPOINT指定容器啟動(dòng)時(shí)的主命令。 CMD 的內(nèi)容通常作為其參數(shù)。更不易被覆蓋。ENTRYPOINT ["java", "-jar"] CMD ["/app.jar"]

示例 Dockerfile (構(gòu)建 Java 應(yīng)用鏡像)

# 使用 OpenJDK 11 官方鏡像作為基礎(chǔ)
FROM openjdk:11
# 添加維護(hù)者信息 (元數(shù)據(jù))
LABEL author="liuqi" version="1.0"
# 將構(gòu)建上下文中的 app.jar 復(fù)制到鏡像根目錄下
COPY app.jar /app.jar
# 聲明應(yīng)用運(yùn)行時(shí)監(jiān)聽的端口
EXPOSE 8081
# 設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令 (主進(jìn)程)
ENTRYPOINT ["java", "-jar", "/app.jar"]

構(gòu)建鏡像

在包含 Dockerfile 和 app.jar 的目錄下運(yùn)行:

docker build -t myjavaapp:v1.0 .
# -t: 指定構(gòu)建出的鏡像名稱和標(biāo)簽 (myjavaapp:v1.0)
# . : 指定構(gòu)建上下文路徑 (當(dāng)前目錄),Dockerfile 和 COPY 的文件都相對(duì)于此路徑

八、 Docker 鏡像分層存儲(chǔ)機(jī)制

Docker 鏡像采用分層存儲(chǔ) (Layer Storage) 機(jī)制,這是其高效性和輕量化的核心:

  • Union File System (聯(lián)合文件系統(tǒng)): 如 AUFS, Overlay2 等。這些文件系統(tǒng)允許將多個(gè)目錄(稱為“層”)掛載到同一個(gè)虛擬目錄下。對(duì)用戶呈現(xiàn)的是一個(gè)單一的文件系統(tǒng)視圖。
  • 只讀層 (Read-Only Layers):
    • 鏡像由一系列只讀層疊加組成。
    • 每一層代表 Dockerfile 中的一條指令(如 FROMRUNCOPYADD)所引入的文件系統(tǒng)變化。
    • 這些層是共享的。如果多個(gè)鏡像基于同一個(gè)基礎(chǔ)鏡像(如 ubuntu:latest),那么它們共享基礎(chǔ)鏡像的所有只讀層,節(jié)省磁盤空間。
  • 容器層 (Container Layer / Read-Write Layer):
    • 當(dāng)從鏡像啟動(dòng)一個(gè)容器時(shí),Docker 會(huì)在所有只讀層之上添加一個(gè)薄薄的讀寫層(通常稱為“容器層”或“可寫層”)。
    • 容器運(yùn)行時(shí)的所有文件寫入操作(創(chuàng)建、修改、刪除文件)都只發(fā)生在這個(gè)讀寫層中。
    • 容器刪除時(shí),這個(gè)讀寫層也會(huì)被丟棄(除非使用卷持久化數(shù)據(jù))。
  • 寫時(shí)復(fù)制 (Copy-on-Write - CoW):
    • 如果一個(gè)容器需要修改只讀層中的某個(gè)文件(例如修改配置文件),CoW 機(jī)制會(huì)觸發(fā):

      該文件會(huì)從底層的只讀層復(fù)制到容器的讀寫層。

      后續(xù)所有對(duì)該文件的修改都只發(fā)生在讀寫層的這個(gè)副本上

    • 底層的只讀文件保持不變。這保證了基礎(chǔ)鏡像的完整性和可共享性。
    • 只有首次修改時(shí)才復(fù)制,優(yōu)化了性能和存儲(chǔ)空間。

圖解:

+---------------------------------------------------+
|                  Container (myapp)                |
| +-----------------------------------------------+ |
| |             Read-Write Layer (R/W)            | | (容器層 - 存儲(chǔ)運(yùn)行時(shí)修改)
| +-----------------------------------------------+ |
| +-----------------------------------------------+ |
| |               Read-Only Layer (n)             | | (鏡像層 - 由 `RUN apt-get install` 添加)
| +-----------------------------------------------+ |
|                     ...                          |
| +-----------------------------------------------+ |
| |               Read-Only Layer (2)             | | (鏡像層 - 由 `COPY app.jar` 添加)
| +-----------------------------------------------+ |
| +-----------------------------------------------+ |
| |               Read-Only Layer (1)             | | (鏡像層 - 由 `FROM openjdk:11` 引入的基礎(chǔ)層)
| +-----------------------------------------------+ |
+---------------------------------------------------+
        (Union Mount Point - 呈現(xiàn)為單一文件系統(tǒng)視圖)

優(yōu)勢(shì):

  • 高效構(gòu)建: 構(gòu)建鏡像時(shí),如果某層及其之上的層沒有變化,Docker 會(huì)直接使用緩存中的層,極大加速構(gòu)建過程。
  • 節(jié)省空間: 多個(gè)鏡像和容器共享基礎(chǔ)層。
  • 快速啟動(dòng): 啟動(dòng)容器只需添加一個(gè)薄薄的讀寫層,無需復(fù)制整個(gè)文件系統(tǒng)。
  • 鏡像復(fù)用: 公共基礎(chǔ)層只需下載一次。

到此這篇關(guān)于Docker核心命令與實(shí)踐指南的文章就介紹到這了,更多相關(guān)docker命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker將鏡像打包為.tar包實(shí)現(xiàn)方法

    docker將鏡像打包為.tar包實(shí)現(xiàn)方法

    使用tar包格式進(jìn)行壓縮,方便在不同的docker主機(jī)之間進(jìn)行遷移和備份,下面這篇文章主要給大家介紹了關(guān)于docker將鏡像打包為.tar包的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-07-07
  • Docker Swarm實(shí)現(xiàn)服務(wù)的滾動(dòng)更新的示例代碼

    Docker Swarm實(shí)現(xiàn)服務(wù)的滾動(dòng)更新的示例代碼

    這篇文章主要介紹了Docker Swarm實(shí)現(xiàn)服務(wù)的滾動(dòng)更新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Docker容器監(jiān)控及日志管理實(shí)現(xiàn)過程解析

    Docker容器監(jiān)控及日志管理實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Docker容器監(jiān)控及日志管理實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • docker pull拉取超時(shí)的解決方案

    docker pull拉取超時(shí)的解決方案

    這篇文章主要介紹了docker pull拉取超時(shí)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker images本地遷移的實(shí)現(xiàn)

    docker images本地遷移的實(shí)現(xiàn)

    這篇文章主要介紹了docker images本地遷移的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 詳解如何基于Docker鏡像逆向生成Dockerfile

    詳解如何基于Docker鏡像逆向生成Dockerfile

    這篇博客文章我們將通過使用一些開源工具,帶領(lǐng)您逐步解讀?Docker?鏡像并轉(zhuǎn)換為?Dockerfile?的過程,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Docker Registry 實(shí)現(xiàn)原理、適用場(chǎng)景、常用操作及搭建過程

    Docker Registry 實(shí)現(xiàn)原理、適用場(chǎng)景、常用操作及搭建過程

    Docker Registry基于無狀態(tài)架構(gòu),支持多存儲(chǔ)后端與認(rèn)證方式,用于私有鏡像管理、性能優(yōu)化及CI/CD集成,提供官方鏡像、Harbor和高可用部署方案,需注意安全、存儲(chǔ)規(guī)劃與備份,本文給大家介紹Docker Registry 實(shí)現(xiàn)原理、適用場(chǎng)景、常用操作,感興趣的朋友一起看看吧
    2025-09-09
  • docker從Path值看容器啟動(dòng)命令方式

    docker從Path值看容器啟動(dòng)命令方式

    Docker容器的config.v2.json文件中的Path字段指定了容器啟動(dòng)時(shí)要執(zhí)行的主程序(可執(zhí)行文件)的路徑,決定了容器運(yùn)行時(shí)的入口點(diǎn),它通常是容器文件系統(tǒng)中某個(gè)可執(zhí)行文件的絕對(duì)路徑
    2026-02-02
  • Docker環(huán)境搭建、阿里云鏡像加速、常用命令使用及說明

    Docker環(huán)境搭建、阿里云鏡像加速、常用命令使用及說明

    文章介紹了Docker的基本架構(gòu),包括容器、鏡像和倉(cāng)庫(kù)的關(guān)系,詳細(xì)說明了在CentOS系統(tǒng)下Docker的安裝步驟,并講解了如何配置阿里云鏡像加速及常用的Docker命令操作
    2025-10-10
  • 阿里云CentOS 6.5 安裝Docker詳細(xì)步驟

    阿里云CentOS 6.5 安裝Docker詳細(xì)步驟

    這篇文章主要介紹了阿里云CentOS 6.5 安裝Docker的相關(guān)資料,現(xiàn)在都是云時(shí)代和大數(shù)據(jù)時(shí)代,希望大家也能跟著時(shí)代的步伐,需要的朋友可以參考下
    2016-10-10

最新評(píng)論

溧阳市| 黑河市| 浑源县| 德钦县| 濮阳市| 攀枝花市| 左权县| 安图县| 阳谷县| 岳西县| 图们市| 张家港市| 博白县| 闽清县| 汾西县| 金昌市| 灵宝市| 仙居县| 临潭县| 叙永县| 大安市| 昌吉市| 黄冈市| 化隆| 高要市| 太仓市| 宜宾县| 繁昌县| 墨竹工卡县| 临夏县| 浦东新区| 屯门区| 北宁市| 平武县| 武清区| 淳安县| 大足县| 定边县| 武川县| 嵊州市| 电白县|