1. 程式人生 > >Docker技術入門

Docker技術入門

引言

  如果說主機時代大家比拼的是單個伺服器的物理效能,那麼在雲時代,最為看重的則是憑藉虛擬化技術所構建的叢集處理能力。
  隨著資訊科技的飛速發展,虛擬化技術早已經應用到各種關鍵場景中。從20世紀60年代IBM推出的大型主機虛擬化,到後來以Xen、KVM為代表的虛擬機器虛擬化,再到現在以Docker為代表的容器技術,虛擬機器技術自身也在不斷創新和突破。
  傳統來看,虛擬化既可以通過硬體模擬來實現,也可以通過作業系統軟體來實現。而容器技術更為優雅,它充分利用了作業系統本身已有的機制和特性,可以實現遠超傳統虛擬機器的清亮虛擬化。因此,有人甚至把它稱為“新一代的虛擬化”技術,並將基於容器打造的雲平臺親切地稱為“容器雲”。
  Docker毫無疑問正是眾多容器技術中的佼佼者,是容器技術發展過程中耀眼的一抹亮色。那麼Docker 到底是什麼,要解決什麼問題,好處又在哪裡?接下來將一一進行解答。

Docker的發展歷史

  在做軟體開發的時候,往往需要配置軟體的執行環境,如JAVA,Python。而且換一臺機器,就要重來一次。那麼能不能在安裝的時候,把原始環境一模一樣地複製過來,從根本上解決環境配置的難題呢。
  在此環境下,虛擬機器應運而生。虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。它可以在一種作業系統裡面執行另一種作業系統,虛擬機器就是一個普通檔案,不需要了就刪掉,對其他部分毫無影響。
  雖然使用者可以通過虛擬機器還原軟體的原始環境。但是,這個方案有幾個缺點
  1)資源佔用多
  2)冗餘步驟多
  3)啟動慢
  由於虛擬機器存在這些缺點,Linux 發展出了另一種虛擬化技術:Linux 容器

(Linux Containers,縮寫為 LXC)。
  Linux 容器不是模擬一個完整的作業系統,而是對程序進行隔離。或者說,在正常程序的外面套了一個保護層。對於容器裡面的程序來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。
  由於容器是程序級別的,相比虛擬機器有很多優勢。
  1)啟動快
  2)資源佔用少
  3)體積小

Docker是什麼

  首先,Docker 是一個開源的應用容器引擎。其次,Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。
  Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。
  Docker的構想是要實現“Build, Ship and Run Any App, Anywhere”,即通過對應用的封裝(Packaging)、分發(Distribution)、部署(Deployment)、執行(Runtime)生命週期進行管理,達到應用元件“一次封裝,到處執行

”的目的。這裡的應用元件,既可以是一個Web應用、一個編譯環境,也可以是一套資料庫平臺服務,甚至是一個作業系統或叢集。
  基於Linux平臺上的多項開源技術,Docker提供了高效、敏捷和輕量級的容器方案,並支援部署到本地環境和多種主流平臺。可以說,Docker首次為應用的開發、執行和部署提供了“一站式”的使用解決方案。

Docker與虛擬化

  Docker和常見的虛擬化方式的不同之處如下圖所示。
  docker架構
  傳統方式是在硬體層面實現虛擬化,需要有額外的虛擬機器管理應用和虛擬機器作業系統層。Docker容器是在作業系統層面上實現虛擬化,直接複用本機的作業系統,因此更加輕量級。

Docker的核心概念

  Docker的大部分操作都圍繞著它的三大核心概念——映象、容器和倉庫而展開。因此,準確把握這三大核心概念對於掌握Docker技術尤為重要。

1、Docker映象

  Docker映象類似於虛擬機器映象,可以將它理解為一個只讀的模板。例如,一個映象可以包含一個基本的作業系統環境,裡面僅安裝了Mysql應用程式。可以把他稱為一個Mysql映象。
  映象是建立Docker容器的基礎。通過版本管理和增量的檔案系統,Docker提供了一套十分簡單的機制來建立和更新現有的映象,使用者甚至可以從網上下載一個已經做好的應用映象,並直接使用。

