【Docker入門篇】

"

@linux

 


所謂Docker


Docker最初是dotCloud公司創始人Solomon Hykes在法國期間發起的一個公司內部項目,於2013年3月以Apache2.0受權協議開源,主要項目代碼在GitHub上進行維護.


Docker使用Google公司推出的GO語言進行開發實現.


Docker是Linux容器的一種封裝,提供簡單易用的容器使用接口,它是最流行的Linux容器解決方案.


Docker的接口至關簡單,用戶能夠方便的建立、消費容器.


Docker將應用程序與程序的依賴打包在一個文件內,運行這個文件就會生成一個虛擬容器.


程序運行在虛擬容器裏,如同在真實物理機上運行同樣,有了Docker,就不用擔憂環境問題了.git


Docker應用場景web

  • web應用的自動化打包和發佈.
  • 自動化測試和持續集成、發佈.
  • 在服務型環境中部署和調整數據庫或其它應用.

Linux容器

因爲虛擬機的諸多問題,Linux發展出了另外一種虛擬化技術:Linux容器(Linux Containers,縮寫LXC).
.
Linux容器不是模擬一個完整的操做系統,而是對進程進行隔離,在正常的進程外面套了一個保護層,對於容器裏面的進程來講,它接觸的資源都是虛擬的,從而實現和底層系統的隔離.
.docker

---------⬇️
容器相比於虛擬機的優點:
.
1.啓動快
容器裏面的應用,直接就是底層系統的一個進程,而不是虛擬機內部的進程.
啓動容器就是啓動本機的一個進程,而不是啓動一個操做系統,因此速度快不少.
.
2.資源佔用少
容器只佔用須要的資源,不佔用那些沒有用到的資源.
虛擬機因爲是完整的操做系統,不可避免要佔用全部資源.
另外,多個容器之間可共享數據,虛擬機都是獨享資源.
.
3.體積小
容器只要包含用到的組件便可,而虛擬機是整個操做系統的打包,因此容器文件比虛擬機文件要小不少.
---------⬆️
.
總之,容器有點像輕量級的虛擬機,可以提供虛擬化的環境,可是成本開銷小不少.數據庫

Docker架構
在這裏插入圖片描述
Docker VS 虛擬機
在這裏插入圖片描述ubuntu


Docker的優點

更高效的利用系統資源
因爲容器不須要進行硬件虛擬以及運行完整操做系統等額外開銷,Docker對系統資源利用率更高.
不管是應用執行速度、內存損耗、文件存儲速度,都要比傳統虛擬機技術更高效.
相比於虛擬機技術,一個相同配置的主機,每每能夠運行更多數量的應用.
.
更快速的啓動時間
傳統的虛擬機技術啓動應用服務每每須要數分鐘,而Docker容器應用程序則能夠作到秒級、甚至毫秒級的啓動時間.
Docker容器運行於宿主內核,無需啓動完整的操做系統,啓動秒級,大大的節約了開發、測試、部署的時間.
.
一致的運行環境
開發過程當中一個常見的問題就是環境一致性問題,因爲開發環境、測試環境、生產環境不一致,致使有些bug並未在開發過程當中被發現.
而Docker的鏡像提供了除內核外,完整的運行時環境,確保了應用運行環境的一致性.
.
持續交付和部署
對開發和運維(DevOps)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行.
使用Docker能夠經過定製應用鏡像來實現持續集成、持續交付、部署.
開發人員能夠經過Dockerfile來進行鏡像構建,並結合持續集成(Continuous Integration)系統進行集成測試.
而運維人員則能夠直接在生產環境中快速部署該鏡像,甚至結合持續部署(Continuous Delivery/Deployment)系統進行自動部署.
並且使用Dockerfile使鏡像構建透明化,不只僅開發團隊能夠更容易理解應用運行環境,也方便了運維團隊理解應用運行所需條件,幫助咱們更好的在生產環境中部署該鏡像.
.
更輕鬆的遷移
因爲Docker確保了執行環境的一致性,使得應用的遷移更加容易.
Docker能夠在不少平臺上運行,不管是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結果是一致的.
所以不少用戶能夠很輕鬆的將在一個平臺上運行的應用,遷移到另外一個平臺上,而不用擔憂運行環境的變化致使應用沒法正常運行的問題.centos

虛擬化+容器
在這裏插入圖片描述服務器


Docker三大概念

Docker整個生命週期就這三個概念:架構

  1. 鏡像 image
  2. 容器 container
  3. 倉庫 repository

