Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
一鍵開服,創建你的虛擬世界 2025/03/18 by YuKai
Slide 2
Slide 2 text
01 為什麼你該學 Docker 02 如何使用 Docker 03 一個 Docker 不夠用,那就多用幾個 (docker compose) Outline 04 給我更多更多的 container
Slide 3
Slide 3 text
架服務會遇到的難題 我這跑得好好的 肯定是你的電腦有問題
Slide 4
Slide 4 text
為什麼你該學 Docker? 01
Slide 5
Slide 5 text
● 容器化技術(container) ● 不需要 HyperVisor,直接使用 host machine 效能 ● 以 Golang 語言開發 What is Docker
Slide 6
Slide 6 text
● 輕量級的虛擬化技術 ● 將應用程式、環境一起打包 ● 隔離彼此的應用程式,不受其他應用程式影響 容器化技術
Slide 7
Slide 7 text
● 輕鬆在任何環境部屬應用程式 ○ Game server(Ex: Minecraft server) ○ Web Application(Ex: Frontend、Backend) ○ Tools ○ AI Agent(MCP) Docker 能幹嘛
Slide 8
Slide 8 text
● Registry ● Image ● Container Docker Architecture
Slide 9
Slide 9 text
Registry、Repository、Image Registry Repository1 Image-name:tag1 Image-name:tag2 Image-name:tag3 Repository2 Image-name:tag1 Image-name:tag2 Image-name:tag3
Slide 10
Slide 10 text
● Registry 又分 Public 和 Private ○ Docker Hub ○ GitLab container registry ○ Google Container Registry(gcr.io) Registry、Repository、Image
Slide 11
Slide 11 text
● Image 是一個 readonly 的模板,包含了必要的 os、application、package ● Container 按照 image 建立而成,container 彼 此是獨立的,只要刪掉 container 就可以移除上面 的所有資料 Image、Container
Slide 12
Slide 12 text
Virtual Machine vs. Container VM Container 啟動時間 基本上都要幾分鐘 快速 容量 大(GB) 小(MB) 效能 較慢 較快 Host machine 可支撐的數量 數十個 數百個 複製環境 較慢 較快
Slide 13
Slide 13 text
● Play with docker ● Docker Install 教學 Docker Install、Online Docker
Slide 14
Slide 14 text
如何使用 Docker 02 How to TCPdump effectively in Docker
Slide 15
Slide 15 text
● 拉取 Image ● 建立 container ● 啟用/停止 container ● 列出 container / image ● 刪除 container / image Docker 常見指令
Slide 16
Slide 16 text
● 拉取 image,預設 latest ● 拉取特定 tag 的 image 常見指令 – 拉取 Image docker pull [image name] docker pull [image name]:[tag]
Slide 17
Slide 17 text
常見指令 – 建立 container docker run –d --name [container name] [image name] [other command] -d:背景執行 -it:提供交互模式 --name:定義容器名稱 -e:加入環境變數 -p:綁定 host 和 container 的 port --rm:當 container 不使用時就刪除
Slide 18
Slide 18 text
● 啟用 container ● 停止 container 常見指令 – 啟用/停止 container docker start [container name] docker stop [container name]
Slide 19
Slide 19 text
● 列出已啟用的 container ● 列出所有 container ● 列出所有 image 常見指令 – 列出 container/image docker ps docker ps -a docker images
Slide 20
Slide 20 text
● 刪除沒有啟用的 container ● 刪除未使用的 image 常見指令 – 刪除 container/image docker rm [container name] docker rmi [image name]
Slide 21
Slide 21 text
● 進入 container 查看 ● 查看 image/container 詳細資訊 一些實用的指令 docker exec –it [container name] bash docker inspect [image name]/[container name] docker run –it --name [container name] [image name] bash
Slide 22
Slide 22 text
● 列出 container log ● 列出 image history 一些實用的指令 docker logs [container name] docker logs [container name] -f docker history [image name]
Slide 23
Slide 23 text
● 拉取 Ubuntu Image 並輸出 Hello World ● 拉取一個你有興趣的 Image 並將其建立出一個 container Lab 1 docker pull ubuntu:latest docker run --name ub-1 ubuntu echo hello wolrd
Slide 24
Slide 24 text
簡單架一個 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)
Slide 25
Slide 25 text
建立一個 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"]
Slide 26
Slide 26 text
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 鏡像差異
Slide 27
Slide 27 text
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
Slide 28
Slide 28 text
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 底下
Slide 29
Slide 29 text
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 時)
Slide 30
Slide 30 text
補充:生成 requirements 這樣就可以將需要的套件列入 requirements.txt pip freeze > requirements.txt
Slide 31
Slide 31 text
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
Slide 32
Slide 32 text
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 時)
Slide 33
Slide 33 text
● 建立 image ● 刪除 none image 常見指令 docker build -t [image name] . docker image prune
Slide 34
Slide 34 text
使用 Dockerfile 建立簡單的 Application Lab2 docker build -t [image name] . docker run –d --name [container name] –p 5000:5000 [image name]
Slide 35
Slide 35 text
Docker Compose 一個 Docker 不夠用,那就多用幾個 03
Slide 36
Slide 36 text
● 幫助定義、運行、管理多個 docker ● 使用 yaml 配置 ● 保持整套系統的一致性 What is Docker Compose?
Slide 37
Slide 37 text
● 建立一個 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
Slide 38
Slide 38 text
flask: build: . ports: - "5000:5000" environment: - FLASK_ENV=development 第一個 application(flask) Docker Compose 用同個目錄下的 Dockerfile 建構 綁定 5000 port 設定環境變數
Slide 39
Slide 39 text
第二個 application(tunnel) Docker Compose tunnel: image: cloudflare/cloudflared command: --url http://flask:5000 depends_on: - flask 使用哪個 image 等待 flask 建立好 在 container 執行的指令
Slide 40
Slide 40 text
記得先切到 compose.yml 同個目錄下 ● 根據 compose.yml 建立所有 image 和 container ● 將 compose.yml 的 container 移除 常用指令 – 建立/啟用/移除 docker-compose build up -d docker-compose down
Slide 41
Slide 41 text
嘗試用 Docker compose 建立先前的 Service Lab3 docker-compose build up -d
Slide 42
Slide 42 text
給我更多更多的 Container 04
Slide 43
Slide 43 text
Volume:避免資料在容器刪除後被移除 More Docker Usage Host Machine Container /my_database/sqlite.db /certs/certificate.crt /my_db /my_certs
Slide 44
Slide 44 text
Network:建立容器間溝通 ● bridge:預設模式 More Docker Usage 圖源
Slide 45
Slide 45 text
Network:建立容器間溝通 ● overlay:能使不同 docker daemon 通信 More Docker Usage 圖源
Slide 46
Slide 46 text
Network:建立容器間溝通 ● macvlan ○ 能使用 physical address More Docker Usage 圖源
Slide 47
Slide 47 text
Network:建立容器間溝通 ● host ○ 會使得 Network 隔離效果消失 ○ 安全風險(延伸資料:docker escape) More Docker Usage
Slide 48
Slide 48 text
Docker Swarm • 在多台實體機器上執行 Container,形 成一個叢集(Cluster)的一個工具 Kubernets(K8s) • 用於自動部署、擴充和管理「容器化應用 程式」的開源系統 More Container
Slide 49
Slide 49 text
● Dockage ● Portainer ● Docker Desktop I need Some GUI
Slide 50
Slide 50 text
No content