Dock Compose安裝和編排容器
阿新 • • 發佈:2020-06-30
一個專案經常會引用到很多附加的服務,比如:一個網站需要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個服務(webapp
和mysql
容器),分別是一個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只將埠暴露給連線的服務,而不暴露給主機)。當然相應的資料庫連線語句也需要修改了。留個坑,下次再填吧~
參考資料: