Docker-compose基礎知識梳理

原文:Docker-compose基礎知識梳理 - 9ong


docker-compose

Compose 是用于定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建并啟動所有服務。

基本步驟

Compose 使用的三個步驟:

  • 使用 Dockerfile 定義應用程序的環境。
  • 使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
  • 最后,執行 docker-compose up 命令來啟動并運行整個應用程序。

docker-compose.yml配置范例

version: "3.1"
services:

    webserver:
      image: nginx:alpine
      container_name: jm-php7-2-webserver
      working_dir: /application
      volumes:
          - /var/www/html:/application
          - /var/log/nginx:/var/log/nginx
          - /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8081:80"

    php-fpm:
      build: /var/www/docker/nginx+php/php7.2
      container_name: jm-php7-2-php-fpm
      working_dir: /application
      volumes:
        - /var/www/html:/application
        - /var/www/docker/nginx+php/php7.2/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

php-fpm服務build采用的Dockerfile:

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

# Install selected extensions and other stuff
RUN apt-get update \
    && apt-get -y --no-install-recommends install  php7.2-mysql php-redis php7.2-gd php-yaml \
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

docker-compose安裝

Docker-compose安裝

常用yml配置指令

  • build

    指定為構建鏡像上下文路徑:

    例如php-fpm 服務,指定為從上下文路徑 /var/www/docker/nginx+php/php7.2/Dockerfile 所構建的鏡像。

  • container_name

    指定自定義容器名稱,而不是生成的默認名稱。

  • depends_on

    設置依賴關系。

    docker-compose up :以依賴性順序啟動服務。在以下示例中,先啟動 db 和 redis ,才會啟動 web。
    docker-compose up SERVICE :自動包含 SERVICE 的依賴項。在以下示例中,docker-compose up web 還將創建并啟動 db 和 redis。
    docker-compose stop :按依賴關系順序停止服務。在以下示例中,web 在 db 和 redis 之前停止。

    version: "3.7"
    services:
    web:
        build: .
        depends_on:
        - db
        - redis
    redis:
        image: redis
    db:
        image: postgres
    

    注意:web 服務不會等待 redis db 完全啟動 之后才啟動。

  • dns

    自定義 DNS 服務器,可以是單個值或列表的多個值。

  • healthcheck

    用于檢測 docker 服務是否健康運行。

    healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"] # 設置檢測程序
    interval: 1m30s # 設置檢測間隔
    timeout: 10s # 設置檢測超時時間
    retries: 3 # 設置重試次數
    start_period: 40s # 啟動后,多少秒開始啟動檢測程序
    
  • image

    指定容器運行的鏡像。以下格式都可以:

    image: redis
    image: ubuntu:14.04
    image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd # 鏡像id
    
  • restart

    • no:是默認的重啟策略,在任何情況下都不會重啟容器。
    • always:容器總是重新啟動。
    • on-failure:在容器非正常退出時(退出狀態非0),才會重啟容器。
    • unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
    

    注:swarm 集群模式,請改用 restart_policy。

  • ulimits

    覆蓋容器默認的 ulimit。

    ulimits:
    nproc: 65535
    nofile:
        soft: 20000
        hard: 40000
    
  • volumes

    將主機的數據卷或著文件掛載到容器里。

    webserver:
      image: nginx:alpine
      container_name: jm-php7-2-webserver
      working_dir: /application
      volumes:
          - /var/www/html:/application
          - /var/log/nginx:/var/log/nginx
          - /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    
  • logging

    服務的日志記錄配置。

    driver:指定服務容器的日志記錄驅動程序,默認值為json-file。有以下三個選項

    driver: "json-file"
    driver: "syslog"
    driver: "none"
    

    僅在 json-file 驅動程序下,可以使用以下參數,限制日志得數量和大小。

    logging:
    driver: json-file
    options:
        max-size: "200k" # 單個文件大小為200k
        max-file: "10" # 最多10個文件
    

    當達到文件限制上限,會自動刪除舊得文件。

    syslog 驅動程序下,可以使用 syslog-address 指定日志接收地址。

    logging:
    driver: syslog
    options:
        syslog-address: "tcp://192.168.0.42:123"
    

docker-compose操作指令

docker-compose操作命令需要在配置文件docker-compose.yml所在目錄或子目錄操作才會生效。

如果需要sudo時,要注意使用sudo執行。

docker-compose --help你會看到如下這么多命令

  • build

    Build or rebuild services

  • bundle

    Generate a Docker bundle from the Compose file

  • config

    Validate and view the Compose file

  • create

    Create services

  • down

    Stop and remove containers, networks, images, and volumes

  • events

    Receive real time events from containers

  • exec

    Execute a command in a running container

  • help

    Get help on a command

  • images

    List images

  • kill

    Kill containers

  • logs

    View output from containers

  • pause

    Pause services

  • port

    Print the public port for a port binding

  • ps

    List containers

  • pull

    Pull service images

  • push

    Push service images

  • restart

    Restart services

  • rm

    Remove stopped containers

  • run

    Run a one-off command

  • scale

    Set number of containers for a service

  • start

    Start services

  • stop

    Stop services

  • top

    Display the running processes

  • unpause

    Unpause services

  • up

    Create and start containers

  • version

    Show the Docker-Compose version information

docker-compose常用命令

docker-compose up -d nginx                     構建建啟動nignx容器

docker-compose exec nginx bash            登錄到nginx容器中

docker-compose down                              刪除所有nginx容器,鏡像

docker-compose ps                                   顯示所有容器

docker-compose restart nginx                   重新啟動nginx容器

docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不啟動關聯容器,并容器執行php -v 執行完成后刪除容器

docker-compose build nginx                     構建鏡像 。        

docker-compose build --no-cache nginx   不帶緩存的構建。

docker-compose logs  nginx                     查看nginx的日志 

docker-compose logs -f nginx                   查看nginx的實時日志


docker-compose config  -q                        驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。 

docker-compose events --json nginx       以json的形式輸出nginx的docker日志

docker-compose pause nginx                 暫停nignx容器

docker-compose unpause nginx             恢復ningx容器

docker-compose rm nginx                       刪除容器(刪除前必須關閉容器)

docker-compose stop nginx                    停止nignx容器

docker-compose start nginx                    啟動nignx容器


原文:Docker-compose基礎知識梳理 - 9ong

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容