Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker 基礎介紹與實戰
Search
Bo-Yi Wu
April 22, 2016
Technology
0
1.1k
Docker 基礎介紹與實戰
blog:
https://blog.wu-boy.com/2016/04/introduction-to-docker/
Bo-Yi Wu
April 22, 2016
Tweet
Share
More Decks by Bo-Yi Wu
See All by Bo-Yi Wu
What’s MCP && Authorization?
appleboy
0
61
Building a Unified API Gateway for Secure and Scalable Cross-Cloud AI Service
appleboy
0
1.3k
Building MCP (Model Context Protocol) with Golang
appleboy
0
2.5k
如何設計一套具備 Container 容器化技術的 CI/CD 平台?
appleboy
0
1.5k
生成式 AI CodeGPT 開發經驗談
appleboy
0
3.2k
打造 MLOps 平台 改善 AI 模型開發流程
appleboy
0
2.3k
自動化監控伺服器工具 - Gatus
appleboy
0
4.1k
Drone CI/CD 自動化測試及部署
appleboy
1
520
初探 Infrastructure as Code 工具 Pulumi
appleboy
2
3.7k
Other Decks in Technology
See All in Technology
2025-10-09_プロジェクトマネージャーAIチャンス
taukami
0
140
GoでもGUIアプリを作りたい!
kworkdev
PRO
0
140
AgentCon Accra: Ctrl + Alt + Assist: AI Agents Edition
bethany
0
110
ソースを読むプロセスの例
sat
PRO
7
2.8k
ComposeではないコードをCompose化する case ビズリーチ / DroidKaigi 2025 koyasai
visional_engineering_and_design
0
110
Geospatialの世界最前線を探る [2025年版]
dayjournal
1
220
エンタメとAIのための3Dパラレルワールド構築(GPU UNITE 2025 特別講演)
pfn
PRO
0
330
アイテムレビュー機能導入からの学びと改善
zozotech
PRO
0
160
Adminaで実現するISMS/SOC2運用の効率化 〜 アカウント管理編 〜
shonansurvivors
4
450
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
43k
Simplifying Cloud Native app testing across environments with Dapr and Microcks
salaboy
0
160
プロダクトのコードから見るGoによるデザインパターンの実践 #go_night_talk
bengo4com
1
2.5k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
980
Producing Creativity
orderedlist
PRO
347
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Music & Morning Musume
bryan
46
6.8k
Statistics for Hackers
jakevdp
799
220k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Building Applications with DynamoDB
mza
96
6.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Making Projects Easy
brettharned
120
6.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Transcript
Docker 基礎介紹與實戰 Bo-Yi Wu 2016.04.21 1
關於我 • https://blog.wu-boy.com • https://github.com/appleboy • https://www.facebook.com/appleboy46 2
為什麼需要使用 Doecker 3
Why • 新人環境建置 (蜜月期?) • 多種環境建置及版本測試 – Node 4.x, 5.x ..
– PHP 5.6, 5.7 .. – Wordpress, Discourse, Gogs, Gitlab …. 4
多人共用一台Build Server 5
問題是 … • 宅宅 A: 那個誰誰,可以先停掉你的程序嗎? • 宅宅 B:
CPU 跟 Ram 都爆了啦 …. • 宅宅 C: 編譯個 Router Code 要半小時啊 …. • 宅宅 D: 趁半夜沒人的時候再來用 (加班狂?) 6
7
軟體工程師 • 做事效率低落 • 每天產能有限 • 浪費很多時間在 Build
Code 上 • 如果 Server 壞了,是全 Team 放假嗎? • 週末或平日晚上頻加班 … 8
聊聊Web前後端開發環境 9
前端 vs 後端 API Server 前端 Team 後端 Team Deploy
Deploy 10
如果 API Server 掛掉 前端團隊全部都在等 後端工程師修復 11
這時候就需要 Docker 了 12
解決 • 工程師不再抱怨 Build Server 慢 – 不會再找我麻煩了 (誤)
• 前後端各自獨立作業 – 前端各自有獨立開發環境 • 要測試 Service (Wordpress, Jenkins, Gogs) – 不需要安裝任何 redis, mysql, php 等環境 13
What’s Docker? 14
Docker vs. Virtual Machine 15
基本觀念 • Docker 映像檔 (Images) • Docker 容器 (Container)
• Docker 倉庫 (Repository) 16
Docker Images 17
Docker container • 從 images 建立新的 container • 每個容器互相隔離,保證安全 •
可寫可讀 (Read, Write) 18
Docker Repository Docker 倉庫概念跟 Git 類似 你可以想成類似 Github 託管服務 19
Image Image Container Container Docker Registry Pull Run Commit Push
20
Image Docker Registry Pull docker pull ubuntu 21
Image Container Docker Registry Pull Run docker run –t –i
ubuntu /bin/bash 22
Image Container Container Docker Registry Pull Run apt-get update 23
Image Image Container Container Docker Registry Pull Run Commit docker
commit 24
Image Image Container Container Docker Registry Pull Run Commit Push
docker push 25
Docker 安裝 Mac OS X: https://goo.gl/05XMnB Linux: https://goo.gl/wRpzlT 26
Docker images https://hub.docker.com/ 請先申請帳號密碼 27
Docker images • docker pull ubuntu:14.04 – ubuntu: image name – 14.04:
tag name, default is “latest” – host: registry.hub.docker.com 28
列出本機端 images docker images 29
30
進入容器內 (秒入) docker run –ti ubuntu:14.04 /bin/bash root@9cadb3b3e718:/# 31
可以做什麼? 做你想做的任何事情 Install nginx, php, mysql …. 32
儲存目前的工作狀態 docker commit –m ‘test’ –a ‘Bo-Yi Wu’ 9cadb3b3e718
appleboy/test:1.0 33
從上次 commit 進入 bash docker run –t –i appleboy/test:1.0
/bin/bash 34
玩壞了沒關係 docker run –ti ubuntu:14.04 /bin/bash 35
Demo 36
Ubuntu images apt-get update Nginx Apache PHP 5.3 PHP 5.4
PHP 5.6 PHP 5.7 37
Ubuntu images apt-get update docker pull ubuntu:14.04 docker run –ti
ubuntu:14.04 /bin/bash $ apt-get update && apt-get –y upgrade $ exit docker commit –m “test” xxxxx test/base:1.0 38
Ubuntu images apt-get update Nginx docker run –ti test/base:1.0 /bin/bash
$ install nginx …… $ exit docker commit –m “test” xxxxx test/nginx:1.0 39
Ubuntu images apt-get update docker run –ti test/base:1.0 /bin/bash $
install apache…… $ exit docker commit –m “test” xxxxx test/apache:1.0 Apache 40
Ubuntu images apt-get update Nginx docker run –ti test/nginx:1.0 /bin/bash
$ install php5.3 …… docker commit –m “php” xx test/php:5.3 PHP 5.3 41
練習 前端建立 node 4 及 node 5 環境 後端建立 php6
及 php7 環境 驗證 images 是否有該執行檔 42
有沒有覺得打指令很累 有沒有一個指令就把 images 建立好? 43
這時候你就需要 Dockerfile $ touch Dockerfile 44
45
Dockerfile 好理解,易於管理,還可以版控 46
透過 Dockerfile 建立 local images docker build –t myimage -f
Dockerfile . 47
啟動自製 images 48
Ubuntu images eth0 8000 port Host Docker bridge eth0 5467
port Docker run –d –p 8000 hello 49
Ubuntu images eth0 8000 port Host eth0 80 port Docker
run –d –p 80:8000 hello Docker bridge 50
Hello eth0 8000 port Host Docker bridge eth0 80 port
Docker run –d ––name hello –p 80:8000 hello 51
該如何把目錄 mount 到 Container 內呢? 52
Hello eth0 8000 port Host Docker bridge eth0 80 port
Docker run –d –v /opt/test:/home/test ––name hello –p 80:8000 hello /opt/test /home/test 53
如何看 Docker log docker ps docker logs name 54
如何進入容器 docker ps docker exec –ti name /bin/bash 55
停止,啟動容器 docker ps docker stop name docker start name
docker restart name 56
連接多個服務 MySQL, Redis …. 57
Ubuntu eth0 8000 port Host Docker bridge eth0 80 port
Docker run –d ––link redis:redis –p 80:8000 hello 58
啟動 Mysql, Redis • docker run –d ––name my-db –e
MYSQL_ROOT_PASSWORD=1234 mysql • docker run –d ––name my-redis redis 59
連接 Mysql 及 Redis Docker run –ti ––link my-db:db \
––link my-redis:redis \ ubuntu /bin/bash 60
建立 Wordpress • docker run –d ––name my-db \ –e
MYSQL_ROOT_PASSWORD=1234 \ mysql • docker run ––name my-wp \ --link my-db:mysql -d \ -p 8080:80 wordpress 61
如果有5個以上服務需要連接呢 這時候你就需要 docker-compose.yml 62
wordpress: image: wordpress links: - db:mysql ports: - 8080:80 db:
image: mariadb environment: MYSQL_ROOT_PASSWORD: test 63
docker-compose 啟動 docker-compose up –d create and start containers 64
docker-compose 列表 docker-compose ps 65
用 docker ps 也可以 66
docker-compose • Docker-compose stop (停止服務) • Docker-compose start (啟動服務) •
Docker-compose rm (移除全部 container) 67
平行擴展 DB 架構 docker-compose scale db=5 68
用 Docker 來測試 69
事前準備 • 準備相關環境 – Node 4 – Node 5 – PHP5 – PHP6
– PHP7 Images Dockerfile Yoyo/node:4 Yoyo/node:5 Yoyo/php:6 Yoyo/php:7 70
Testing node4 Testing node5 Testing php7 Testing php6 71
Docker run –rm \ –v folder1:folder2 \ --link mysql:mysql \
--workdir=/app \ -e DEV=Testing\ yoyo:node5 \ /bin/bash –c “npm test” 72
Best Practices Cheat Sheet https://goo.gl/4CgNkd 73
74
Any Question? 75