1 容器化 vs 虛擬化與 Docker 基本操作

容器化 vs 虛擬化

Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

從前文 技術的架構圖中,你能清晰地看出,虛擬化技術是由虛擬機管理程序創建抽象層並完成分離,使多個操作系統運行在單一的硬件平臺之上。

而你安裝操作系統的目的,不就是為了提供環境以使用某個特定的應用程序嗎?如此看來,虛擬化技術通過一個完整的內核來為你實現隔離的代價確是很大。

容器是一個打包了代碼及其全部依賴的軟件標準單元,是依靠內核功能,對操作系統而非硬件的虛擬化。單詞容器 container 又有集裝箱之意,這樣一層封裝便如同集裝箱一樣為你帶來了隔離與標準。

接下來就是如今最主流的容器化技術 Dcoker。


Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

安裝 Docker

這裡使用的是 Docker Community Edition (docker-ce),官方安裝指南:https://docs.docker.com/install/linux/docker-ce/centos

首先安裝必要的程序包,並且設置穩定的 Docker 倉庫:

<code>yum install yum-utils device-mapper-persistent-data lvm2 -y
yum-config-manager \\ 
--add-repo \\
https://download.docker.com/linux/centos/docker-ce.repo/<code>

接著安裝最新社區版的 Docker 引擎以及 containerd:

<code>yum install docker-ce docker-ce-cli containerd.io/<code>

啟動 Docker 並且通過運行 hello-world 鏡像驗證安裝結果:

<code>systemctl start dockerdocker run hello-world/<code>

後文,先來對其輸出來學習 Docker,

Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

知識點

此 Docker 的架構圖取自官網:

Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

docker.com

其為 C/S 架構,Docker 客戶端工具與 Docker 守護進程通信,以完成鏡像的構建、拉取以及容器的運行等操作。

你敲擊 docker run,通過 Docker Client 向監聽中的 dockerd 進程發送運行容器命令。如輸出第一行所示,你本地沒有名為 hello-world 且默認標籤為 lateset 的鏡像。隨後便開始了從 registry 遠程倉庫的拖拽操作。

再看向第二段,該容器只完成了一件事,輸出操作。隨著該指令運行完成的退出,其容器也退出了,

<code>docker container ls --all/<code>

查詢當前全部容器的狀態,其中也記錄它退出了的時間信息。

為 Docker 加速!編輯 /etc/docker/daemon.json 為其添加如下一行,並重新啟動服務:

<code>{    "registry-mirrors": ["https://registry.docker-cn.com"]    }
systemctl restart docker/<code>

來一個更大點的,在容器上安裝 CentOS 系統;-i 指明你將要 interactive 交互式地運行 /bin/bash,併為其分配 tty 終端,

<code>docker container run -it centos /bin/bash/<code>

以容器化的方式創建操作系統就是這麼簡單,而且通過 docker image ls 命令查看鏡像信息,它也僅僅 237MB。

當然在 Docker 中僅僅運行一個應用程序,才是其高明之處。這裡以 httpd 為例 ,先拖拽鏡像,

<code>docker pull httpd/<code>

同樣拖拽的是默認 latest 標籤的鏡像,其中 -d 意為在後臺運行容器,並將之命名為 web1,同時將容器中的 80 端口發佈在主機上的 8080 端口,

<code>docker container run --name web1 -d -p 8080:80 httpd/<code> 

容器啟動後,你來通過 curl 命令訪問本機的 8080 端口,

<code>curl localhost:8080/<code>

It works!

Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

最後還要為你介紹查看容器信息的命令,

<code>docker container inspect web1/<code>
Docker 入門 | 1 容器化 vs 虛擬化與 Docker 基本操作

輸出結果中,不難找到容器 web1 的 ip 地址為 172.17.0.2,接著通過 curl 命令訪問 web1 的 80 端口,

<code>curl 172.17.0.2:80/<code>

同樣,It works!

關注 一棟人,訂閱下期內容。


分享到:


相關文章: