Docker入門篇(一):Hello Docker

Docker的設計理念是:Build, Ship and Run Any App Anywhere。它由Go語言編寫。它但願對應用組件的封裝,分發,部署,運行等生命週期進行管理,使得最終的Application能夠在任何機器上順利運行。linux

Docker就像貨船同樣:將各類APP以及他們所依賴的環境配置所有裝入到獨立集裝箱中,而後將這些集裝箱安全地運輸到另外一處地方。 c++

在本專題中,以一個Java EE程序員的視角去了解它,所以主要介紹 基礎和使用部分。在瞭解Docker以前,應該具有:

  1. Linux相關命令以及背景知識。程序員

  2. 對Maven/Git等有基本的認識。docker

🌏Docker官方網站:點此進入json

爲何須要Docker?

一個產品(代碼)的開發環境和部署環境每每是不一樣的。這其中可能包括了操做系統運行環境,或者到應用配置的差別。這些差別頗有可能致使一個現象:在開發環境中運行正常的代碼一旦在部署環境中就出現各類問題。vim

尤爲是隨着版本的不斷迭代,運行環境的愈來愈複雜,開發人員和運維人員的溝通成本會愈來愈高。centos

那可不能夠有這樣一個方法,使得開發人員在交付代碼時,將代碼的運行環境(包括配置/數據/參數等等)也一併打包到部署環境中呢安全

Docker正是爲了解決這個問題而誕生的。它對此提供了一個標準化的解決方案,從2014年誕生之日起就發展迅速。bash

在從前,代碼即應用。開發人員只管將程序編譯完而後提交給運維,由運維去部署。而學習Docker以後,則不僅是簡單提交代碼,而是將運行文檔,配置環境,運行環境,運行依賴包等等放置到一個集裝箱中交付到運維(雲平臺)手中。服務器

咱們將要在一個集羣環境中部署應用

因爲互聯網的野蠻生長,如今的網絡應用已經統統採起了分佈式集羣來應對如此高併發的請求。

也就是說,若是按照傳統的方式來部署應用,運維人員可能要手動地配置每一個分佈式節點的安裝環境,這樣的人力和時間成本都是巨大的。

再好比,若是分佈式集羣要再次進行彈性擴容,運維人員要從新在新的機器上安裝MySQL,JDK,Hadoop,ZooKeeper,固然尚未算上配置這些環境所須要的成本。

因此Docker的設計者就想作這樣一件事情:將本身的代碼+配置+環境打包成一個鏡像,而後直接將整個鏡像遷移到其它的運行機器當中。

這和JVM虛擬機的理念不謀而合:一次編譯,處處運行。

只須要一個鏡像

假設某個App須要依賴Redis, MongoDB, MySQL才能正常運行,那麼使用傳統的方法,運維人員須要按照開發人員提供的開發手冊,手動在部署環境中安裝Redis,MongoDB,MySQL這些工具,同時開要考慮到版本不一樣所帶來的差別(好比MySQL5.7和MySQL8.0)。

在使用Docker以後,能夠直接將這些工具打包成一個鏡像文件,運維只須要將這個鏡像運行在Docker中,就能夠得到徹底同樣的部署環境。

簡單歸納Docker

Docker是一個解決了運行環境和配置問題,方便作持續繼承繼承並有助於總體發佈的容器虛擬化技術。

Docker帶來了如下便捷:

  • 更快速的應用交付和部署。
  • 更便捷的升級和擴容/縮容。
  • 下降系統運維的門檻。
  • 高效的計算資源利用。
  • 一次構建,隨處運行。

簡單瞭解兩類虛擬技術

虛擬機技術

想必咱們必定了解或使用過大名鼎鼎的VM Ware(或相似的工具)。咱們能夠利用這個工具,在Windows系統中運行Linux, Unix系統,而運行在虛擬機內的程序對此毫無感知。

