SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
讓軟體開發與應⽤用更更⾃自由
使⽤用 docker 容器技術
2017.06.25 @台中⾃自由軟體愛好者社群(TFC)
講者
• 邵⽟玉龍 (Allen Shao)
• 網路路暱稱:bestlong
• 在⼿手⼯工具製造公司內擔任資訊⼈人員
• 程式開發、系統維運
• 持續學習探索 DevOps 中
⼤大綱
• Docker 基本概念念
• PHP 開發者的環境演變
• 會介紹 LaraDock
• 命令列列打字好累有沒有更更⽅方便便的管理理⼯工具
• Docker 使⽤用空間⼤大掃除
Docker 基本概念念
什什麼是 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.
Docker vs VM
圖片來來源 https://www.docker.com/what-container
VM Docker
Size ⼤大 ⼩小
Startup 慢 快
Integration 不易易 容易易
簡單比較
Docker with VM
圖片來來源 https://www.docker.com/what-container
Why docker
• Developer
• 可以解決只在我的電腦可以正常運作的囧況
• 多⼈人協同開發讓開發環境統⼀一
• 新成員快速建置環境
• 經常要切換新舊環境版本
• Operator (System Admin)
• build, ship, test, and deploy apps ⾃自動化
• Enterprise
• DevOps, agile
• cloud-ready, optimal costs
Docker Editions
• Docker CE (Community Edition)
• Stable
• Edge
• Docker EE (Enterprise Edition)
• Basic
• Standard
• Advanced
• Moby ?
• https://mobyproject.org/
Support Platform
• Linux
• apt-get install docker.io
• macOS
• 舊版⽤用 boot2docker
• Windows
• 舊版⽤用 boot2docker
• Win10 x64
Docker Engine
圖片來來源 https://docs.docker.com/engine/docker-overview/
• 三個基本要素
• Image 映像檔
• Container 容器
• Registry (Repostory 倉庫)
• 兩兩個基本必要
• 網路路
• ⾜足夠的硬碟空間
先來來感覺⼀一下
• 沒有環境的可先使⽤用線上服務 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
Docker architecture
Volumes
dockerfile
Client/Server 架構
圖片來來源 https://docs.docker.com/engine/docker-overview/
Docker 映像檔
• 唯讀的模板
• 分層結構,有層數上限
• 建立 Container 的模版
• Docker Hub https://hub.docker.com/
Docker 映像檔 分層結構圖⽰示
圖片來來源 https://blog.jayway.com/2015/03/21/a-not-very-short-introduction-to-docker/
Dockerfile
• 打造映像檔的藍藍圖
• 需要具備 Linux 系統管理理的知識
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’
Dockerfile 設計原則
• 先求正確建構
• ⼀一個指令⼀一個 RUN
• 再進⾏行行最佳化
• 減少映像檔分層
• ⽤用 && 合併 RUN 指令
• 容量量最⼩小化
• 不需要的檔案不要 ADD (應⽤用 .dockerignore)
• 刪除暫存檔
Demo
PHP 開發者的⼯工作環境演變
使⽤用 HTTP + PHP + DB 組合
• Windows 開發環境
• ⼿手動安裝
• XAMPP
• WampServer
• AppServ
• 多重開機進入 Linux 環境
• 步驟繁瑣、版本固定
開發 PHP 演進 - 本機
開發 PHP 演進 - 遠端主機
• 在家中或公司架設主機
• Linux ⽤用 telnet, ssh, VNC 連入
• Windows ⽤用遠端桌⾯面連入
• 必須要有網路路
開發 PHP 演進 - 本機VM
• VMware
• VirtualBox
• Vargrant
• ⽤用 vargrantfile ⾃自動化安裝、設定、管理理多個VM
• 虛擬磁碟很佔⽤用空間
• VM 很耗資源,需要較⾼高階的電腦
開發 PHP 演進 - 本機容器
• docker 單⼀一容器全包
• 適合開發與測試,效能差
• docker 多個容器分散架構
• 指令太繁瑣,要對 Docker Network 熟悉
• docker-compose 多容器的管理理⼯工具
• 適合開發與⽣生產環境
• 預設設定檔 docker-compose.yml
• 介紹使⽤用 LaraDock http://laradock.io/
Demo
命令列列打字好累有沒有

更更⽅方便便的管理理⼯工具
更更⽅方便便的管理理⼯工具
• 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/
Docker 使⽤用空間⼤大掃除
Docker 玩著玩著就佔⽤用了了很多的硬
碟空間
• 三個需要清理理的部分
• 容器
• 映像檔
• Volume
• 強制釋放佔⽤用空間 (macOS)
清理理容器
刪除指定執⾏行行中容器 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
清理理映像檔
刪除指定映像檔 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
清理理 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
強制釋放佔⽤用空間 (macOS)
OOXX 該刪的都刪了了,怎麼 Host OS 磁碟空間還是沒釋放?
反正都刪光了了,試試看跑
Reset to factory defaults
總結
• Docker 能更更快速的建置開發或⽣生產環境
• 讓系統架構即為程式碼
• 開發者學到 docker-compose 階段就很⾜足夠了了
• Volume ⼀一定要弄弄清楚,避免發⽣生資料遺失事件
學習資源
• https://docs.docker.com/
• Docker — 從入⾨門到實踐
• https://www.gitbook.com/explore
Q&A

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Docker
DockerDocker
Docker
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
Linking error
Linking errorLinking error
Linking error
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 
Docker Build
Docker BuildDocker Build
Docker Build
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界Hyper: 让Pod以VM为边界
Hyper: 让Pod以VM为边界
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
微服務自己動手做
微服務自己動手做微服務自己動手做
微服務自己動手做
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 
Docker應用
Docker應用Docker應用
Docker應用
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 

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

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 
Windows Azure Virtual Machine Services for Developers
Windows Azure Virtual Machine Services for DevelopersWindows Azure Virtual Machine Services for Developers
Windows Azure Virtual Machine Services for Developers
Jeff Chu
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
Rack Lin
 

Similar a 讓軟體開發與應用更自由 - 使用 Docker 技術 (20)

A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Windows Azure Virtual Machine Services for Developers
Windows Azure Virtual Machine Services for DevelopersWindows Azure Virtual Machine Services for Developers
Windows Azure Virtual Machine Services for Developers
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
Docker技术介绍
Docker技术介绍Docker技术介绍
Docker技术介绍
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
Weic2015 docker
Weic2015 dockerWeic2015 docker
Weic2015 docker
 
Docker實務
Docker實務Docker實務
Docker實務
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
DRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLCDRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLC
 
Docker 101
Docker 101Docker 101
Docker 101
 
2015中国软件技术大会-开放云介绍
2015中国软件技术大会-开放云介绍2015中国软件技术大会-开放云介绍
2015中国软件技术大会-开放云介绍
 
快速入坑 Node.js - 0613 SITCON 雲林定期聚
快速入坑 Node.js - 0613 SITCON 雲林定期聚快速入坑 Node.js - 0613 SITCON 雲林定期聚
快速入坑 Node.js - 0613 SITCON 雲林定期聚
 

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