Docker入門學習之路

一、Docker 是什麼

    Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker,就不用擔心環境問題。Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。

  • Docker 是世界領先的軟件容器平臺
  • Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核 的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。 由於隔離的進程獨立於宿主和其它的隔離的進
  • 程,因此也稱其爲容器。Docke最初實現是基於 LXC
  • Docker 能夠自動執行重複性任務,例如搭建和配置開發環境,從而解放了開發人員以便他們專注在真正重要的事情上:構建傑出的軟件
  • 用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣

二、Docker優勢

(1)提供一次性、一致性的環境。比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。

(2)提供彈性的雲服務。因爲 Docker 容器可以隨開隨關,很適合動態擴容和縮容。

(3)組建微服務架構。通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

(4)快速創建、刪除:虛擬化創建是分鐘級別的, Docker 容器創建是秒級別的。 Docker 的快速迭代性,決定了無論是開發、測試、部署都可以節約大量時間

(5)隔離性。避免公用的服務器,資源會容易受到其他用戶的影響。

三、基礎概念

1、鏡像(Image),一個特殊的文件系統

    Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

         Docker 設計時,就充分利用 Union FS的技術,將其設計爲 分層存儲的架構 。 鏡像實際是由多層文件系統聯合組成。鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。

  分層存儲的特徵還使得鏡像的複用、定製變的更爲容易。甚至可以用之前構建好的鏡像作爲基礎層,然後進一步添加新的層,以定製自己所需的內容,構建新的鏡像。

        鏡像(Image)就是一堆只讀層(read-only layer)的統一視角。

(從左邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其它層都會有一個指針指向下一層。這些層是Docker 內部的實現細節,並且能夠在主機的文件系統上訪問到。統一文件系統 (union file system) 技術能夠將不同的層整合成一個文件系統,爲這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。)

2、容器(Container),鏡像運行時的實體

        鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等 。

  容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。前面講過鏡像使用的是分層存儲,容器也是如此。容器 (Container) 的定義和鏡像 (Image) 幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

由於容器的定義並沒有提及是否要運行容器,所以實際上,容器 = 鏡像 + 讀寫層。

3、倉庫(Repository),集中存放鏡像文件的地方

    Docker 倉庫是集中存放鏡像文件的場所。鏡像構建完成後,可以很容易的在當前宿主上運行,但是, 如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務。一個 Docker Registry (倉庫註冊服務器)中可以包含多個倉庫 (Repository) ,每個倉庫可以包含多個標籤 (Tag),每個標籤對應着一個鏡像。所以說,鏡像倉庫是 Docker 用來集中存放鏡像文件的地方類似於我們之前常用的代碼倉庫。

        通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本 。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以 latest 作爲默認標籤.。

四、Docker - Build, Ship, and Run Any App, Anywhere

“Build, Ship and Run”,也就是“搭建、發送、運行”,三板斧。

  • Build(構建鏡像) : 鏡像就像是集裝箱包括文件以及運行環境等等資源。
  • Ship(運輸鏡像) :主機和倉庫間運輸,這裏的倉庫就像是超級碼頭一樣。
  • Run (運行鏡像) :運行的鏡像就是一個容器,容器就是運行程序的地方。

Docker 運行過程也就是去倉庫把鏡像拉到本地,然後用一條命令把鏡像運行起來變成容器。所以,我們也常常將Docker稱爲碼頭工人或碼頭裝卸工,這和Docker的中文翻譯搬運工人如出一轍。

理解Docker概念:

      我來到一片空地,想建個房子,於是我搬石頭、砍木頭、畫圖紙,一頓操作,終於把這個房子蓋好了。結果,我住了一段時間,想搬到另一片空地去。這時候,按以往的辦法,我只能再次搬石頭、砍木頭、畫圖紙、蓋房子。但是,跑來一個老巫婆,教會我一種魔法。這種魔法,可以把我蓋好的房子複製一份,做成“鏡像”(Docker鏡像),放在我的揹包(Docker倉庫)裏。等我到了另一片空地,就用這個“鏡像”,複製一套房子(Docker容器),擺在那邊,拎包入住。所以,Docker的第二句口號就是:“Build once,Any App, Anywhere(搭建一次,到處能用)”。

      每一個鏡像可以變出一種房子。那麼,我可以有多個鏡像呀!也就是說,我蓋了一個歐式別墅,生成了鏡像。另一個哥們可能蓋了一箇中國四合院,也生成了鏡像。還有哥們,蓋了一個非洲茅草屋,也生成了鏡像。這麼一來,我們可以交換鏡像,你用我的,我用你的,豈不是很爽?於是乎,就變成了一個大的公共倉庫Repository)。負責對Docker鏡像進行管理的,是Docker Registry服務(類似倉庫管理員)。不是任何人建的任何鏡像都是合法的。萬一有人蓋了一個有問題的房子呢?所以,Docker Registry服務對鏡像的管理是非常嚴格的。最常使用的Registry公開服務,是官方的Docker Hub,這也是默認的 Registry,並擁有大量的高質量的官方鏡像。

五、Docker的安裝和使用

1、安裝

刪除舊版本:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

安裝一些必要的系統工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加軟件源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 更新yum緩存:

sudo yum makecache fast

安裝 Docker-ce:

sudo yum -y install docker-ce

啓動Docker服務:

sudo systemctl start docker

測試運行 hello-world:

docker run hello-world

由於本地沒有hello-world這個鏡像,所以會下載一個hello-world的鏡像,並在容器內運行。

2、使用

1)docker images  查看所有鏡像

  • REPOSITORY:表示鏡像的倉庫源

  • TAG:鏡像的標籤

  • IMAGE ID:鏡像ID

  • CREATED:鏡像創建時間

  • SIZE:鏡像大小

2)docker pull  獲取新鏡像

 

https://blog.csdn.net/deng624796905/article/details/86493330

http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

https://blog.csdn.net/aa1215018028/article/details/80823659

https://www.runoob.com/docker/centos-docker-install.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章