而對於咱們而言,虛擬機以及其內部全部的應用,配置只是一個普通的鏡像文件。當不須要的時候就能夠整個刪掉。而且虛擬機內的環境發生變化時,對咱們真正的物理機毫無影響。

固然,虛擬機還模擬了內存,處理器,硬盤,網絡適配器等硬件設備。至關於模擬了整套操做系統。這使得虛擬機也有它的侷限性:資源佔用多,冗餘步驟多,啓動慢

虛擬容器技術

基於上述的這些緣由,Linux後來又發展出了另外一種虛擬化技術:Linux 容器(Linux Containers,縮寫爲LXC)。它並非一個完整的操做系統,但保留了Linux的系統運行環境,並支持對不一樣應用所運行的進程進行隔離。

容器沒有本身的內核(依賴宿主機的Kernel),也沒有硬件虛擬。所以虛擬容器和虛擬機相比要更爲 輕便。CentOS/Ubuntu基礎鏡像僅僅約200M,通常公司的宿主機能夠部署100-1000個容器。

另外,每一個容器之間是相互隔離的。每一個容器有本身的文件系統,容器之間的進程不會相互影響。

Docker使用Linux做爲內核,那Windows用戶怎麼辦?很遺憾,Windows系統首先須要安裝一個Linux虛擬環境(若是你的Windows系統非專業版或旗艦版),而後再運行Docker。用起來要比Linux系統下更麻煩一些。不過別灰心,由於至少在國內,服務器咱們基本所有選擇Linux內核的OS。

若是你想在Windows環境中學習如何運用Docker,則須要使用VM Ware模擬一個Linux虛擬機,並在此虛擬機中學習運用Docker。不要忘記配置虛擬機的網絡設置,由於咱們會在虛擬機中使用yum或Docker pull命令從互聯網上下載文件。

🌏參考連接:物理機,虛擬機,容器的比較

Docker容器的框架

Docker基於C/S架構。客戶端和Docker的守護進程相互交流,由Docker-Daemon進程負責Docker容器的構建,分發,以及運行。

客戶端和守護進程經過sockets,或者是RESTful API進行溝通和交流。

Docker三要素

鏡像(image)

Docker鏡像是一個只讀的模板。就比如咱們利用一個**.ISO**文件就能夠建立不少份虛擬機同樣,同一個模板也能夠建立不少個容器。

容器(container)

容器是由鏡像建立出來的運行實例。它能夠被啓動,中止,甚至刪除。每一個容器都是相互隔離且保證安全的平臺。能夠把容器看做是一個簡易的Linux環境(root用戶權限,進程空間和網絡空間等),以及運行在其中的應用程序。

🌏參考連接:深刻了解容器和鏡像

倉庫(repository)

就像管理代碼/項目的GitHub倉庫同樣,Docker鏡像也會集中存放在一箇中央倉庫中進行管理。最大的公開倉庫就是Docker Hub。權限能夠分爲私有(Private)公開(Public)

Docker Hub

相比Docker Hub,咱們對GitHub可能更爲了解:咱們至關於將本身的工做/應用存儲到了雲端,以便本身在任意一臺機器均可以經過clone來繼續完成本身的工做。

Docker Hub的工做實際上是相似的:開發人員將本身的配置+應用打包成的Docker鏡像也存儲到雲端,運維人員能夠直接在雲端中獲取該Docker鏡像並部署。

🌏Docker Hub官方網站:點此進入

針對國內開發者

受網絡限制,國內開發者通常都選擇阿里雲網易雲等做爲雲端倉庫。不過咱們更傾向於前者,所以筆者以後的文章也所有以阿里云爲平臺進行操做的。

在CentOS 7 下安裝Docker

目前,Linux僅在發行版本(release)中的內核支持Docker。

Docker運行在CentOS 7上,要求系統爲64位,系統內核版本是3.10以上。

