docker 基礎介紹與實戰

75
Docker 基基基基基基基 Bo-Yi Wu 2016.04.21 1

Upload: bo-yi-wu

Post on 16-Apr-2017

7.304 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Docker 基礎介紹與實戰

1

Docker 基礎介紹與實戰Bo-Yi Wu

2016.04.21

Page 2: Docker 基礎介紹與實戰

2

關於我• https://blog.wu-boy.com• https://github.com/appleboy• https://www.facebook.com/appleboy46

Page 3: Docker 基礎介紹與實戰

3

為什麼需要使用 Doecker

Page 4: Docker 基礎介紹與實戰

4

Why• 新人環境建置 ( 蜜月期? )• 多種環境建置及版本測試 – Node 4.x, 5.x ..– PHP 5.6, 5.7 ..–Wordpress, Discourse, Gogs, Gitlab ….

Page 5: Docker 基礎介紹與實戰

5

多人共用一台 Build Server

Page 6: Docker 基礎介紹與實戰

6

問題是 …• 宅宅 A: 那個誰誰,可以先停掉你的程序嗎?• 宅宅 B: CPU 跟 Ram 都爆了啦 … .• 宅宅 C: 編譯個 Router Code 要半小時啊

… .• 宅宅 D: 趁半夜沒人的時候再來用 ( 加班

狂? )

Page 7: Docker 基礎介紹與實戰

7

Page 8: Docker 基礎介紹與實戰

8

軟體工程師• 做事效率低落• 每天產能有限• 浪費很多時間在 Build Code 上• 如果 Server 壞了,是全 Team 放假嗎?• 週末或平日晚上頻加班 …

Page 9: Docker 基礎介紹與實戰

9

聊聊 Web 前後端開發環境

Page 10: Docker 基礎介紹與實戰

10

前端 vs 後端

API Server

前端 Team 後端 Team

Deploy

Deploy

Page 11: Docker 基礎介紹與實戰

11

如果 API Server 掛掉前端團隊全部都在等

後端工程師修復

Page 12: Docker 基礎介紹與實戰

12

這時候就需要 Docker 了

Page 13: Docker 基礎介紹與實戰

13

解決• 工程師不再抱怨 Build Server 慢– 不會再找我麻煩了 ( 誤 )

• 前後端各自獨立作業– 前端各自有獨立開發環境

• 要測試 Service (Wordpress, Jenkins, Gogs)– 不需要安裝任何 redis, mysql, php 等環境

Page 14: Docker 基礎介紹與實戰

14

What’s Docker?

Page 15: Docker 基礎介紹與實戰

15

Docker vs. Virtual Machine

Page 16: Docker 基礎介紹與實戰

16

基本觀念• Docker 映像檔 (Images)• Docker 容器 (Container)• Docker 倉庫 (Repository)

Page 17: Docker 基礎介紹與實戰

17

Docker Images

Page 18: Docker 基礎介紹與實戰

Docker container

• 從 images 建立新的 container• 每個容器互相隔離,保證安全• 可寫可讀 (Read, Write)

18

Page 19: Docker 基礎介紹與實戰

Docker RepositoryDocker 倉庫概念跟 Git 類似

你可以想成類似 Github 託管服務

19

Page 20: Docker 基礎介紹與實戰

20

Image Image

Container

Container

Docker Registry

Pull

Run Commit

Push

Page 21: Docker 基礎介紹與實戰

21

Image

Docker Registry

Pull docker pull ubuntu

Page 22: Docker 基礎介紹與實戰

22

Image

Container

Docker Registry

Pull

Run docker run –t –i ubuntu /bin/bash

Page 23: Docker 基礎介紹與實戰

23

Image

Container

Container

Docker Registry

Pull

Run

apt-get update

Page 24: Docker 基礎介紹與實戰

24

Image Image

Container

Container

Docker Registry

Pull

Run Commit

docker commit

Page 25: Docker 基礎介紹與實戰

25

Image Image

Container

Container

Docker Registry

Pull

Run Commit

Pushdocker push

Page 26: Docker 基礎介紹與實戰

26

Docker 安裝Mac OS X: https://goo.gl/05XMnB

Linux: https://goo.gl/wRpzlT

Page 27: Docker 基礎介紹與實戰

Docker imageshttps://hub.docker.com/

請先申請帳號密碼

27

Page 28: Docker 基礎介紹與實戰

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 基礎介紹與實戰

列出本機端 imagesdocker images

29

Page 30: Docker 基礎介紹與實戰

30

Page 31: Docker 基礎介紹與實戰

31

進入容器內 ( 秒入 )docker run –ti ubuntu:14.04 /bin/bash

root@9cadb3b3e718:/#

Page 32: Docker 基礎介紹與實戰

32

可以做什麼?做你想做的任何事情

Install nginx, php, mysql ….

Page 33: Docker 基礎介紹與實戰

33

儲存目前的工作狀態docker commit –m ‘test’ –a ‘Bo-Yi Wu’

9cadb3b3e718 appleboy/test:1.0

