Docker-Compose簡介
Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集羣的快速編排, 並且提供了 scale (服務擴容) 的功能。
Docker-Compose將所管理的容器分爲三層,分別是工程(project),服務(service)以及容器(container)。Docker-Compose運行目錄下的所有文件(docker-compose.yml,extends文件或環境變量文件等)組成一個工程,若無特殊指定工程名即爲當前目錄名。一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像,參數,依賴。一個服務當中可包括多個容器實例,Docker-Compose並沒有解決負載均衡的問題,因此需要藉助其它工具實現服務發現及負載均衡。
Docker-Compose的工程配置文件默認爲docker-compose.yml,可通過環境變量COMPOSE_FILE或-f參數自定義配置文件,其定義了多個有依賴關係的服務及每個服務運行的容器。
使用一個Dockerfile模板文件,可以讓用戶很方便的定義一個單獨的應用容器。在工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個Web項目,除了Web服務容器本身,往往還需要再加上後端的數據庫服務容器,甚至還包括負載均衡容器等。
Compose允許用戶通過一個單獨的docker-compose.yml模板文件(YAML 格式)來定義一組相關聯的應用容器爲一個項目(project)。
Docker-Compose項目由Python編寫,調用Docker服務提供的API來對容器進行管理。因此,只要所操作的平臺支持Docker API,就可以在其上利用Compose來進行編排管理。
假如,你有一個java鏡像,一個mysql鏡像,一個nginx鏡像。如果沒有docker-compose,那麼每次啓動的時候,你需要敲各個容器的啓動參數,環境變量,容器命名,指定不同容器的鏈接參數等等一系列的操作,相當繁瑣。而用了docker-composer之後,你就可以把這些命令一次性寫在docker-composer.yml文件中,以後每次啓動這一整個環境(含3個容器)的時候,你只要敲一個docker-composer up命令就ok了。
先簡單理解 docker 的使用過程,它分爲鏡像構建與容器啓動。
鏡像構建:即創建一個鏡像,它包含安裝運行所需的環境、程序代碼等。這個創建過程就是使用 dockerfile 來完成的。
容器啓動:容器最終運行起來是通過拉取構建好的鏡像,通過一系列運行指令(如端口映射、外部數據掛載、環境變量等)來啓動服務的。針對單個容器,這可以通過 docker run 來運行。
而如果涉及多個容器的運行(如服務編排)就可以通過docker-compose來實現,它可以輕鬆的將多個容器作爲 service 來運行(當然也可僅運行其中的某個),並且提供了 scale (服務擴容) 的功能。
簡單總結:
dockerfile: 構建鏡像;
docker run: 啓動容器;
docker-compose: 啓動服務;
安裝
推薦官方安裝
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
[root@rancher ~]# docker-compose -v
docker-compose version 1.24.1, build 4667896b
卸載
如果是二進制包方式安裝的,刪除二進制文件即可:
sudo rm /usr/local/bin/docker-compose
如果通過Python pip工具安裝的,則執行如下命令刪除:
sudo pip uninstall docker-compose
常用命令
-f,–file FILE指定Compose模板文件,默認爲docker-compose.yml,可以多次指定。
-p, 指定docker-compose的項目目錄,也就是docker-compose.yml文件的存儲目錄
-v,–version打印版本並退出
docker-compose ps 顯示所有容器
docker-compose up -d nginx 構建並在後臺啓動nginx容器,不加nginx,啓動所有服務,下面的等同。
docker-compose run 允許爲你的應用程序運行一次性命令
docker-compose start nginx 啓動nginx容器
docker-compose restart nginx 重啓nginx容器 (注意是編排文件中的service)
docker-compose stop nginx 停止nginx容器
docker-compose pause nginx 暫停nginx容器
docker-compose unpause nginx 恢復nginx容器
docker-compose kill nginx 強制停止nginx容器
docker-compose rm nginx 刪除nginx容器(刪除前必須關閉容器)
docker-compose exec nginx bash 登錄到nginx容器中
docker-compose down -v 停止並刪除容器、網絡、映像和卷,-v(--volumes)刪除容器的數據卷
docker-compose logs -f --tail 50 nginx 查看nginx的實時日誌,只看最後50行。
docker-compose events --json nginx 以json的形式輸出nginx的docker日誌
docker-compose config -q 驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。
docker-compose build nginx 構建鏡像
docker-compose build --no-cache nginx 不帶緩存的構建。
docker-compose scale 設置服務的容器數量
docker-compose pull 拉取服務鏡像
docker-compose push 推送服務鏡像