Docker運行在CentOS 6.5或更高的版本,則要求系統是64位,系統內核版本爲2.6.32-431或者更高的版本。

附帶Docker官網安裝教程:點此進入

筆者是在centOS 7環境下安裝的Docker。即便在centOS 6.8環境中,安裝Docker的步驟也可能有所不一樣。

經過uname命令來查看CentOS系統的內核版本:

$ uname -r
複製代碼

檢查release文件:

$ cat /etc/redhat-release
複製代碼

經過yum安裝gcc相關依賴(若是是虛擬機進行的操做,須要先檢查網絡是否連通):

$ yum -y install gcc
$ yum -y install gcc-c++
複製代碼

若是原來的系統裝有舊版本的docker引擎,就複製下方命令將它們移除:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
複製代碼

若是yum提示沒有匹配參數,則說明目前機器中沒有安裝任何與docker相關依賴,不然就會將它們卸載。

隨後咱們使用yum命令來安裝Docker-CE版本。官網給出如下提示:

Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.

大意爲:若是你是在新的機器中安裝Docker引擎,首先須要配置Docker倉庫,隨後,你就能夠在這個倉庫中安裝或者更新Docker了。

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
複製代碼

❗:官網中提供的download.docker.com倉庫在國內的速度很是緩慢,所以接下來的stable鏡像倉庫須要配置爲阿里雲倉庫。固然,也能夠在上一步的--add-repo參數中直接就進行替換。

$ yum-config-manager --add-repo \
	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
複製代碼

系統提示該配置信息被配置到了/etc/yum.repos.d/docker-ce.repo文件中,可使用cat查看該配置文件。

Docker中文官網推薦:更新yum的軟件包索引。

$ yum makecache fast
複製代碼

隨後使用yum安裝Docker-ce版本,可添加-y參數跳過全部的問詢(所有安裝),隨後須要稍等片刻。

$ yum -y install docker-ce
複製代碼

最後,啓動Docker-CE版,咱們就能夠正式使用它了!

$ systemctl start docker
複製代碼

經過version參數檢查Docker是否安裝成功:

$ docker version
複製代碼

使用阿里雲配置鏡像加速

登陸阿里雲,選擇註冊新帳號,或者選擇複用淘寶帳號。在服務中搜索:容器鏡像服務,選擇鏡像加速器。咱們在Docker專題的最後,學習如何將本身的鏡像上傳到遠程倉庫時,也會使用阿里雲的容器鏡像服務。

鏡像加速器中,阿里雲已經給出了加速器地址。在操做文檔中能夠根據本身的系統快速複製命令,筆者爲centOS系統。手動配置過程以下:

$ mkdir -p/etc/docker
$ vim /etc/docker/daemon.json
複製代碼

在json文件中配置加速器地址,保存並退出:

{
  "registry-mirrors": ["這個值以你的加速器地址爲準"]
}
複製代碼

從新加載配置文件並啓動:

$ systemctl daemon-reload
$ systemctl restart docker
複製代碼

查看進程中是否已經啓動了Docker:

ps -ef | grep docker
複製代碼

🌏阿里雲首頁:點此登陸

下載一個hello-world鏡像

按照慣例,在第一次安裝完Docker以後咱們啓動一個helloWorld實例。

$ docker run hello-world
複製代碼

終端首先會提示:Unable to find image 'hello-world:latest' locally。不過無需擔憂,這是由於Docker引擎會優先在本地搜索是否有此鏡像。當在本地找不到hello-world鏡像時,Docker纔會會從遠端倉庫中將它下載下來。:latest是一個標籤,表示下載hello-world鏡像的最新版。

最終,Docker會從阿里雲倉庫中下載該鏡像,並由此建立一個容器並運行(run)。

若是屏幕當中顯示以下信息,則表示安裝成功:

Hello from Docker!
This message shows that your installation appears to be working correctly.
複製代碼
相關文章
相關標籤/搜索