Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How to use Docker@HackerSir 11th
Search
YUKAI
May 30, 2025
Education
0
33
How to use Docker@HackerSir 11th
YUKAI
May 30, 2025
Tweet
Share
More Decks by YUKAI
See All by YUKAI
WebAssembly 入門:在 Browser 上跑 C Code 是怎麼回事@HackerSir StudyGroup
yukai0xe
0
27
Docker Escape@HackerSir StudyGroup
yukai0xe
0
43
OAuth2.0 Easy Talk@HackerSir StudyGroup
yukai0xe
0
24
Discord Bot Junior Tutorial@HackerSir 11th
yukai0xe
0
19
XSS Everywhere@HackerSir 11th
yukai0xe
0
27
不要小看我的情報網_上吧網路爬蟲!!@HackerSir 11th
yukai0xe
0
39
Other Decks in Education
See All in Education
Linguaxes de programación
irocho
0
490
The Next Big Step Toward Nuclear Disarmament
hide2kano
0
140
XML and Related Technologies - Lecture 7 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
HCI and Interaction Design - Lecture 2 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.4k
RSJ2025 ランチョンセミナー 一歩ずつ世界へ:学生・若手研究者のための等身大の国際化の始め方
t_inamura
0
340
KBS新事業創造体験2025_科目説明会
yasuchikawakayama
0
140
Master of Applied Science & Engineering: Computer Science & Master of Science in Applied Informatics: Artificial Intelligence and Data Science
signer
PRO
0
860
コマンドラインを見直そう(1995年からタイムリープ)
sapi_kawahara
0
540
Présentation_1ère_Spé_2025.pdf
bernhardsvt
0
450
沖ハック~のみぞうさんとハッキングチャレンジ☆~
nomizone
1
510
Security, Privacy and Trust - Lecture 11 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
核軍備撤廃に向けた次の大きな一歩─核兵器を先には使わないと核保有国が約束すること
hide2kano
0
160
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Agile that works and the tools we love
rasmusluckow
331
21k
GraphQLとの向き合い方2022年版
quramy
50
14k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.8k
Transcript
一鍵開服,創建你的虛擬世界 2025/03/18 by YuKai
01 為什麼你該學 Docker 02 如何使用 Docker 03 一個 Docker 不夠用,那就多用幾個
(docker compose) Outline 04 給我更多更多的 container
架服務會遇到的難題 我這跑得好好的 肯定是你的電腦有問題
為什麼你該學 Docker? 01
• 容器化技術(container) • 不需要 HyperVisor,直接使用 host machine 效能 • 以
Golang 語言開發 What is Docker
• 輕量級的虛擬化技術 • 將應用程式、環境一起打包 • 隔離彼此的應用程式,不受其他應用程式影響 容器化技術
• 輕鬆在任何環境部屬應用程式 ◦ Game server(Ex: Minecraft server) ◦ Web Application(Ex:
Frontend、Backend) ◦ Tools ◦ AI Agent(MCP) Docker 能幹嘛
• Registry • Image • Container Docker Architecture
Registry、Repository、Image Registry Repository1 Image-name:tag1 Image-name:tag2 Image-name:tag3 Repository2 Image-name:tag1 Image-name:tag2 Image-name:tag3
• Registry 又分 Public 和 Private ◦ Docker Hub ◦
GitLab container registry ◦ Google Container Registry(gcr.io) Registry、Repository、Image
• Image 是一個 readonly 的模板,包含了必要的 os、application、package • Container 按照 image
建立而成,container 彼 此是獨立的,只要刪掉 container 就可以移除上面 的所有資料 Image、Container
Virtual Machine vs. Container VM Container 啟動時間 基本上都要幾分鐘 快速 容量
大(GB) 小(MB) 效能 較慢 較快 Host machine 可支撐的數量 數十個 數百個 複製環境 較慢 較快
• Play with docker • Docker Install 教學 Docker Install、Online
Docker
如何使用 Docker 02 How to TCPdump effectively in Docker
• 拉取 Image • 建立 container • 啟用/停止 container •
列出 container / image • 刪除 container / image Docker 常見指令
• 拉取 image,預設 latest • 拉取特定 tag 的 image 常見指令
– 拉取 Image docker pull [image name] docker pull [image name]:[tag]
常見指令 – 建立 container docker run –d --name [container name]
[image name] [other command] -d:背景執行 -it:提供交互模式 --name:定義容器名稱 -e:加入環境變數 -p:綁定 host 和 container 的 port --rm:當 container 不使用時就刪除
• 啟用 container • 停止 container 常見指令 – 啟用/停止 container
docker start [container name] docker stop [container name]
• 列出已啟用的 container • 列出所有 container • 列出所有 image 常見指令
– 列出 container/image docker ps docker ps -a docker images
• 刪除沒有啟用的 container • 刪除未使用的 image 常見指令 – 刪除 container/image
docker rm [container name] docker rmi [image name]
• 進入 container 查看 • 查看 image/container 詳細資訊 一些實用的指令 docker
exec –it [container name] bash docker inspect [image name]/[container name] docker run –it --name [container name] [image name] bash
• 列出 container log • 列出 image history 一些實用的指令 docker
logs [container name] docker logs [container name] -f docker history [image name]
• 拉取 Ubuntu Image 並輸出 Hello World • 拉取一個你有興趣的 Image
並將其建立出一個 container Lab 1 docker pull ubuntu:latest docker run --name ub-1 ubuntu echo hello wolrd
簡單架一個 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)
建立一個 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"]
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 鏡像差異
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
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 底下
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 時)
補充:生成 requirements 這樣就可以將需要的套件列入 requirements.txt pip freeze > requirements.txt
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
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 時)
• 建立 image • 刪除 none image 常見指令 docker build
-t [image name] . docker image prune
使用 Dockerfile 建立簡單的 Application Lab2 docker build -t [image name]
. docker run –d --name [container name] –p 5000:5000 [image name]
Docker Compose 一個 Docker 不夠用,那就多用幾個 03
• 幫助定義、運行、管理多個 docker • 使用 yaml 配置 • 保持整套系統的一致性 What
is Docker Compose?
• 建立一個 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
flask: build: . ports: - "5000:5000" environment: - FLASK_ENV=development 第一個
application(flask) Docker Compose 用同個目錄下的 Dockerfile 建構 綁定 5000 port 設定環境變數
第二個 application(tunnel) Docker Compose tunnel: image: cloudflare/cloudflared command: --url http://flask:5000
depends_on: - flask 使用哪個 image 等待 flask 建立好 在 container 執行的指令
記得先切到 compose.yml 同個目錄下 • 根據 compose.yml 建立所有 image 和 container
• 將 compose.yml 的 container 移除 常用指令 – 建立/啟用/移除 docker-compose build up -d docker-compose down
嘗試用 Docker compose 建立先前的 Service Lab3 docker-compose build up -d
給我更多更多的 Container 04
Volume:避免資料在容器刪除後被移除 More Docker Usage Host Machine Container /my_database/sqlite.db /certs/certificate.crt /my_db
/my_certs
Network:建立容器間溝通 • bridge:預設模式 More Docker Usage 圖源
Network:建立容器間溝通 • overlay:能使不同 docker daemon 通信 More Docker Usage 圖源
Network:建立容器間溝通 • macvlan ◦ 能使用 physical address More Docker Usage
圖源
Network:建立容器間溝通 • host ◦ 會使得 Network 隔離效果消失 ◦ 安全風險(延伸資料:docker escape)
More Docker Usage
Docker Swarm • 在多台實體機器上執行 Container,形 成一個叢集(Cluster)的一個工具 Kubernets(K8s) • 用於自動部署、擴充和管理「容器化應用 程式」的開源系統
More Container
• Dockage • Portainer • Docker Desktop I need Some
GUI
None