Successfully reported this slideshow.
Your SlideShare is downloading. ×

Docker 基礎介紹與實戰

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Docker Networking Deep Dive
Docker Networking Deep Dive
Loading in …3
×

Check these out next

1 of 75 Ad

More Related Content

Slideshows for you (20)

Advertisement

Similar to Docker 基礎介紹與實戰 (20)

More from Bo-Yi Wu (20)

Advertisement

Recently uploaded (20)

Docker 基礎介紹與實戰

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

Editor's Notes

  • 傳統 VM 是在OS外來建立虛擬環境,透過Hypervisor在Host中模擬一套完整的硬體環境資源,目標是建立一個可以用來執行整套作業系統的沙箱獨立執行環境,所以VM做出來的是一個一個可以獨立安裝 OS 的「盒子」。
    而 Container 是在OS內的核心系統層來打造虛擬執行環境,透過共用Host OS的作法,取代一個一個Guest OS的功用。
    Container也因此被稱為是OS層的虛擬化技術。

    Container 很輕、很快,啟動速度是秒級,可以大量節約開發、測試與部署的時間。

×