Docker入門與實踐

    本文原先發表與博客園(http://www.cnblogs.com/libingbin/p/6905830.html),不過個人博客園已經再也不更新了,原有博文會逐步遷移的。php

 

Docker 背景html

 

• Docker是基於容器技術的輕量級虛擬化解決方案
• Docker是容器引擎,把Linux的cgroup、 namespace等容器底層技術進行封裝抽象(後面會介紹此兩種技術),爲用戶提供了建立和管理容器的便捷界面(包括命令行和API)
• Docker 是一個開源項目,誕生於 2013 年初,基於Google 公司推出的 Go 語言實現
• 微軟,紅帽Linux, IBM, Oracle等主流IT廠商已經在本身的產品裏增長對Docker的支持。
• Google 每週啓動超過20億個容器進行業務服務,於上個世紀90年代已經開始大規模使用容器技術linux

發展現例圖web

傳統的開發部署流程docker

 

傳統VM虛擬化環境存在的問題  數據庫

 

1. 虛擬機資源利用效率低
2. 單物理機多應用沒法有效隔離(進程空間, cpu
資源,磁盤)
3. 運維部署不便,環境依賴性強
4. 測試、版本管理複雜
5. 遷移成本高
6. 傳統虛擬機,空間佔用大,啓動慢,管理複雜ubuntu


Docker - 輕量級虛擬化容器優勢緩存

 

1. 秒級啓動和中止,空間資源佔用極少
2. 實現進程級別的隔離
3. 可在普通服務器上創建上百個docker實例
4. 加快開發測試部署的速度
5. 簡化版本管理
 安全

開發和運維的有效隔離bash

 

一個IT系統應該包含以下幾個層次:
• 應用程序
• 運行時平臺(bin/framework/lib)
• 操做系統
• 硬件(基礎設施)
開發人員的主要工做是應用程序的編碼、構建、測試和發佈,涉及應用
程序和運行時平臺這兩層。
而運維人員的工做則涉及從硬件、操做系統到運行時平臺的安裝、配置、
運行監控、升級和優化等工做。
Docker提供了一種運行時環境,隔離了上層應用於下層操做系統和硬件的
關聯,使得術業有專攻。
 

Docker之helloworld

 

1. 安裝Docker
    在ubuntu 下 執行一條命令便可安裝
     apt-get install docker-io

2. 運行
    docker run busybox /bin/echo "HelloWorld"

Docker 背後幹了什麼

 

• 咱們建立了一個容器
• 它擁有:
    文件系統(基於busybox鏡像)
    網絡棧(具備私有網絡服務)
    進程空間
• 自動安裝
    docker會自動檢查本地是否有busybox鏡像(一個測試版本的linux系統),若是沒有則自動下載並啓動
• 經過調用宿主機上的bash啓動進程,並打印Helloworld

Docker 技術基礎-namespace實現資源隔離
 

Docker的技術基礎-CGROUP

 

計算機資源使用上的隔離,一般咱們叫作使用限額
    • Resource limitation: 限制資源使用,好比內存使用上限以及文件系統的緩存限制。
    • Prioritization: 優先級控制,好比: CPU利用和磁盤IO吞吐。
    • Accounting: 一些審計或一些統計,主要目的是爲了計費。
    • Control: 掛起進程,恢復執行進程

 

Docker的技術基礎-Union文件系統

 

• 功能相似diff命令,經過分層的方式記錄文件的累積變化狀況。
• 例如 Tomcat, Oracle, Weblogic鏡像均可以共享同一個Linux基礎鏡像,每個鏡像保存的只是在
基礎鏡像上他們修改的部分
• Docker的鏡像能夠很是多,可是每一個都很小,並且加載啓動很是快
 

 

Docker的重要概念

 

• 鏡像(image)
• 容器(container)
• 數據卷(volumes)
• 連接(links)
• 倉庫(Repository)
 

Docker之鏡像

 

• Docker 的鏡像相似虛擬機的快照,可是更輕量
• 例如:一個鏡像能夠包含一個完整的 Linux 操做系統環境,裏面僅安裝了 Tomcat或用戶須要的其
它應用程序
• 鏡像能夠用來建立容器

 

Docker之容器

 

• 等同於從快照中建立虛擬機
• 容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。
• 能夠把容器看作是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
 

從同一個鏡像啓動多個容器
 

數據卷

 

數據卷是一個可供一個或多個容器使用的特殊目錄
• 進程和數據的分離
• 實際保存在容器以外,從而容許你在不影響數據的狀況下銷燬、重建、修改、丟棄容器
• 可用於數據持久化
• 數據卷的使用,相似於 Linux 下對目錄或文件進行 mount。
• 數據卷的共享, 能夠在多個容器之間共享數據卷
 

連接
 

• 容器的鏈接(linking)系統是除了端口映射外,另外一種跟容器中應用交互的方式
• 在源和接收容器之間建立一個隧道,接收容器能夠看到源容器指定的信息
• Docker 在兩個互聯的容器之間建立了一個安全隧道,並且不用映射它們的端口到宿
主主機上。從而避免了暴露關鍵系統(如數據庫)端口到外部網絡上.

這裏實際上1521端口只有web容器和myapp_db容器是可見的,對其餘容器是不可見的。


倉庫及倉庫註冊服務器

 

• 倉庫是集中存放鏡像文件的場所
• 倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤
• 倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式
• push 鏡像到倉庫,從倉庫pull下鏡像

 

Docker 操做與使用

 

 

Docker經常使用命令概括總結

 

•容器生命週期管理
    docker [run|start|stop|restart|kill|rm|pause|unpause]
•容器操做運維
    docker [ps|inspect|top|attach|events|logs|wait|export|port]
•容器rootfs命令
    docker [commit|cp|diff]
•鏡像倉庫
    docker [login|pull|push|search]
•本地鏡像管理
    docker [images|rmi|tag|build|history|save|import]
•其餘命令
    docker [info|version]

Docker - 應用方向

 

1. 簡化配置
應用配置可以無縫運行在任何平臺,將應用環境和底層環境實現瞭解耦;
2. 代碼管道化管理
代碼從開發者的機器到生產環境機器進行管道化管理,可以平滑遷移;
3. 應用隔離
多個應用服務部署在多個Docker中,實現應用之間的解耦;
4. 服務合併
合併多個服務,減小機器佔用;
5. 快速部署
快速的啓動速度,極小空間佔用;
6. 開發人員的生產化
可以在單機上搭建分佈式集羣服務,用以測試在真正生產環境下的代碼


以Docker爲單位的開發部署流程設計

• 以docker爲單位的開發測試部署流程,簡化了環境搭建的步驟,提升了資源利用效率和開發測試環境部署的速度,下降了遷移的成本,提高項目進度。

基於Docker自動化發佈構建流程圖

 

DockerUI - Docker圖形化管理工做

 

Harbor – 企業級docker倉庫

 

Docker Compose -簡化複雜容器應用的利器

 

更多Docker工具
• Docker For Windows and MAC
https://download.docker.com/win/stable/InstallDocker.msi
• Eclipse for Docker has arrived on Mars
https://www.eclipse.org/community/eclipse_newsletter/2015/june/article3.php
http://www.oschina.net/news/63789/eclipse-for-docker-has-arrived
• Eclipse Docker Tooling for Neon
https://www.eclipse.org/community/eclipse_newsletter/2016/july/article2.php
 

本文爲博主原創文章,轉載請註明出處!

https://my.oschina.net/u/3375733/blog/

相關文章
相關標籤/搜索