AI Engineering Tools

程式設計

Docker

整理 Docker 映像檔、容器、Dockerfile、Compose、連接埠、磁碟區、日誌與常見問題的搜尋型指南。

33 個項目

核心概念

Docker

Docker

docker --version

意思

一個用於打包和運行應用程序的工具,應用程序運行在隔離的容器中。

使用時機

當您希望應用程式在不同機器上使用相同的 OS 套件、運行時環境和依賴項時,使用它。

範例

docker --version

請求範例

說明這個專案是否可以使用 Docker 運行。

核心概念

Docker daemon

Docker daemon

無法連接到 Docker 守護進程

意思

構建映像並執行容器的背景服務。

使用時機

如果 Docker 命令無法連接,Docker Desktop 或 Docker 服務可能未啟動。

範例

無法連接到 Docker 守護進程

請求範例

檢查為什麼 Docker 命令無法連接到 Daemon。

核心概念

圖像

Image

node:20-alpine

意思

一個可重複使用的模板,用於創建容器。

使用時機

圖片定義了容器啟動時包含的內容,例如 OS、運行時環境、函式庫和應用程式檔案。

範例

node:20-alpine

請求範例

請告訴我,這個 Dockerfile 使用哪個基礎映像。

核心概念

容器

Container

docker ps

意思

一個從映像檔創建的正在運行的或已停止的實例。

使用時機

使用容器來執行應用程式、資料庫、快取或工作進程,以在隔離的環境中運行。

範例

docker ps

請求範例

列出正在運行的容器,並解釋每個容器的作用。

核心概念

註冊表

Registry

docker pull postgres:16

意思

一個儲存和下載 Docker 映像的伺服器。

使用時機

Docker Hub and private registries are used to share base images or deployable app images.

範例

docker pull postgres:16

請求範例

說明這個映像檔將從哪個位置下載。

Dockerfile

Dockerfile

Dockerfile

Dockerfile

意思

一個定義如何構建 Docker 映像的文件。

使用時機

用於安裝依賴項、複製應用程式檔案,並定義啟動應用程式的命令。

範例

Dockerfile

請求範例

讀取此 Dockerfile 並總結構建步驟。

Dockerfile

FROM

FROM

FROM node:20-alpine

意思

Dockerfile 指令,用於選擇基礎映像。

使用時機

它決定了啟動的 OS 層級,並且通常是運行時版本。

注意

變更基礎映像檔可能會影響可用的命令、安全更新和映像大小。

範例

FROM node:20-alpine

請求範例

說明此 FROM 映像包含的內容。

Dockerfile

WORKDIR

WORKDIR

WORKDIR /app

意思

設定映像檔內部的資料夾,後續的命令將在此資料夾中執行。

使用時機

確保 COPY、RUN 和 CMD 命令從可預測的應用程式資料夾執行。

範例

WORKDIR /app

請求範例

說明這個 Dockerfile 使用哪個資料夾作為應用程式目錄。

Dockerfile

COPY

COPY

COPY package.json package-lock.json ./

意思

將檔案從建構環境複製到映像檔中。

使用時機

用於將依賴檔案、原始程式碼和靜態資源添加到映像檔中。

範例

COPY package.json package-lock.json ./

請求範例

請告訴我,這個 COPY 步驟將哪些檔案添加到映像中。

Dockerfile

RUN

RUN

RUN npm ci

意思

在建立映像檔時,執行指令。

使用時機

使用它來安裝 OS 套件、安裝依賴項或構建應用程式檔案。

注意

RUN 在映像構建時發生,而不是在容器啟動時。

範例

RUN npm ci

請求範例

區分 Dockerfile 中的構建時命令和容器啟動時的命令。

Dockerfile

CMD

CMD

CMD ["npm", "run", "start"]

意思

定義容器啟動時執行的預設命令。

使用時機

運用它來啟動網頁伺服器、API 伺服器、工作進程或腳本。

範例

CMD ["npm", "run", "start"]

請求範例

請告訴我此容器啟動時使用的命令。

Dockerfile