Page 34: Docker 基礎介紹與實戰

34

從上次 commit 進入 bash

docker run –t –i appleboy/test:1.0 /bin/bash

Page 35: Docker 基礎介紹與實戰

玩壞了沒關係docker run –ti ubuntu:14.04 /bin/bash

35

Page 36: Docker 基礎介紹與實戰

Demo

36

Page 37: Docker 基礎介紹與實戰

37

Ubuntu imagesapt-get updateNginx Apache

PHP 5.3

PHP 5.4

PHP 5.6

PHP 5.7

Page 38: Docker 基礎介紹與實戰

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 基礎介紹與實戰

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 基礎介紹與實戰

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 基礎介紹與實戰

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 基礎介紹與實戰

練習前端建立 node 4 及 node 5 環境

後端建立 php6 及 php7 環境驗證 images 是否有該執行檔

42

Page 43: Docker 基礎介紹與實戰

有沒有覺得打指令很累有沒有一個指令就把 images 建立好?

43

Page 44: Docker 基礎介紹與實戰

44

這時候你就需要 Dockerfile$ touch Dockerfile

Page 45: Docker 基礎介紹與實戰

45

Page 46: Docker 基礎介紹與實戰

46

Dockerfile好理解,易於管理,還可以版控

Page 47: Docker 基礎介紹與實戰

47

透過 Dockerfile 建立 local images

docker build –t myimage -f Dockerfile .

Page 48: Docker 基礎介紹與實戰

48

啟動自製 images

Page 49: Docker 基礎介紹與實戰

49

Ubuntu images

eth0 8000 port

HostDocker bridge

eth0 5467 port

Docker run –d –p 8000 hello

Page 50: Docker 基礎介紹與實戰

50

Ubuntu images

eth0 8000 port

Hosteth0 80 port

Docker run –d –p 80:8000 hello

Docker bridge

Page 51: Docker 基礎介紹與實戰

51

Helloeth0 8000 port

HostDocker bridge

eth0 80 port

Docker run –d ––name hello –p 80:8000 hello

Page 52: Docker 基礎介紹與實戰

52

該如何把目錄 mount 到 Container 內呢?

Page 53: Docker 基礎介紹與實戰

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 基礎介紹與實戰

54

如何看 Docker logdocker ps

docker logs name

Page 55: Docker 基礎介紹與實戰

55

如何進入容器docker ps

docker exec –ti name /bin/bash

Page 56: Docker 基礎介紹與實戰

56

停止 , 啟動容器docker ps

docker stop namedocker start name

docker restart name

Page 57: Docker 基礎介紹與實戰

57

連接多個服務MySQL, Redis ….

Page 58: Docker 基礎介紹與實戰

58

Ubuntueth0 8000 port

HostDocker bridge

eth0 80 port

Docker run –d ––link redis:redis –p 80:8000 hello

Page 59: Docker 基礎介紹與實戰

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 基礎介紹與實戰

60

連接 Mysql 及 RedisDocker run –ti ––link my-db:db \

––link my-redis:redis \ubuntu /bin/bash

Page 61: Docker 基礎介紹與實戰

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 基礎介紹與實戰

62

如果有 5 個以上服務需要連接呢這時候你就需要 docker-compose.yml

Page 63: Docker 基礎介紹與實戰

63

wordpress: image: wordpress links: - db:mysql ports: - 8080:80db: image: mariadb environment: MYSQL_ROOT_PASSWORD: test

Page 64: Docker 基礎介紹與實戰

64

docker-compose 啟動docker-compose up –d

create and start containers

Page 65: Docker 基礎介紹與實戰

65

docker-compose 列表docker-compose ps

Page 66: Docker 基礎介紹與實戰

66

用 docker ps 也可以

Page 67: Docker 基礎介紹與實戰

67

docker-compose

• Docker-compose stop ( 停止服務 )• Docker-compose start ( 啟動服務 )• Docker-compose rm ( 移除全部

container)

Page 68: Docker 基礎介紹與實戰

68

平行擴展 DB 架構docker-compose scale db=5

Page 69: Docker 基礎介紹與實戰

69

用 Docker 來測試

Page 70: Docker 基礎介紹與實戰

70

事前準備• 準備相關環境– Node 4– Node 5– PHP5– PHP6– PHP7

Images

Dockerfile Yoyo/node:4Yoyo/node:5Yoyo/php:6Yoyo/php:7

Page 71: Docker 基礎介紹與實戰

71

Testing node4

Testing node5

Testing php7

Testing php6

Page 72: Docker 基礎介紹與實戰

72

Docker run –rm \ –v folder1:folder2 \ --link mysql:mysql \ --workdir=/app \ -e DEV=Testing\ yoyo:node5 \/bin/bash –c “npm test”

Page 73: Docker 基礎介紹與實戰

73

Best Practices Cheat Sheethttps://goo.gl/4CgNkd

Page 74: Docker 基礎介紹與實戰

74

Page 75: Docker 基礎介紹與實戰

75

Any Question?