Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to use Docker@HackerSir 11th

How to use Docker@HackerSir 11th

Avatar for YUKAI

YUKAI

May 30, 2025
Tweet

More Decks by YUKAI

Other Decks in Education

Transcript

  1. • Registry 又分 Public 和 Private ◦ Docker Hub ◦

    GitLab container registry ◦ Google Container Registry(gcr.io) Registry、Repository、Image
  2. • Image 是一個 readonly 的模板,包含了必要的 os、application、package • Container 按照 image

    建立而成,container 彼 此是獨立的,只要刪掉 container 就可以移除上面 的所有資料 Image、Container
  3. Virtual Machine vs. Container VM Container 啟動時間 基本上都要幾分鐘 快速 容量

    大(GB) 小(MB) 效能 較慢 較快 Host machine 可支撐的數量 數十個 數百個 複製環境 較慢 較快
  4. • 拉取 Image • 建立 container • 啟用/停止 container •

    列出 container / image • 刪除 container / image Docker 常見指令
  5. • 拉取 image,預設 latest • 拉取特定 tag 的 image 常見指令

    – 拉取 Image docker pull [image name] docker pull [image name]:[tag]
  6. 常見指令 – 建立 container docker run –d --name [container name]

    [image name] [other command] -d:背景執行 -it:提供交互模式 --name:定義容器名稱 -e:加入環境變數 -p:綁定 host 和 container 的 port --rm:當 container 不使用時就刪除
  7. • 啟用 container • 停止 container 常見指令 – 啟用/停止 container

    docker start [container name] docker stop [container name]
  8. • 列出已啟用的 container • 列出所有 container • 列出所有 image 常見指令

    – 列出 container/image docker ps docker ps -a docker images
  9. • 進入 container 查看 • 查看 image/container 詳細資訊 一些實用的指令 docker

    exec –it [container name] bash docker inspect [image name]/[container name] docker run –it --name [container name] [image name] bash
  10. • 列出 container log • 列出 image history 一些實用的指令 docker

    logs [container name] docker logs [container name] -f docker history [image name]
  11. • 拉取 Ubuntu Image 並輸出 Hello World • 拉取一個你有興趣的 Image

    並將其建立出一個 container Lab 1 docker pull ubuntu:latest docker run --name ub-1 ubuntu echo hello wolrd
  12. 簡單架一個 web server,首先新增 main.py 建立自己的 Image from flask import Flask

    app = Flask(__name__) @app.route('/') def home(): return "Hello, Flask!" if __name__ == '__main__': app.run(host='0.0.0.0', debug=True)
  13. 建立一個 Dockerfile Dockerfile FROM python:3.9-slim WORKDIR /app COPY . /app

    RUN pip install --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"]
  14. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 拉取 base image 延伸閱讀:docker 鏡像差異
  15. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 新建 /app 目錄到 image
  16. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 複製現在的目錄到 image 的 /app 底下
  17. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 執行指令(建立 image 時)
  18. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 開放 80 port
  19. FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install

    --no-cache-dir -r requirements.txt EXPOSE 80 CMD ["python", "main.py"] Dockerfile 執行指令(構建 container 時)
  20. 使用 Dockerfile 建立簡單的 Application Lab2 docker build -t [image name]

    . docker run –d --name [container name] –p 5000:5000 [image name]
  21. • 建立一個 compose.yml • version:使用哪個版本 • services:有哪些 application Docker Compose

    version: '3.8' services: flask: build: . ports: - "5000:5000" environment: - FLASK_ENV=development tunnel: image: cloudflare/cloudflared command: --url http://flask:5000 depends_on: - flask
  22. flask: build: . ports: - "5000:5000" environment: - FLASK_ENV=development 第一個

    application(flask) Docker Compose 用同個目錄下的 Dockerfile 建構 綁定 5000 port 設定環境變數
  23. 第二個 application(tunnel) Docker Compose tunnel: image: cloudflare/cloudflared command: --url http://flask:5000

    depends_on: - flask 使用哪個 image 等待 flask 建立好 在 container 執行的指令
  24. 記得先切到 compose.yml 同個目錄下 • 根據 compose.yml 建立所有 image 和 container

    • 將 compose.yml 的 container 移除 常用指令 – 建立/啟用/移除 docker-compose build up -d docker-compose down