Docker 入門筆記
1. Docker 使用流程與說明 使用流程
撰寫或下載鏡像(Image) :
從官方倉庫(如 Docker Hub)下載現有鏡像,或者基於自己的需求撰寫 Dockerfile。
構建鏡像(Build Image) :
使用 docker build 指令,從 Dockerfile 中構建自定義鏡像。
運行容器(Run Container) :
操作容器(Manage Container) :
跨裝置遷移與部署 :
使用 Docker Compose 或導出鏡像,快速在其他設備上配置環境。 這樣做的好處是運行環境是完全一致的,無論是在本地、測試還是生產環境。
主要指令與說明
docker pull [OPTIONS] [IMAGE:TAG]
從 Docker Hub 或其他註冊表下載指定的鏡像。
[OPTIONS]:
範例 :
docker build [OPTIONS] [CONTEXT]
根據 Dockerfile 構建鏡像。
[OPTIONS]:
-t [NAME:TAG]:給鏡像命名並指定標籤。
--no-cache:不使用緩存,強制重新構建。
範例 :1 docker build -t my-python-app .
docker run [OPTIONS] [IMAGE] [COMMAND]
基於指定的鏡像啟動容器。
[OPTIONS]:
-d:後台運行容器。
-p [HOST_PORT]:[CONTAINER_PORT]:映射主機和容器端口。
--name [NAME]:指定容器名稱。
-v [HOST_PATH]:[CONTAINER_PATH]:掛載本地文件或目錄到容器。
--rm:容器運行結束後自動刪除。
範例 :1 docker run -d -p 5000:5000 --name my-python-container python:3.9
從 Docker Hub 下載現有鏡像範例
下載 Python 鏡像並運行交互模式 1 2 docker pull python:3.9 docker run -it python:3.9 python
執行後你會進入 Python 交互環境,可以直接輸入程式碼測試。1 2 print ("Hello from Docker!" )exit()
使用 Dockerfile 構建與運行 Python 專案的完整流程
1. 撰寫 Dockerfile 在專案目錄下建立 Dockerfile,內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 FROM python:3.9 -slimWORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD ["python" , "app.py" ]
2. 構建鏡像 運行以下指令,將 Dockerfile 轉換為鏡像:
1 docker build -t my-python-app .
-t my-python-app:給鏡像取名為 my-python-app。
.:表示 Dockerfile 所在的目錄。
完成後,Docker 會生成一個新的鏡像,你可以使用以下指令查看:
3. 運行容器 基於剛剛構建的鏡像,啟動一個容器來執行代碼:
1 docker run -d -p 5000:5000 --name my-container my-python-app
-d:後台運行容器。
-p 5000:5000:將容器內的 5000 端口映射到主機的 5000 端口。
--name my-container:給容器取名為 my-container。
my-python-app:基於剛剛構建的鏡像運行。
此時,容器已經啟動並執行程式,打開瀏覽器訪問 http://localhost:5000,應該能看到你的應用在運行。
4. 調試和修改代碼 進入容器: 1 docker exec -it my-container /bin/bash
在容器內執行 Python 腳本或進行調試:
5. 停止或刪除容器 停止容器: 1 docker stop my-container
刪除容器:
小結
Dockerfile 是用來構建鏡像的,包含了應用的運行環境和依賴。
鏡像(Image) 是一個靜態模板,用於創建容器。
容器(Container) 是鏡像運行後的動態實例,在裡面執行你的代碼。
2. Dockerfile 撰寫與範例 Flask 範例程式碼 Flask 應用程式 (app.py) 1 2 3 4 5 6 7 8 9 from flask import Flaskapp = Flask(__name__) @app.route("/" ) def home (): return "Hello, Docker!" if __name__ == "__main__" : app.run(host="0.0.0.0" , port=5000 )
requirements.txt
Dockerfile 的結構與範例 Dockerfile 範例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 FROM python:3.9 -slimWORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD ["python" , "app.py" ]
構建與運行 :1 2 docker build -t flask-app . docker run -d -p 5000:5000 flask-app
3. 多裝置間的環境配置與多運行環境 使用 Docker Compose 快速配置多運行環境 docker-compose.yml 範例1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 version: '3.8' services: nodejs: image: node:16 container_name: nodejs-container volumes: - ./node-app:/app command: ["node" ] ports: - "3000:3000" python: image: python:3.9 container_name: python-container volumes: - ./python-app:/app command: ["python" ] ports: - "5000:5000" mysql: image: mysql:8 container_name: mysql-container environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: mydb ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:
運行指令
在專案目錄下運行:
檢查服務:
4. Docker 運作流程圖 以下是 Docker 在 Client-Server 模式下的運作示意:
5. 重點整理
Docker 核心流程 :
撰寫 Dockerfile。
使用 docker build 構建鏡像。
使用 docker run 啟動容器。
使用 docker-compose.yml 定義多服務環境。
常用指令 :
docker build:構建鏡像。
docker run:運行容器。
docker-compose up:運行多服務環境。
高效管理技巧 :
使用 Dockerfile 定義環境,確保可重現性。
使用 docker-compose.yml 快速配置多運行環境。
Q&A :
Q:docker run只讓容器執行一次並退出,但仍然存在,而start是讓容器持續運行嗎 A:
docker run 的行為 docker run 是基於鏡像創建並啟動一個新的容器,執行 CMD 或 ENTRYPOINT 中定義的指令。 如果是一次性任務(如腳本執行完畢),容器會執行完畢後自動退出,但仍然存在於 docker ps -a 中。 若程式是持續運行(如 Web 伺服器),則會一直保持運行狀態,直到手動停止。
docker start 的行為 docker start 只能用於已經創建過的、處於停止狀態的容器。 它會重新啟動該容器,但不會重新執行 CMD 指令(如果上次執行完畢,容器會馬上退出)。 如果是持續運行的程式,docker start 會讓它繼續運行。
Q:build鏡像假設名稱重複會怎麼辦? A:會 覆蓋掉原本相同名稱和標籤的鏡像,不會出錯。
Q:run 容器名稱重複會怎麼辦? A:會報錯,提示容器名稱已存在。