---------⬇️
Docker鏡像
一個只讀的模版(例如:一個鏡像能夠包含一個完整的CentOS操做系統環境,裏面安裝了Apache或用戶須要的其它應用程序.)
鏡像能夠用來建立Docker容器.
Docker提供了一個很簡單的機制來建立或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用.
.
docker容器(container)
image和container的關係,就像面向對象程序設計中的類和實例同樣,鏡像是靜態的定義(class),容器是鏡像運行時的實體(object).
容器能夠被建立、啓動、中止、刪除、暫停,Docker利用容器來運行應用.
.
Docker倉庫(repository)
倉庫是集中存放鏡像文件的場所,容易把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分.
實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag).
倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式.
最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載,國內的公開倉庫包括Docker Pool等,能夠提供大陸用戶更穩定快讀的訪問.
當用戶建立了本身的鏡像以後就可使用push命令將它上傳到公有或者私有倉庫,這樣下載在另一臺機器上使用這個鏡像時候,只須要從倉庫上pull下來就能夠了.
注意:Docker倉庫的概念跟Git相似,註冊服務器能夠理解爲GitHub這樣的託管服務.
---------⬆️運維


安裝使用Docker

安裝

Docker軟件包已經包括在默認的 CentOS-Extras 軟件源裏。所以想要安裝 docker,只須要 運行下面的 yum 命令:

[root@fedora ~]# yum -y install docker

安裝完成後,使用下面的命令來啓動 docker 服務,並將其設置爲開機啓動:

[root@fedora ~]# systemctl start docker

查看Docker版本,方式一:

[root@fedora ~]# docker version 
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-61.git9cb56fd.fc28.x86_64
 Go version:      go1.10.3
 Git commit:      1556cce-unsupported
 Built:           Wed Aug  1 17:21:17 2018
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-61.git9cb56fd.fc28.x86_64
 Go version:      go1.10.3
 Git commit:      1556cce-unsupported
 Built:           Wed Aug  1 17:21:17 2018
 OS/Arch:         linux/amd64
 Experimental:    false

查看Docker版本,方式二:

[root@fedora ~]# docker info

以上是使用CentOS7軟件源提供的Docker安裝程序,固然你也能夠按照官方文檔安裝.


使用

加速Docker鏡像的下載:

[root@fedora ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

開始玩轉Docker

# 下載 hello-world 鏡像
[root@fedora ~]# docker pull hello-world

# 下載一個ubuntu image文件,而後以image啓動容器來玩轉ubuntu系統
[root@fedora ~]# docker pull ubuntu:14.04

# 一樣,還能夠玩轉CentOS系統
[root@fedora ~]# docker pull docker.io/centos

關於Docker的基本命令,可見此文獻:【Docker基本操做】


補充知識

關於image的分層存儲:

由於鏡像包含完整的root文件系統,體積是很是龐大的,所以docker在設計時按照Union FS的技術,將其設計爲分層存儲的架構.
鏡像不是ISO那種完整的鏡像包,而是一個虛擬的概念,它不是一個完整的文件,是由一組文件組成,或者多組文件系統聯合組成.

當使用 docker run 來建立容器時,Docker在後臺運行的標準操做以下

  1. 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載.
  2. 利用鏡像建立並啓動一個容器.
  3. 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層.
  4. 從宿主機配置的網橋接口中橋接一個虛擬接口到容器中去.
  5. 從地址池配置一個ip地址給容器.
  6. 執行用戶指定的應用程序.
  7. 執行完畢後容器被終止.

Docker RegistryDocker Registry公開服務是開放給用戶使用、容許用戶管理鏡像的Registry服務.通常這類公開服務容許用戶免費上傳、下載公開的鏡像,並可能提供收費服務供用戶管理私有鏡像..最常使用的Registry公開服務是官方的Docker Hub,這也是默認的Registry,並擁有大量的高質量的官方鏡像.除此之外,還有CoreOS的Quay.io,CoreOS相關的鏡像存儲在這裏.Google的Google Container Registry,Kubernetes的鏡像使用的就是這個服務..因爲某些緣由,在國內訪問這些服務可能會比較慢.國內的一些雲服務商提供了針對Docker Hub的鏡像服務(Registry Mirror),這些鏡像服務被稱爲加速器.常見的有阿里雲加速器、DaoCloud加速器、靈雀雲加速器等..使用加速器會直接從國內的地址下載Docker Hub的鏡像,比直接從官方網站下載速度會提升不少.國內也有一些雲服務商提供相似於Docker Hub的公開服務.好比時速雲鏡像倉庫、網易雲鏡像服務、DaoCloud鏡像市場、阿里雲鏡像庫等."

相關文章
相關標籤/搜索