Upgrade to Pro — share decks privately, control downloads, hide ads and more …

讓軟體開發與應用更自由 - 使用 Docker 容器技術

讓軟體開發與應用更自由 - 使用 Docker 容器技術

20170625 台中自由軟體愛好者社群
#Docker
#LaraDock

Yu-Lung Shao

June 25, 2017
Tweet

Other Decks in Programming

Transcript

  1. ⼤大綱 • Docker 基本概念念 • PHP 開發者的環境演變 • 會介紹 LaraDock

    • 命令列列打字好累有沒有更更⽅方便便的管理理⼯工具 • Docker 使⽤用空間⼤大掃除
  2. 什什麼是 Docker? • Software Container Platform • Application delivery technology

    • Not VMs • 比較像是隔離環境與共享資源⽽而不是模擬 • 獨棟房屋 vs 多住⼾戶公寓 Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud.
  3. Why docker • Developer • 可以解決只在我的電腦可以正常運作的囧況 • 多⼈人協同開發讓開發環境統⼀一 • 新成員快速建置環境

    • 經常要切換新舊環境版本 • Operator (System Admin) • build, ship, test, and deploy apps ⾃自動化 • Enterprise • DevOps, agile • cloud-ready, optimal costs
  4. Docker Editions • Docker CE (Community Edition) • Stable •

    Edge • Docker EE (Enterprise Edition) • Basic • Standard • Advanced • Moby ? • https://mobyproject.org/
  5. Support Platform • Linux • apt-get install docker.io • macOS

    • 舊版⽤用 boot2docker • Windows • 舊版⽤用 boot2docker • Win10 x64
  6. • 三個基本要素 • Image 映像檔 • Container 容器 • Registry

    (Repostory 倉庫) • 兩兩個基本必要 • 網路路 • ⾜足夠的硬碟空間
  7. 先來來感覺⼀一下 • 沒有環境的可先使⽤用線上服務 http://play-with-docker.com/ • docker version • docker info

    • docker ps • docker images • docker pull hello-world • docker run hello-world • docker run -it ubuntu bash
  8. Dockerfile commands • 命令有效範圍區分為建構時期與啟動容器時期 Build Both
 (Build/Run) Run FROM MAINTAINER

    COPY ADD RUN ONBUILD .dockerignore WORKDIR USER CMD ENV EXPOSE VOLUME ENTRYPOINT https://docs.docker.com/engine/reference/builder/ 第⼀一個指令必須為 ‘FROM’
  9. Dockerfile 設計原則 • 先求正確建構 • ⼀一個指令⼀一個 RUN • 再進⾏行行最佳化 •

    減少映像檔分層 • ⽤用 && 合併 RUN 指令 • 容量量最⼩小化 • 不需要的檔案不要 ADD (應⽤用 .dockerignore) • 刪除暫存檔
  10. • Windows 開發環境 • ⼿手動安裝 • XAMPP • WampServer •

    AppServ • 多重開機進入 Linux 環境 • 步驟繁瑣、版本固定 開發 PHP 演進 - 本機
  11. 開發 PHP 演進 - 遠端主機 • 在家中或公司架設主機 • Linux ⽤用

    telnet, ssh, VNC 連入 • Windows ⽤用遠端桌⾯面連入 • 必須要有網路路
  12. 開發 PHP 演進 - 本機VM • VMware • VirtualBox •

    Vargrant • ⽤用 vargrantfile ⾃自動化安裝、設定、管理理多個VM • 虛擬磁碟很佔⽤用空間 • VM 很耗資源,需要較⾼高階的電腦
  13. 開發 PHP 演進 - 本機容器 • docker 單⼀一容器全包 • 適合開發與測試,效能差

    • docker 多個容器分散架構 • 指令太繁瑣,要對 Docker Network 熟悉 • docker-compose 多容器的管理理⼯工具 • 適合開發與⽣生產環境 • 預設設定檔 docker-compose.yml • 介紹使⽤用 LaraDock http://laradock.io/
  14. 更更⽅方便便的管理理⼯工具 • GUI • Kitematic (MacOS、Windows) https://kitematic.com/ • WebUI •

    Portainer https://portainer.io/ • Shipyard https://shipyard-project.com/ • Rancher http://rancher.com/rancher/ • Kubernetes https://kubernetes.io/
  15. 清理理容器 刪除指定執⾏行行中容器 docker rm CONTAINER 刪除全部執⾏行行中容器 docker kill $(docker ps

    -q) 刪除所有容器 docker rm $(docker ps -aq) 強制刪除所有容器 docker rm -f $(docker ps -aq) 刪除已停⽌止的容器 docker rm $(docker ps -aq -f status=exited) 請⼩小⼼心使⽤用:刪除容器會遺失讀寫層的資料 過濾條件請參參考 https://docs.docker.com/engine/reference/ commandline/ps/#filtering
  16. 清理理映像檔 刪除指定映像檔 docker rmi IMAGE 刪除沒有建立容器的映像檔 docker rmi $(docker images

    -q) 刪除沒有TAG的映像檔 docker rmi -f $(docker images -q -f dangling=true) 過濾條件請參參考 https://docs.docker.com/engine/reference/ commandline/images/#filtering
  17. 清理理 Volume 刪除孤兒 volume docker volume rm $(docker volume ls

    -q -f dangling=true) 強制刪除所有 volume docker volume rm -f $(docker volume ls -q) 請⼩小⼼心使⽤用:刪除 volume 會遺失資料 過濾條件請參參考 https://docs.docker.com/engine/reference/ commandline/volume_ls/#filtering