Docker入門(一)

青島諾基亞車庫成立

前端時間有幸被邀請參加了青島諾基亞車庫的成立儀式,在下午的技術(shù)沙龍上,聽取了諾基亞研發(fā)中心專家對于微服務(wù)的技術(shù)分享,遂開始對Docker產(chǎn)生了十分濃厚的興趣。一段時間以來一直在關(guān)注并且學(xué)習(xí)著。

1.Docker是什么

Docker是目前最為流行的 Linux 容器解決方案。在虛擬化技術(shù)發(fā)展的過程中,由于虛擬機存在著諸如啟動速度慢、資源占用多等諸多不便,Linux 發(fā)展出了另一種虛擬化技術(shù):Linux 容器(Linux Containers)。

相比于虛擬機,Linux容器并不是虛擬一個完整的操作系統(tǒng),而是對進程進行隔離,物理機上的進程被區(qū)分為容器內(nèi)和容器外兩部分,對于容器里面的進程來說,它接觸到的各種資源都是虛擬的,從而實現(xiàn)與底層系統(tǒng)的隔離。因此作為進程級別的容器來講,無論是啟動速度還是資源占用都有著明顯的優(yōu)勢。

Docker則是目前最為流行的 Linux 容器解決方案,它本身 屬于 Linux 容器的一種封裝,因此也具有容器的諸多優(yōu)點。此外Docker對外提供簡單易用的容器接口,用戶可以方便地創(chuàng)建和使用容器。

2.Docker的優(yōu)勢

Docker 將應(yīng)用程序與該程序的依賴,打包在一個文件里面。運行這個文件,就會生成一個虛擬容器,該容器除了運行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,因此得以保證應(yīng)用性能的同時對系統(tǒng)的開銷加以節(jié)省。具體而言存在以下優(yōu)勢。

1. 高功效,低開銷

Docker是內(nèi)核級的虛擬化,Docker 容器的運行不需要額外的 hypervisor 支持,,因此可以實現(xiàn)更高的性能和效率。

2. 方便持續(xù)集成、快速交付與部署

傳統(tǒng)的軟件交付包括應(yīng)用程序、依賴軟件安裝包、配置說明文檔、安裝文檔、上線文檔等諸多文件,繁瑣復(fù)雜。使用Docker可以將交付物打包成鏡像(一個文件),簡化了交付模式,可以做到“一次構(gòu)建,多次交付”。當(dāng)涉及到應(yīng)用程序多副本部署或者應(yīng)用程序遷移時,更能體現(xiàn)Docker的價值。這對于部署來說也極大的減少部署的時間成本和人力成本。容器本身還可以進行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣,通過與代碼進行關(guān)聯(lián)使持續(xù)集成非常方便。

3. 便于拓展與遷移

Docker是一個開源的商業(yè)產(chǎn)品,支持大部分平臺與操作系統(tǒng),加之可以帶環(huán)境部署,所以當(dāng)在平臺間進行應(yīng)用程序遷移非常容易。同時一臺機器也可以運行多個容器,跑多個服務(wù),因此一臺機器也可以模擬出微服務(wù)架構(gòu),方便拓展與測試。

3.Docker安裝

Docker分為社區(qū)版(CE)與企業(yè)版(EE),企業(yè)版包含了一些收費服務(wù),安全性更高,個人開發(fā)者一般用不到,一下介紹面向社區(qū)版進行。

各平臺具體的安裝方式可參考Docker的官方文檔

在Linux環(huán)境下(CentOS 7),使用yum命令可以很方便的安裝。


yum install docker

安裝完成后啟動Docker


service docker start

#設(shè)置開機啟動

chkconfig docker on

安裝完成后,通過運行下面的命令,驗證是否安裝成功。


docker version

Docker 需要用戶具有 sudo 權(quán)限,為了避免每次命令都輸入sudo,可以把用戶加入 Docker 用戶組


sudo usermod -aG docker $USER

Docker 是CS架構(gòu)。命令行運行docker命令的時候,需要本機有 Docker 服務(wù)。如果這項服務(wù)沒有啟動,可以用下面的命令啟動


# service 命令的用法

sudo service docker start

# systemctl 命令的用法

sudo systemctl start docker

4.image文件

前邊我們說過,Docker 將應(yīng)用程序與該程序的依賴,打包在一個文件里面,該文件就是image文件,Docker 根據(jù) image 文件生成容器的實例。image文件是通用的,一般情況下我們都可以在Docker的官方倉庫 Docker Hub中使用別人制作好的 image 文件,省時省力。當(dāng)然也是可以制作并且上傳自己制作的容器文件的,后續(xù)會對次進行介紹。

對于image文件的操作:


# 列出本機的所有 image 文件。

$ docker image ls

# 刪除 image 文件

$ docker image rm [imageName]

國內(nèi)連接 Docker 的官方倉庫比較慢,可以將默認倉庫改成國內(nèi)的鏡像網(wǎng)站,具體參考官方文檔

下面操作可以運行一個 image 文件"hello world"作為示例:

首先,將 image 文件從倉庫拉取到本地:


$ docker image pull library/hello-world

該命令,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在倉庫里面的位置,其中l(wèi)ibrary是 image 文件所在的組,hello-world是 image 文件的名字。 Docker 官方提供的 image 文件,都放在library組里面,library可以省略。

抓取成功以后運行`$ docker image ls

`這個命令就可以在本機看到這個 image 文件了。

運行該image 文件:


$ docker container run hello-world

docker container run命令具有自動抓取 image 文件的功能。如果發(fā)現(xiàn)本地沒有指定的 image 文件,就會從倉庫自動抓取。因此,前面的docker image pull命令并不是必需的步驟。

運行成功后會看到該反饋


$ docker container run hello-world

Hello from Docker!

This message shows that your installation appears to be working correctly.

輸出這段提示以后,hello world就會停止運行,容器自動終止。

有些容器不會自動終止,因為提供的是服務(wù)。對于那些不會自動終止的容器,必須使用docker container kill 命令手動終止。


$ docker container kill [containID]

下文會介紹如何獲取containID

5.容器文件

通過運行image文件生成的容器實例,本身也是一個文件,稱為容器文件??梢酝ㄟ^以下命令查看


# 列出本機正在運行的容器

$ docker container ls

# 列出本機所有容器,包括終止運行的容器

$ docker container ls --all

運行該命令后可以查看CONTAINER ID


$docker container ls --all

CONTAINER ID        IMAGE              COMMAND            CREATED            STATUS                      PORTS               NAMES

a6bd5d7f089d        hello-world        "/hello"            46 seconds ago      Exited (0) 46 seconds ago                       stoic_cray

刪除容器文件


$ docker container rm [containerID]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容