1. 程式人生 > 實用技巧 >Dock Compose安裝和編排容器

Dock Compose安裝和編排容器

一個專案經常會引用到很多附加的服務,比如:一個網站需要mysql資料庫儲存資料、redis做資料快取、nginx反向代理等等。如果每次部署的時候都要一個個在docker中重新安裝一遍這些東西就太麻煩了。所以我們就需要一個工具負責實現對Docker容器叢集的快速編排。

Docker Compose 是一個用來定義和運行復雜應用的Docker工具,負責實現對 Docker 容器叢集的快速編排 。
Docker Compose 中的兩個重要概念:

  • 服務 (service):一個應用容器,實際上可以執行多個相同映象的例項。
  • 專案 (project):由一組關聯的應用容器組成的一個完整業務單元。

一個專案可以由多個服務關聯(容器)而成,並使用 docker-compose.yml 進行管理。

Docker Compose安裝

//下載
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
//設定許可權
sudo chmod +x /usr/local/bin/docker-compose
//檢視版本
docker-compose --version

安裝好之後我們就可以用 Docker Compose 進行容器編排

docker-compose.yml 配置檔案

首先,我們建立一個docker-compose.yml

檔案。

version: "3"
 
services:
  webapp:
    image_name: webapp  
    container_name: coreapp
    build:
        context: .
        dockerfile: Dockerfile
    ports: 
        - "8002:80"
    depends_on:
      - db
  db:
    image: mysql:5.7
    container_name: mysql
    restart: always
    ports: 
        - "3306:3306"
    environment: 
        MYSQL_ROOT_PASSWORD: "yourmysqlpsw"
    volumes: 
        - "./conf:/etc/mysql/conf.d"
        - "./logs:/logs"
        - "./data:/var/lib/mysql"

version的具體版本問題可以看官網文件
看配置檔案,我們可以知道這個專案一共包含了2個服務(webappmysql容器),分別是一個web網站和mysql資料庫。web通過mysql容器對外暴露的資料庫埠進行訪問(也可以通過容器間的網路進行訪問)。

webapp配置項

  • image_name: 指定構建image的名稱
  • container_name: 指定建立容器的名稱
  • build: 基於指定路徑的 Dockerfile 構建映象
//直接通過build指定路徑,預設配置檔案為Dockerfile
build: .

//通過context指定路徑,通過dockerfile指定配置檔案
build:
    context: .
    dockerfile: Dockerfile
  • ports: 埠對映指定伺服器埠:容器內部埠
  • depends_on: 容器啟動或停止時按順序進行,引數為 service 名稱

db配置項

  • restart: always 容器自動重啟
  • image: 基於指定映象(官方的 mysql:5.7 image)建立容器,如果映象不存在,Compose 會自動拉取映象
  • volumes: 指定建立容器時檔案卷對映路徑
  • environment: 設定建立容器時的引數

docker-compose.yml檔案放到之前的web專案目錄下,在++當前目錄++啟動專案。

cd www //進入專案目錄 
docker-compose up -d // 後臺執行容器
docker-compose ps    // 檢視執行中容器
docker-compose stop  // 停止容器

這裡可以看出設定depends_on在啟動和關閉容器時的效果,

Docker Compose 常用命令

命令 說明
docker-compose build 構建專案中的映象,--force-rm:刪除構建過程中的臨時容器;--no-cache:不使用快取構建;--pull:獲取最新版本的映象
docker-compose up -d 構建映象、建立服務和啟動專案,-d表示後臺執行
docker-compose run ubuntu ls -d 指定服務上執行一個命令,-d表示後臺執行
docker-compose logs 檢視服務容器輸出日誌
docker-compose ps 列出專案中所有的容器
docker-compose pause [service_name] 暫停一個服務容器
docker-compose unpause [service_name] 恢復已暫停的一個服務容器
docker-compose restart 重啟專案中的所有服務容器(也可以指定具體的服務)
docker-compose stop 停止執行專案中的所有服務容器(也可以指定具體的服務)
docker-compose start 啟動已經停止專案中的所有服務容器(也可以指定具體的服務)
docker-compose rm 刪除專案中的所有服務容器(也可以指定具體的服務),-f:強制刪除(包含執行的)
docker-compose kill 強制停止專案中的所有服務容器(也可以指定具體的服務)

目前web專案連線mysql是通過伺服器埠進行訪問的,其實還可以通過docker-compose.yml指定容器間的網路模式,直接訪問容器暴露的埠(使用expose只將埠暴露給連線的服務,而不暴露給主機)。當然相應的資料庫連線語句也需要修改了。留個坑,下次再填吧~

參考資料: