Centos 從安裝到部署之 Docker篇(二)

yvanwangl發表於2018-02-12

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

本篇文章作為 《 Centos 從安裝到部署》 的第二篇文章,將會為大家簡單介紹一下 Docker 的基本命令及使用,

為下一篇 應用的自動化構建及部署做一個知識鋪墊。如果閱讀過程中發現有疑問可以在文章末尾留言討論 : ),主要內容如下:

  1. 如何在 Centos 上 安裝 Docker 及 docker-compose
  2. 如何構建應用映象
  3. 如何執行應用容器

一、如何安裝 Docker

Docker支援以下的 CentOS 版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

Docker 軟體包和依賴包已經包含在預設的 CentOS-Extras 軟體源裡,安裝命令如下:

yum -y install docker複製程式碼

安裝完成後,啟動 Docker 後臺服務:

service docker start複製程式碼

恭喜你,Docker 已經成功安裝並執行了。接下來我們要拉取一個映象,然後執行一個容器,你沒猜錯,我們就是要測試執行 hello-word

docker run hello-world複製程式碼

Docker首先從本地主機上查詢映象是否存在,由於我們的本地沒有 hello-world 這個映象,所以 Docker 就會從映象倉庫 Docker Hub 下載一個 hello-world 的映象,並在容器內執行。

下面介紹幾個 Docker 常用的命令:

1、檢視本機 Docker 映象,可以看到映象名稱、標籤、id等資訊

docker images複製程式碼

2、從 Docker Hub 中查詢映象

docker search <image_name>複製程式碼

3、拉取 Docker 映象到本地

docker pull <image_name:tag>複製程式碼

4、刪除本地指定映象

docker rm image <image_name / image_id>複製程式碼

5、構建本地映象,需要切換到要構建映象的目錄下,並確保目錄下存在 Dockerfile 檔案

docker build -t <image_name>:<tag> .複製程式碼

6、根據映象 啟動容器

docker run <image_name>

帶引數啟動
docker run -d -i -t -p 3000:3002 --name <container_name> --link=<linked_container_name>:<alias_name> <image_name>

引數說明:
-d            讓容器在後臺執行
-p            將容器內部的網路埠對映到我們使用的宿主機上    3000 為宿主機埠    3002 為容器埠
-i            允許我們對容器進行互動性輸入
-t            在容器內指定一個偽終端或終端
--name        指定容器的名稱
--link        連線到其他容器複製程式碼

7、檢視執行中的容器

docker ps 
//檢視所有容器,包括已經停止的容器
docker ps -a複製程式碼

8、進入執行中的容器

docker exec -it <container_name> bash複製程式碼

9、檢視指定容器日誌

docker logs <container_name / container_id>複製程式碼

10、停止容器

docker stop <container_name>複製程式碼

11、刪除容器,注意,刪除容器前一定要先停止容器,否則會報錯

docker rm <container_name>複製程式碼

基本上掌握了這些命令,我們就可以愉快的玩耍了,可以從容的拉取映象,啟動容器,並檢視日誌,也可以停止容器並刪除容器。

從步驟 6 相信大家也看到了,如果要帶引數執行容器,我們不僅要記住很多引數,而且每次啟動容器都需要再輸入一遍,不僅繁瑣,而且容易出錯,“偷懶”是程式設計師的天性 。有沒有一直方式,讓我們可以把這些引數都寫在一個檔案裡,再次啟動容器的時候去讀取這個檔案的配置資訊呢? 肯定是有的。這時我們就要請出 docker-compose 了。

二、安裝 docker-compose

docker-compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器叢集的快速編排。docker-compose 的定位是 「定義和執行多個 Docker 容器的應用(Defining and running multi-container Docker applications)」,其前身是開源專案 Fig。

在 Centos 上安裝 docker-compose 也是非常簡單:

1、執行以下命令下載最新的 docker-compose 安裝包:

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose複製程式碼

當然過幾天,這個就不是最新的版本了,可以通過檢視 docker-compose 在 github 上的 release 來獲取最新版本號。

2、增加 docker-compose 可執行許可權

sudo chmod +x /usr/local/bin/docker-compose複製程式碼

3、測試 docker-compose 是否正確安裝

$ docker-compose --version
docker-compose version 1.18.0, build 1719ceb複製程式碼

至此,docker-compose 的安裝也已經順利完成了!

三、如何使用 docker-compose 來執行容器

在第一部分中,我們已經學習瞭如何直接使用 docker 命令來執行一個容器,這一節,我們將會了解到如何通過 docker-compose 來編排容器。

docker-compose 可以同時對多個容器進行編排執行。為什麼會有多個容器同時執行的需求呢?例如要部署一個 web 應用,除了我們的 web 服務容器本身以外,還需要後端資料庫容器(mongo),甚至需要負載均衡配置的容器(nginx)等。docker-compose 恰好就可以完美解決這樣的需求,它允許使用者通過一個單獨的 docker-compose.yml 模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project)。

下面我們將以一個 node 專案為例,後端資料庫使用 mongo 來編寫一個 docker-compose.yml 檔案,來感受一下使用 docker-compose 啟動多個關聯的容器是多麼的方便:

version: '3'                                                   
services:
  recatch-service:                                                 
    image: yvanwang/recatch-service:latest                                                          
    ports:
      - "8082:8082"
  mongodb:
    image: mongo:3.4
    ports:
      - "27017:27017"
    command: mongod -f /etc/mongod.conf
    volumes:
      - "./mongod.conf:/etc/mongod.conf"
      - "/var/lib/mongo:/data/db"複製程式碼

有了這麼一個 docker-compose.yml 檔案,接下來你只需要在該檔案所在的目錄執行一行命令:

docker-compose up -d複製程式碼

即可同時啟動兩個容器了,是不是很方便,而且也免去了每次啟動容器都需要輸入一堆引數的麻煩。以下將對 compose 模板檔案的配置進行簡單的介紹:

version:compose 檔案的版本號,compose 檔案版本號與docker-compose的版本對映關係

services:定義將要執行的容器集合

recatch-service:容器名稱

image:指定為映象名稱或映象 ID。如果映象在本地不存在,compose 將會嘗試拉去這個映象

ports:暴露埠,使用宿主埠:容器埠 (HOST:CONTAINER) 格式,如果僅僅指定容器的埠(宿主將會隨機選擇埠)

command:容器啟動時執行的命令

volumes:資料卷所掛載路徑設定。格式為(HOST:CONTAINER),該項的配置是為了將 容器的資料 掛載到主機上,可以將容器產生的資料和容器分離開,這樣當你將容器刪除之後,容器的資料依然存在。例如在 mongodb 的配置中,

- "/var/lib/mongo:/data/db"複製程式碼

就是將容器內資料的儲存路徑掛載到主機的 /var/lib/mongo 下,這樣當容器刪除後,mongo 的資料檔案依然存在於主機的 /var/lib/mongo 資料夾下。

恭喜你,看到這裡,你基本就已經掌握了 docker 的基本操作,已經擁有了構建 docker 映象及部署容器的基礎知識。下一篇我們將一起來探索如何藉助 docker 及 daocloud 來實現應用的自動構建及部署,cheers !


本文首發於我的個人部落格:Centos 從安裝到部署之 Docker(二)


Docker 學習資料:

Docker — 從入門到實踐 (推薦 *****)

深入理解Docker Volume(一)

深入理解Docker Volume(二)


相關文章