Docker基礎教程(3)-Docker三劍客之Docker-compose

什麼是docker-compose

Compose 是 Docker 公司推出的一個工具軟件,能夠管理多個 Docker 容器組成一個應用。你須要定義一個 YAML 格式的配置文件docker-compose.yml,寫好多個容器之間的調用關係。而後,只要一個命令,就能同時啓動/關閉這些容器java

爲何要用docker-compose

在上一篇文章中,咱們學會了如何建立自定義的docker image,那麼咱們爲何要用到docker-compose呢,一個完整的javaweb後臺服務應該包含的有 java服務,數據庫,nginx,等等一系列中間件,咱們能夠將他們塞近一個linux容器中,可是這樣很不方便維護,若是我想將nginx換個服務器,或者想要將數據庫升級爲主備須要重啓,那麼會影響到咱們的其餘服務,這不是咱們想要的,docker建議咱們每個容器中只運行一個服務,由於docker容器自己佔用資源極少,因此最好是將每一個服務單獨的分割開來mysql

可是這樣咱們又面臨了一個問題,若是我須要同時部署好多個服務,難道要每一個服務單獨寫Dockerfile而後在構建鏡像,構建容器,這樣累都累死了,因此docker官方給咱們提供了docker-compose多服務部署的工具linux

安裝docker-compose

能夠選擇二進制方式安裝或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-compose簡介

相似docker中的Dockerfile,docker-compose中使用YAML格式的文件對docker-compose中的服務進行管理sql

在docker-compose中有兩個基礎概念docker

  • 服務(service):一個應用容器,即docker容器例如上面說到的mysql容器,或者nginx容器
  • 項目(project):由一組關聯的應用容器組成的一個完整業務單元,好比上面所講的由 mysql、web app、nginx 容器組成的網站。docker-compose 面向項目進行管理

docker-compose模板文件簡介

先看一個樣例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的參數進行一個解讀

  • version表示咱們的 compose 文件的版本,目前有 1,2,3,每一個版本語法不盡相同,這裏以版本 2 爲例。
  • services: 即咱們要開始定義服務,每一個 docker 容器爲一個服務。
  • nginx,mysql,myserver:這裏咱們定義了服務的名字
  • build 在該版本中build指令不能跟image同時使用,不然Compose將不肯定根據哪一個指令來生成最終的服務鏡像。
  • image 指定一個鏡像,若是本地不存在docker-compose會嘗試從遠程拉取鏡像
  • volumes: 掛載的數據卷 與命令行中的-v 做用相同
  • environment: 指定環境變量
  • container_name: Compose的容器名稱格式是:<項目名稱><服務名稱><序號> 能夠自定義項目名稱、服務名稱,但若是想徹底控制容器的命名,可使用標籤指定
  • extends: 能夠指定基於某個模板文件來拓展,可是要注意循環依賴的問題,而且不會繼承links和volumes_from中定義的容器和數據卷資源
  • net: 設置網絡模式 可選參數"bridge"(橋接網絡),"none"(無網絡),"host"(與服務器共享網絡)

寫好一個docker-compose.yml運行命令docker-compose up -d便可執行

docker-compose經常使用命令

Docker-Compose命令

  • 格式

  • 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

  • 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

  • docker-compose ps [options] [SERVICE...]

  • docker-compose ps

  • 列出項目中目前的全部容器

docker-compose stop

  • docker-compose stop [options] [SERVICE...]

  • 選項包括:

  • -t, –timeout TIMEOUT 中止容器時候的超時(默認爲10秒)

  • docker-compose stop

  • 中止正在運行的容器,能夠經過docker-compose start 再次啓動

docker-compose -h

  • docker-compose -h

  • 查看幫助

docker-compose down

  • docker-compose down [options]

  • 中止和刪除容器、網絡、卷、鏡像。

  • 選項包括:

  • –rmi type,刪除鏡像,類型必須是:all,刪除compose文件中定義的全部鏡像;local,刪除鏡像名爲空的鏡像

  • -v, –volumes,刪除已經在compose文件中定義的和匿名的附在容器上的數據卷

  • –remove-orphans,刪除服務中沒有在compose中定義的容器

  • docker-compose down

  • 停用移除全部容器以及網絡相關