EXPOSE

EXPOSE

EXPOSE 3000

意思

记录容器化应用程序预期的监听端口。

使用時機

將其用作提示,然後使用 `docker run -p` 或 Compose 端口發布端口。

注意

僅僅使用 EXPOSE 並不能讓應用程式從您的瀏覽器訪問。

範例

EXPOSE 3000

請求範例

說明這個已公開的端口是否實際上已經被啟用。

Dockerfile

.dockerignore

.dockerignore

node_modules

意思

一個從 Docker 構建上下文排除路徑的文件。

使用時機

用於將本地依賴項、構建輸出、密碼和臨時檔案排除在映像檔構建之外。

範例

node_modules

請求範例

檢查此 .dockerignore 是否排除不安全或不必要的檔案。

Dockerfile

構建上下文

Build context

docker build -t my-app .

意思

在图像构建过程中发送到 Docker 的文件夹。

使用時機

在 Docker 构建中,最后的点通常表示当前文件夹是构建上下文。

注意

較大的上下文會減慢構建速度,並且可能意外包含私有文件。

範例

docker build -t my-app .

請求範例

說明此 Docker 構建可用的檔案。

Docker Compose

Docker Compose

Docker Compose

docker compose up

意思

一個用於從一個 YAML 文件運行多個 Docker 服務的工具。

使用時機

用於應用程式、資料庫、快取、工作器或本地開發堆疊。

範例

docker compose up

請求範例

說明此 compose 檔案啟動的服務。

Docker Compose

服務。

services

services: web: db:

意思

在組件文件中定義的命名應用程式部分。

使用時機

一個 Web 服務可能運行應用程序,而一個數據庫服務運行 PostgreSQL。

範例

services: web: db:

請求範例

列出此 compose 文件中的服務以及每個服務的作用。

Docker Compose

docker compose up

docker compose up

docker compose up -d

意思

啟動在 Compose 文件中定義的服務。

使用時機

當您希望服務在後台執行時,使用 -d 選項。

範例

docker compose up -d

請求範例

啟動 Compose 服務,並顯示哪些服務正在運行。

Docker Compose

docker compose down

docker compose down

docker compose down

意思

停止並刪除由 Compose 創建的容器。

使用時機

在完成本地開發堆疊時使用。

注意

命名卷通常會保留,除非您明確刪除卷。

範例

docker compose down

請求範例

停止此 Compose 堆疊,而無需刪除持久性資料。

指令

docker build

docker build

docker build -t my-app .

意思

從 Dockerfile 和上下文構建 Docker 映像。

使用時機

在編寫 Dockerfile 或更改應用程式依賴項之後,使用它。

範例

docker build -t my-app .

請求範例

構建此 Docker 映像,並總結任何構建錯誤。

指令

docker run

docker run

docker run --name my-app -p 3000:3000 my-app

意思

從映像檔建立並啟動一個容器。

使用時機

在希望直接啟動一個容器,而無需使用 compose 時使用。

範例

docker run --name my-app -p 3000:3000 my-app

請求範例

執行此圖像,並解釋瀏覽器 URL。

指令

docker ps

docker ps

docker ps

意思

顯示正在執行的容器。

使用時機

使用 `docker ps -a` 命令,當您也需要查看已停止的容器時。

範例

docker ps

請求範例

顯示正在執行的容器及其發布的埠。

指令

docker stop

docker stop

docker stop my-app

意思

停止正在運行的容器。

使用時機

在刪除容器或釋放端口之前,使用它。

範例

docker stop my-app

請求範例

使用 3000 端口停止容器。

指令

docker logs

docker logs

docker logs my-app

意思

打印容器中的日誌。

使用時機

運用它,當容器退出、崩潰,或應用程式沒有回應時。

範例

docker logs my-app

請求範例

讀取此容器的日誌,並找到第一個錯誤。

指令

docker exec

docker exec

docker exec -it my-app sh

意思

在已運行的容器內部執行指令。

使用時機

用於檢查容器內部的檔案、環境變數或已安裝的工具。

注意

