一、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