Docker 基礎介紹與實戰
-
Upload
bo-yi-wu -
Category
Technology
-
view
7.307 -
download
0
Transcript of Docker 基礎介紹與實戰
![Page 1: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/1.jpg)
1
Docker 基礎介紹與實戰Bo-Yi Wu
2016.04.21
![Page 2: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/2.jpg)
2
關於我• https://blog.wu-boy.com• https://github.com/appleboy• https://www.facebook.com/appleboy46
![Page 3: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/3.jpg)
3
為什麼需要使用 Doecker
![Page 4: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/4.jpg)
4
Why• 新人環境建置 ( 蜜月期? )• 多種環境建置及版本測試 – Node 4.x, 5.x ..– PHP 5.6, 5.7 ..–Wordpress, Discourse, Gogs, Gitlab ….
![Page 5: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/5.jpg)
5
多人共用一台 Build Server
![Page 6: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/6.jpg)
6
問題是 …• 宅宅 A: 那個誰誰,可以先停掉你的程序嗎?• 宅宅 B: CPU 跟 Ram 都爆了啦 … .• 宅宅 C: 編譯個 Router Code 要半小時啊
… .• 宅宅 D: 趁半夜沒人的時候再來用 ( 加班
狂? )
![Page 7: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/7.jpg)
7
![Page 8: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/8.jpg)
8
軟體工程師• 做事效率低落• 每天產能有限• 浪費很多時間在 Build Code 上• 如果 Server 壞了,是全 Team 放假嗎?• 週末或平日晚上頻加班 …
![Page 9: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/9.jpg)
9
聊聊 Web 前後端開發環境
![Page 10: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/10.jpg)
10
前端 vs 後端
API Server
前端 Team 後端 Team
Deploy
Deploy
![Page 11: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/11.jpg)
11
如果 API Server 掛掉前端團隊全部都在等
後端工程師修復
![Page 12: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/12.jpg)
12
這時候就需要 Docker 了
![Page 13: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/13.jpg)
13
解決• 工程師不再抱怨 Build Server 慢– 不會再找我麻煩了 ( 誤 )
• 前後端各自獨立作業– 前端各自有獨立開發環境
• 要測試 Service (Wordpress, Jenkins, Gogs)– 不需要安裝任何 redis, mysql, php 等環境
![Page 14: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/14.jpg)
14
What’s Docker?
![Page 15: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/15.jpg)
15
Docker vs. Virtual Machine
![Page 16: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/16.jpg)
16
基本觀念• Docker 映像檔 (Images)• Docker 容器 (Container)• Docker 倉庫 (Repository)
![Page 17: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/17.jpg)
17
Docker Images
![Page 18: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/18.jpg)
Docker container
• 從 images 建立新的 container• 每個容器互相隔離,保證安全• 可寫可讀 (Read, Write)
18
![Page 19: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/19.jpg)
Docker RepositoryDocker 倉庫概念跟 Git 類似
你可以想成類似 Github 託管服務
19
![Page 20: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/20.jpg)
20
Image Image
Container
Container
Docker Registry
Pull
Run Commit
Push
![Page 21: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/21.jpg)
21
Image
Docker Registry
Pull docker pull ubuntu
![Page 22: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/22.jpg)
22
Image
Container
Docker Registry
Pull
Run docker run –t –i ubuntu /bin/bash
![Page 23: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/23.jpg)
23
Image
Container
Container
Docker Registry
Pull
Run
apt-get update
![Page 24: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/24.jpg)
24
Image Image
Container
Container
Docker Registry
Pull
Run Commit
docker commit
![Page 25: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/25.jpg)
25
Image Image
Container
Container
Docker Registry
Pull
Run Commit
Pushdocker push
![Page 26: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/26.jpg)
26
Docker 安裝Mac OS X: https://goo.gl/05XMnB
Linux: https://goo.gl/wRpzlT
![Page 28: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/28.jpg)
28
Docker images
• docker pull ubuntu:14.04– ubuntu: image name– 14.04: tag name, default is “latest”– host: registry.hub.docker.com
![Page 29: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/29.jpg)
列出本機端 imagesdocker images
29
![Page 30: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/30.jpg)
30
![Page 31: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/31.jpg)
31
進入容器內 ( 秒入 )docker run –ti ubuntu:14.04 /bin/bash
root@9cadb3b3e718:/#
![Page 32: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/32.jpg)
32
可以做什麼?做你想做的任何事情
Install nginx, php, mysql ….
![Page 33: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/33.jpg)
33
儲存目前的工作狀態docker commit –m ‘test’ –a ‘Bo-Yi Wu’
9cadb3b3e718 appleboy/test:1.0
![Page 34: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/34.jpg)
34
從上次 commit 進入 bash
docker run –t –i appleboy/test:1.0 /bin/bash
![Page 35: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/35.jpg)
玩壞了沒關係docker run –ti ubuntu:14.04 /bin/bash
35
![Page 36: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/36.jpg)
Demo
36
![Page 37: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/37.jpg)
37
Ubuntu imagesapt-get updateNginx Apache
PHP 5.3
PHP 5.4
PHP 5.6
PHP 5.7
![Page 38: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/38.jpg)
38
Ubuntu imagesapt-get update
docker pull ubuntu:14.04docker run –ti ubuntu:14.04 /bin/bash$ apt-get update && apt-get –y upgrade$ exitdocker commit –m “test” xxxxx test/base:1.0
![Page 39: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/39.jpg)
39
Ubuntu imagesapt-get updateNginx
docker run –ti test/base:1.0 /bin/bash$ install nginx …… $ exitdocker commit –m “test” xxxxx test/nginx:1.0
![Page 40: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/40.jpg)
40
Ubuntu imagesapt-get update
docker run –ti test/base:1.0 /bin/bash$ install apache…… $ exitdocker commit –m “test” xxxxx test/apache:1.0
Apache
![Page 41: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/41.jpg)
41Ubuntu imagesapt-get updateNginx
docker run –ti test/nginx:1.0 /bin/bash$ install php5.3 …… docker commit –m “php” xx test/php:5.3
PHP 5.3
![Page 42: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/42.jpg)
練習前端建立 node 4 及 node 5 環境
後端建立 php6 及 php7 環境驗證 images 是否有該執行檔
42
![Page 43: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/43.jpg)
有沒有覺得打指令很累有沒有一個指令就把 images 建立好?
43
![Page 44: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/44.jpg)
44
這時候你就需要 Dockerfile$ touch Dockerfile
![Page 45: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/45.jpg)
45
![Page 46: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/46.jpg)
46
Dockerfile好理解,易於管理,還可以版控
![Page 47: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/47.jpg)
47
透過 Dockerfile 建立 local images
docker build –t myimage -f Dockerfile .
![Page 48: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/48.jpg)
48
啟動自製 images
![Page 49: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/49.jpg)
49
Ubuntu images
eth0 8000 port
HostDocker bridge
eth0 5467 port
Docker run –d –p 8000 hello
![Page 50: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/50.jpg)
50
Ubuntu images
eth0 8000 port
Hosteth0 80 port
Docker run –d –p 80:8000 hello
Docker bridge
![Page 51: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/51.jpg)
51
Helloeth0 8000 port
HostDocker bridge
eth0 80 port
Docker run –d ––name hello –p 80:8000 hello
![Page 52: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/52.jpg)
52
該如何把目錄 mount 到 Container 內呢?
![Page 53: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/53.jpg)
53
Helloeth0 8000 port
HostDocker bridge
eth0 80 port
Docker run –d –v /opt/test:/home/test ––name hello –p 80:8000 hello
/opt/test
/home/test
![Page 54: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/54.jpg)
54
如何看 Docker logdocker ps
docker logs name
![Page 55: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/55.jpg)
55
如何進入容器docker ps
docker exec –ti name /bin/bash
![Page 56: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/56.jpg)
56
停止 , 啟動容器docker ps
docker stop namedocker start name
docker restart name
![Page 57: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/57.jpg)
57
連接多個服務MySQL, Redis ….
![Page 58: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/58.jpg)
58
Ubuntueth0 8000 port
HostDocker bridge
eth0 80 port
Docker run –d ––link redis:redis –p 80:8000 hello
![Page 59: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/59.jpg)
59
啟動 Mysql, Redis
• docker run –d ––name my-db –e MYSQL_ROOT_PASSWORD=1234 mysql
• docker run –d ––name my-redis redis
![Page 60: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/60.jpg)
60
連接 Mysql 及 RedisDocker run –ti ––link my-db:db \
––link my-redis:redis \ubuntu /bin/bash
![Page 61: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/61.jpg)
61
建立 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:80wordpress
![Page 62: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/62.jpg)
62
如果有 5 個以上服務需要連接呢這時候你就需要 docker-compose.yml
![Page 63: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/63.jpg)
63
wordpress: image: wordpress links: - db:mysql ports: - 8080:80db: image: mariadb environment: MYSQL_ROOT_PASSWORD: test
![Page 64: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/64.jpg)
64
docker-compose 啟動docker-compose up –d
create and start containers
![Page 65: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/65.jpg)
65
docker-compose 列表docker-compose ps
![Page 66: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/66.jpg)
66
用 docker ps 也可以
![Page 67: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/67.jpg)
67
docker-compose
• Docker-compose stop ( 停止服務 )• Docker-compose start ( 啟動服務 )• Docker-compose rm ( 移除全部
container)
![Page 68: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/68.jpg)
68
平行擴展 DB 架構docker-compose scale db=5
![Page 69: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/69.jpg)
69
用 Docker 來測試
![Page 70: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/70.jpg)
70
事前準備• 準備相關環境– Node 4– Node 5– PHP5– PHP6– PHP7
Images
Dockerfile Yoyo/node:4Yoyo/node:5Yoyo/php:6Yoyo/php:7
![Page 71: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/71.jpg)
71
Testing node4
Testing node5
Testing php7
Testing php6
![Page 72: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/72.jpg)
72
Docker run –rm \ –v folder1:folder2 \ --link mysql:mysql \ --workdir=/app \ -e DEV=Testing\ yoyo:node5 \/bin/bash –c “npm test”
![Page 74: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/74.jpg)
74
![Page 75: Docker 基礎介紹與實戰](https://reader035.fdocuments.net/reader035/viewer/2022062219/586f75e21a28ab10258b6227/html5/thumbnails/75.jpg)
75
Any Question?