在容器內手動進行的變更,當容器被重新建立時可能會消失。

範例

docker exec -it my-app sh

請求範例

在這個容器中開啟一個 shell,並檢查其環境變數。

Port 與網路

ports

ports

3000:3000

意思

將您機器上的埠映射到容器內的埠。

使用時機

確保瀏覽器可以訪問運行在容器內的 Web 應用程式。

注意

左侧是主机端口,右侧是容器端口。

範例

3000:3000

請求範例

說明我應該打開哪個 URL 以配置這些端口設置。

Port 與網路

Docker 中的 localhost

localhost in Docker

host.docker.internal

意思

在 Docker 中,localhost 可能指的是容器本身,而不是您的主机。

使用時機

在 compose 網路中使用服務名稱,或者在容器需要連接到主機時,使用 host.docker.internal。

範例

host.docker.internal

請求範例

說明為什麼 localhost 無法從這個容器訪問到資料庫。

檔案與資料

音量

Volume

db-data:/var/lib/postgresql/data

意思

Docker-managed storage that can persist data outside a container's lifecycle.

使用時機

使用卷(volumes)來儲存資料庫資料或其他應在容器重新創建後仍然存在的檔案。

注意

移除音量可能會刪除持久性資料。

範例

db-data:/var/lib/postgresql/data

請求範例

請告訴我,哪些 compose 卷儲存了持久性資料。

檔案與資料

綁定掛載

Bind mount

./src:/app/src

意思

將一個主機資料夾直接連接到容器路徑。

使用時機

在開發期間使用它,以便主機上的代碼編輯出現在容器內部。

注意

一個綁定掛載可以隱藏複製到映像中的檔案,這些檔案位於相同的路徑下。

範例

./src:/app/src

請求範例

說明這個卷是命名卷還是綁定掛載。

檔案與資料

環境

environment

DATABASE_URL=postgres://db:5432/app

意思

傳遞到容器的配置值。

使用時機

使用環境變數來配置資料庫 URL、端口、模式、功能標誌和運行時設置。

注意

不要將密碼嵌入到公開的映像檔中,也不要提交真實的密碼值。

範例

DATABASE_URL=postgres://db:5432/app

請求範例

檢查這個容器需要哪些環境變數。

疑難排解

port is already allocated

port is already allocated

綁定到 0.0.0.0:3000 失敗:埠已被分配。

意思

Docker cannot publish a host port because another process or container is already using it.

使用時機

找到使用該埠的進程或容器,然後停止它或選擇不同的主機埠。

範例

綁定到 0.0.0.0:3000 失敗:埠已被分配。

請求範例

找到哪些正在使用此 Docker 埠,並建議一個安全的解決方案。

疑難排解

容器名稱已被使用。

container name is already in use

衝突。容器名稱 "/my-app" 已在使用中。

意思

已經存在同名的容器。

使用時機

列出現有的容器,然後重用、刪除或重命名舊容器。

範例

衝突。容器名稱 "/my-app" 已在使用中。

請求範例

在不意外刪除資料的情況下,解決此容器名稱衝突。

疑難排解

構建快取

Build cache

docker build --no-cache -t my-app .

意思

Docker can reuse previous build layers to make builds faster.

使用時機

如果更改似乎被忽略,請檢查 Dockerfile 的順序,或嘗試在不使用快取的情況下重新構建,以進行診斷。

注意

--no-cache 參數可能會降低建置速度,請謹慎使用。

範例

docker build --no-cache -t my-app .

請求範例

說明 Docker 構建快取是否可能隱藏了我的更改。

安全操作

docker system prune

docker system prune

docker system prune

意思

移除未使用的 Docker 資料,例如已停止的容器、未使用的網路和懸空的映像。

使用時機

運用它,當 Docker 使用過多的磁碟空間,並且您了解將會移除哪些內容時。

注意

使用額外的標誌,修剪功能可能會刪除您仍然關心的圖片或磁碟區。

範例

docker system prune

請求範例

在修剪 Docker 之前,請顯示將會刪除什麼以及哪些數據是安全的。