Compose 是 Docker 公司推出的一個工具軟件,能夠管理多個 Docker 容器組成一個應用。你須要定義一個 YAML 格式的配置文件docker-compose.yml,寫好多個容器之間的調用關係。而後,只要一個命令,就能同時啓動/關閉這些容器java
在上一篇文章中,咱們學會了如何建立自定義的docker image,那麼咱們爲何要用到docker-compose呢,一個完整的javaweb後臺服務應該包含的有 java服務,數據庫,nginx,等等一系列中間件,咱們能夠將他們塞近一個linux容器中,可是這樣很不方便維護,若是我想將nginx換個服務器,或者想要將數據庫升級爲主備須要重啓,那麼會影響到咱們的其餘服務,這不是咱們想要的,docker建議咱們每個容器中只運行一個服務,由於docker容器自己佔用資源極少,因此最好是將每一個服務單獨的分割開來mysql
可是這樣咱們又面臨了一個問題,若是我須要同時部署好多個服務,難道要每一個服務單獨寫Dockerfile而後在構建鏡像,構建容器,這樣累都累死了,因此docker官方給咱們提供了docker-compose多服務部署的工具linux
能夠選擇二進制方式安裝或pip安裝,我的推薦二進制,比pip方便不少,速度可能比較慢,耐心等待nginx
[root@iZbp1cwfb0i1aften1twtvZ registry]# sudo curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 744 0 --:--:-- --:--:-- --:--:-- 744
100 11.1M 100 11.1M 0 0 53254 0 0:03:40 0:03:40 --:--:-- 66396
複製代碼
賦予權限git
sudo chmod +x /usr/local/bin/docker-compose
複製代碼
查看版本github
[root@iZbp1cwfb0i1aften1twtvZ registry]# docker-compose -version
docker-compose version 1.23.0-rc3, build ea3d406e
複製代碼
按以上步驟正常走完 docker-compose 就安裝完成辣web
相似docker中的Dockerfile,docker-compose中使用YAML格式的文件對docker-compose中的服務進行管理sql
在docker-compose中有兩個基礎概念docker
先看一個樣例docker-compose.yml文件數據庫
version: '2'
services:
nginx:
image: nginx:latest
ports:
- '80:80'
- '1443:443'
volumes:
- /home/docker/nginx/:/nginx/
mysql:
image: mysql:latest
ports:
- '3306:3306'
volumes:
- /home/docker/nginx:/mysql/
myserver:
build:
context: ./
dockerfile: myserver.dockerfile
image: myserver:latest
volumes:
- /home/docker/myserver:/myserver
depends_on:
- mysql
- nginx
environment:
- PROFILE=test
複製代碼
nginx,mysql,myserver是要啓動的三個服務,寫的順序並不必定表明啓動的順序,能夠看到myserver服務下面有一個depends_on屬性,來決定依賴某些項目,這使得docker-compose會優先啓動依賴的項目.
接下來咱們對docker-compose.yml的參數進行一個解讀
寫好一個docker-compose.yml運行命令docker-compose up -d
便可執行
格式
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
命令選項以下:
-f,–file FILE指定Compose模板文件,默認爲docker-compose.yml,能夠屢次指定。
-p,–project-name NAME指定項目名稱,默認將使用所在目錄名稱做爲項目名。
-x-network-driver 使用Docker的可拔插網絡後端特性(須要Docker 1.9+版本) -x-network-driver DRIVER指定網絡後端的驅動,默認爲bridge(須要Docker 1.9+版本)
-verbose輸出更多調試信息
-v,–version打印版本並退出
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
選項包括:
-d 在後臺運行服務容器
–no-color 不使用顏色來區分不一樣的服務的控制輸出
–no-deps 不啓動服務所連接的容器
–force-recreate 強制從新建立容器,不能與–no-recreate同時使用
–no-recreate 若是容器已經存在,則不從新建立,不能與–force-recreate同時使用
–no-build 不自動構建缺失的服務鏡像
–build 在啓動容器前構建服務鏡像
–abort-on-container-exit 中止全部容器,若是任何一個容器被中止,不能與-d同時使用
-t, –timeout TIMEOUT 中止容器時候的超時(默認爲10秒)
–remove-orphans 刪除服務中沒有在compose文件中定義的容器
–scale SERVICE=NUM 設置服務運行容器的個數,將覆蓋在compose中經過scale指定的參數
docker-compose up
啓動全部服務
docker-compose up -d
在後臺全部啓動服務
-f 指定使用的Compose模板文件,默認爲docker-compose.yml,能夠屢次指定。
docker-compose -f docker-compose.yml up -d
docker-compose ps [options] [SERVICE...]
docker-compose ps
列出項目中目前的全部容器
docker-compose stop [options] [SERVICE...]
選項包括:
-t, –timeout TIMEOUT 中止容器時候的超時(默認爲10秒)
docker-compose stop
中止正在運行的容器,能夠經過docker-compose start 再次啓動
docker-compose -h
查看幫助
docker-compose down [options]
中止和刪除容器、網絡、卷、鏡像。
選項包括:
–rmi type,刪除鏡像,類型必須是:all,刪除compose文件中定義的全部鏡像;local,刪除鏡像名爲空的鏡像
-v, –volumes,刪除已經在compose文件中定義的和匿名的附在容器上的數據卷
–remove-orphans,刪除服務中沒有在compose中定義的容器
docker-compose down
停用移除全部容器以及網絡相關
docker-compose logs [options] [SERVICE...]
查看服務容器的輸出。默認狀況下,docker-compose將對不一樣的服務輸出使用不一樣的顏色來區分。能夠經過–no-color來關閉顏色。
docker-compose logs
查看服務容器的輸出
docker-compose build [options] [--build-arg key=val...] [SERVICE...]
構建(從新構建)項目中的服務容器。
選項包括:
–compress 經過gzip壓縮構建上下環境
–force-rm 刪除構建過程當中的臨時容器
–no-cache 構建鏡像過程當中不使用緩存
–pull 始終嘗試經過拉取操做來獲取更新版本的鏡像
-m, –memory MEM爲構建的容器設置內存大小
–build-arg key=val爲服務設置build-time變量
服務容器一旦構建後,將會帶上一個標記名。能夠隨時在項目目錄下運行
docker-compose build來從新構建服務
docker-compose pull [options] [SERVICE...]
拉取服務依賴的鏡像。
選項包括:
–ignore-pull-failures,忽略拉取鏡像過程當中的錯誤
–parallel,多個鏡像同時拉取
–quiet,拉取鏡像過程當中不打印進度信息
docker-compose pull
拉取服務依賴的鏡像
docker-compose restart [options] [SERVICE...]
重啓項目中的服務。
選項包括:
-t, –timeout TIMEOUT,指定重啓前中止容器的超時(默認爲10秒)
docker-compose restart
重啓項目中的服務
docker-compose rm [options] [SERVICE...]
刪除全部(中止狀態的)服務容器。
選項包括:
–f, –force,強制直接刪除,包括非中止狀態的容器
-v,刪除容器所掛載的數據卷
docker-compose rm
刪除全部(中止狀態的)服務容器。推薦先執行docker-compose stop命令來中止容器。
docker-compose start [SERVICE...]
docker-compose start
啓動已經存在的服務容器。
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服務上執行一個命令。
docker-compose run ubuntu ping www.baidu.com
在指定容器上執行一個ping命令。
docker-compose scale web=3 db=2
設置指定服務運行的容器個數。經過service=num的參數來設置數量
docker-compose pause [SERVICE...]
暫停一個服務容器
docker-compose kill [options] [SERVICE...]
經過發送SIGKILL信號來強制中止服務容器。
支持經過-s參數來指定發送的信號,例如經過以下指令發送SIGINT信號:
docker-compose kill -s SIGINT
docker-compose config [options]
驗證並查看compose文件配置。
選項包括:
–resolve-image-digests 將鏡像標籤標記爲摘要
-q, –quiet 只驗證配置,不輸出。 當配置正確時,不輸出任何內容,當文件配置 錯誤,輸出錯誤信息
–services 打印服務名,一行一個
–volumes 打印數據卷名,一行一個
docker-compose create [options] [SERVICE...]
爲服務建立容器。
選項包括:
–force-recreate:從新建立容器,即便配置和鏡像沒有改變,不兼容 –no-recreate參數
–no-recreate:若是容器已經存在,不須要從新建立,不兼容–force-recreate參 數
–no-build:不建立鏡像,即便缺失
–build:建立容器前,生成鏡像
docker-compose exec [options] SERVICE COMMAND [ARGS...]
選項包括:
-d 分離模式,後臺運行命令。
–privileged 獲取特權。
–user USER 指定運行的用戶。
-T 禁用分配TTY,默認docker-compose exec分配TTY。
–index=index,當一個服務擁有多個容器時,可經過該參數登錄到該服務下的任何 服務,
例如:docker-compose exec –index=1 web /bin/bash ,web服務中包含 多個容器
docker-compose port [options] SERVICE PRIVATE_PORT
顯示某個容器端口所映射的公共端口。
選項包括:
–protocol=proto,指定端口協議,TCP(默認值)或者UDP
–index=index,若是贊成服務存在多個容器,指定命令對象容器的序號(默認爲1)
docker-compose push [options] [SERVICE...]
推送服務依的鏡像。
選項包括:
–ignore-push-failures 忽略推送鏡像過程當中的錯誤
docker-compose stop [options] [SERVICE...]
顯示各個容器運行的進程狀況。
docker-compose unpause [SERVICE...]
恢復處於暫停狀態中的服務。
docker-compose version
打印版本信息。
有興趣能夠關注個人我的微信公衆號,會按期推送關於Java的技術文章,並且目前不恰飯都是乾貨哈哈哈哈