docker-compose logs

  • docker-compose logs [options] [SERVICE...]

  • 查看服務容器的輸出。默認狀況下,docker-compose將對不一樣的服務輸出使用不一樣的顏色來區分。能夠經過–no-color來關閉顏色。

  • docker-compose logs

  • 查看服務容器的輸出

docker-compose build

  • 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

  • docker-compose pull [options] [SERVICE...]

  • 拉取服務依賴的鏡像。

  • 選項包括:

  • –ignore-pull-failures,忽略拉取鏡像過程當中的錯誤

  • –parallel,多個鏡像同時拉取

  • –quiet,拉取鏡像過程當中不打印進度信息

  • docker-compose pull

  • 拉取服務依賴的鏡像

docker-compose restart

  • docker-compose restart [options] [SERVICE...]

  • 重啓項目中的服務。

  • 選項包括:

  • -t, –timeout TIMEOUT,指定重啓前中止容器的超時(默認爲10秒)

  • docker-compose restart

  • 重啓項目中的服務

docker-compose rm

  • docker-compose rm [options] [SERVICE...]

  • 刪除全部(中止狀態的)服務容器。

  • 選項包括:

  • –f, –force,強制直接刪除,包括非中止狀態的容器

  • -v,刪除容器所掛載的數據卷

  • docker-compose rm

  • 刪除全部(中止狀態的)服務容器。推薦先執行docker-compose stop命令來中止容器。

docker-compose start

  • docker-compose start [SERVICE...]

  • docker-compose start

  • 啓動已經存在的服務容器。

docker-compose run

  • 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

  • docker-compose scale web=3 db=2

  • 設置指定服務運行的容器個數。經過service=num的參數來設置數量

docker-compose pause

  • docker-compose pause [SERVICE...]

  • 暫停一個服務容器

docker-compose kill

  • docker-compose kill [options] [SERVICE...]

  • 經過發送SIGKILL信號來強制中止服務容器。

  • 支持經過-s參數來指定發送的信號,例如經過以下指令發送SIGINT信號:

  • docker-compose kill -s SIGINT

dokcer-compose config

  • docker-compose config [options]

  • 驗證並查看compose文件配置。

  • 選項包括:

  • –resolve-image-digests 將鏡像標籤標記爲摘要

  • -q, –quiet 只驗證配置,不輸出。 當配置正確時,不輸出任何內容,當文件配置 錯誤,輸出錯誤信息

  • –services 打印服務名,一行一個

  • –volumes 打印數據卷名,一行一個

docker-compose create

  • docker-compose create [options] [SERVICE...]

  • 爲服務建立容器。

  • 選項包括:

  • –force-recreate:從新建立容器,即便配置和鏡像沒有改變,不兼容 –no-recreate參數

  • –no-recreate:若是容器已經存在,不須要從新建立,不兼容–force-recreate參 數

  • –no-build:不建立鏡像,即便缺失

  • –build:建立容器前,生成鏡像

docker-compose exec

  • 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

  • docker-compose port [options] SERVICE PRIVATE_PORT

  • 顯示某個容器端口所映射的公共端口。

  • 選項包括:

  • –protocol=proto,指定端口協議,TCP(默認值)或者UDP

  • –index=index,若是贊成服務存在多個容器,指定命令對象容器的序號(默認爲1)

docker-compose push

  • docker-compose push [options] [SERVICE...]

  • 推送服務依的鏡像。

  • 選項包括:

  • –ignore-push-failures 忽略推送鏡像過程當中的錯誤

docker-compose stop

  • docker-compose stop [options] [SERVICE...]

  • 顯示各個容器運行的進程狀況。

docker-compose unpause

  • docker-compose unpause [SERVICE...]

  • 恢復處於暫停狀態中的服務。

docker-compose version

  • docker-compose version

  • 打印版本信息。

有興趣能夠關注個人我的微信公衆號,會按期推送關於Java的技術文章,並且目前不恰飯都是乾貨哈哈哈哈

小阿宅Java
相關文章
相關標籤/搜索