2、Docker容器

  Docker容器類似於一個輕量級的沙箱,Docker利用容器來執行和隔離應用。容器是從映象建立的應用執行例項。可以將其啟動、開始、停止、刪除,而這些容器都是彼此相互隔離、互不可見的。
  注:映象自身是隻讀的。容器從映象啟動的時候,會在映象的最上層建立一個可寫層。

3、Docker倉庫

  Docker倉庫類似於程式碼倉庫,它是Docker集中存放映象檔案的場所。

https://hub.docker.com/

安裝Docker

  以CentOS7為例。

1、檢查核心版本

  Docker目前只能執行在64位平臺上,並且要求核心版本不低於3.10。 

uname -r

核心版本

2、使用yum命令安裝Docker

yum install docker

yum

3、啟動Docker

systemctl start docker

4、檢視Docker版本

docker –v

version

5、開機啟動Docker

systemctl enable docker

開機啟動

6、停止Docker

systemctl stop docker

Docker常用操作

映象操作

映象操作
  下面看一個案例,使用Docker安裝Mysql。

1、啟動docker

[[email protected] ~]# systemctl start docker

2、搜尋mysql

[[email protected] ~]# docker search mysql


  注意:如果報以下錯誤。
  

Error response from daemon: Get https://index.docker.io/v1/search?q=mysql&n=25: dial tcp: lookup index.docker.io: no such host

  解決方法見以下連線:

http://blog.chinaunix.net/uid-20776139-id-5180853.html

error

3、拉取Mysql映象

[[email protected] ~]# docker pull mysql

pull

4、檢視安裝的映象

[[email protected] ~]# docker images
images

5、刪除映象

[[email protected] ~]# docker rmi a8a59477268d

這裡寫圖片描述

容器操作

容器操作

  在拉取映象之後,執行映象就會產生一個容器。容器其實就是正在執行的軟體。
  下面看一個案例,使用Docker安裝Tomcat。

1、搜尋映象

docker search tomcat

2、拉取映象

docker pull tomcat

3、根據映象啟動容器

docker run --name mytomcat -d tomcat:latest
這裡寫圖片描述

4、檢視執行中的容器

docker ps
這裡寫圖片描述

5、 停止執行中的容器

docker stop 容器的id
docker stop d5fc94dc82d0
這裡寫圖片描述

6、檢視所有的容器

docker ps -a
這裡寫圖片描述

7、啟動容器

docker start 容器id

8、刪除一個容器

docker rm 容器id
docker rm d5fc94dc82d0
這裡寫圖片描述

9、啟動一個做了埠對映的tomcat

docker run -d -p 8888:8080 tomcat

-d:後臺執行
-p: 將主機的埠對映到容器的一個埠 主機埠:容器內部的埠

10、為了演示簡單關閉了linux的防火牆

service firewalld status ;檢視防火牆狀態
service firewalld stop;關閉防火牆

11、檢視容器的日誌

docker logs container-name/container-id

  注:更多命令參看:

https://docs.docker.com/engine/reference/commandline/docker/

埠對映與容器互聯

  在實踐中,經常會碰到需要多個服務元件容器共同協作的情況,這往往需要多個容器之間有能夠相互訪問到對方的服務。
  除了通過網路訪問外,Docker還提供了兩個很方便的功能來滿足需求:一個是允許對映容器內應用的服務埠到本地宿主主機,另一個是互聯機制實現多個容器間通過容器名來快速訪問。

啟動一個做了埠對映的tomcat

docker run -d -p 8888:8080 tomcat

-d:後臺執行
-p: 將主機的埠對映到容器的一個埠 主機埠:容器內部的埠

參考資料

Docker 入門教程
Docker 微服務教程