Docker - 指令命令
您好,未來的 Docker 巫師!我很興奮能成為您在 Docker 命令世界中的導遊。作為一個教了多年計算機科學的人,我可以告訴您,Docker 對開發者來說就像一根魔杖。它讓我們的生活變得簡單許多!所以,讓我們挽起袖子,一起進入 Docker 指令命令的迷人領域。
CMD 指令
CMD 指令就像是電影中的主角 - 在 Docker 容器中,它是大放異彩的明星。它告訴 Docker 在您的容器啟動時要運行哪個命令。
基本語法
CMD ["可執行文件", "參數1", "參數2"]
讓我們用一個簡單的例子來分解這個:
FROM ubuntu
CMD ["echo", "Hello, Docker World!"]
在這個例子中,當您運行您的容器時,它會將 "Hello, Docker World!" 打印到控制台。這就像您的容器一醒來就向您問好一樣!
多個 CMD 指令
這裡有一個小陷阱問題:如果您在 Dockerfile 中有多個 CMD 指令會怎麼樣?
FROM ubuntu
CMD ["echo", "第一個命令"]
CMD ["echo", "第二個命令"]
如果您猜測兩個命令都會運行,那麼我恐怕您已經落入了一個常見的陷阱!實際上,只有最後一個 CMD 指令會被执行。這就像在戲劇中 - 只有最後一幕才是最重要的!
Shell 形式與 Exec 形式
CMD 可以寫成兩種形式:
- Shell 形式:
CMD 命令 參數1 參數2
- Exec 形式:
CMD ["可執行文件", "參數1", "參數2"]
Exec 形式更受推崇,因為它更明確,並且避免了 shell 解析的問題。
ENTRYPOINT
如果 CMD 是主角,那麼 ENTRYPOINT 就是 Docker 電影的導演。它為容器設定了主要命令,當容器啟動時無法被覆蓋。
基本語法
ENTRYPOINT ["可執行文件", "參數1", "參數2"]
讓我們看一個例子:
FROM ubuntu
ENTRYPOINT ["echo", "Hello from"]
CMD ["Docker"]
當您運行這個容器時,它會輸出 "Hello from Docker"。但這裡有點意思!如果您運行容器並帶有附加參數,它們將會替換 CMD 但不會替換 ENTRYPOINT。
docker run myimage World
這會輸出 "Hello from World"。這就像 ENTRYPOINT 在設置舞臺,而 CMD(或運行時參數)是在上面表演的演員!
ENV
ENV 就像是我們 Docker 作品的服裝部門。它設置可以在容器中使用的環境變量。
基本語法
ENV 鍵=值
這裡有一個實際的例子:
FROM ubuntu
ENV MY_NAME="Docker 狂熱者"
CMD ["sh", "-c", "echo Hello, $MY_NAME!"]
當容器運行時,這會輸出 "Hello, Docker 狂熱者!" 它就像給您的容器一個名牌一樣!
多個 ENV 指令
與 CMD 不同,您可以有多個 ENV 指令,而且它們都會生效:
FROM ubuntu
ENV MY_NAME="Docker 狂熱者"
ENV MY_DOG=Rex MY_CAT=Fluffy
CMD ["sh", "-c", "echo Hello, $MY_NAME! Your pets are $MY_DOG and $MY_CAT."]
這個容器會向您問好並介紹您的寵物!
WORKDIR
WORKDIR 就像是我們 Docker 作品的佈景設計師。它為 Dockerfile 中跟隨它的任何命令設置工作目錄。
基本語法
WORKDIR /路徑/到/目錄
讓我們看看它是如何工作的:
FROM ubuntu
WORKDIR /app
COPY . .
CMD ["ls", "-l"]
這個 Dockerfile 將工作目錄設置為 /app
,將當前目錄內容複製到其中,然後當容器運行時列出內容。這就像告訴您的容器:"嘿,在這個目錄裡給自己弄個舒服的地方!"
多個 WORKDIR 指令
您可以使用 WORKDIR 多次來更改目錄:
FROM ubuntu
WORKDIR /app
WORKDIR src
WORKDIR scripts
RUN pwd
這將輸出 /app/src/scripts
。這就像給您的容器帶著它參觀它的新家!
準備好所有的東西
現在,我們已經見過所有的 Docker 指令命令,讓我們看看它們如何在真實世界的場景中一起工作。想像一下我們正在創建一個簡單的 Python 網絡應用程序:
FROM python:3.9-slim
# 設置環境變量
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# 設置工作目錄
WORKDIR /app
# 安裝依賴
COPY requirements.txt .
RUN pip install -r requirements.txt
# 複製項目
COPY . .
# 命令來運行應用程序
ENTRYPOINT ["python"]
CMD ["app.py"]
這個 Dockerfile 設置了 Python 環境,安裝了依賴,複製了我們的應用程序代碼,並指定了如何運行應用程序。這就像為我們的 Python 應用程序創造完美環境的配方!
命令總結
這裡是一個我們已經介紹過的命令的快速參考表:
命令 | 描述 | 示例 |
---|---|---|
CMD | 指定容器啟動時運行的命令 | CMD ["python", "app.py"] |
ENTRYPOINT | 設置容器的主要命令 | ENTRYPOINT ["python"] |
ENV | 設置環境變量 | ENV MY_VAR=value |
WORKDIR | 設置工作目錄 | WORKDIR /app |
記住,這些命令就像是您 Docker 容器的積木。將它們混合搭配,為您的應用程序創造完美的環境!
那就這樣吧,親愛的學生們!我們一起穿越了 Docker 指令命令的土地,從星光璀璨的 CMD 到導演的 ENTRYPOINT,再到服裝設計的 ENV 和佈景設計的 WORKDIR。我希望這個指南為您在 Docker 冒險中的道路照亮了光明。記住,熟能生巧,所以不要害怕試驗這些命令。祝您 Docker 學習愉快!
Credits: Image by storyset