Docker Compose 常用命令

  1. build
    構建或重新構建服務。服務被構建后將會以 project_service的形式標記,例如:comoretest db。
  2. help
    査看指定命令的幫助文檔,該命令非常實用。 docker-compose所有命令的幫助文檔都可通過該命令查看。
docker-compose he lp COMMAND

示例

docker-compose he lp build      #查看 docker- compose build的幫助
  1. kill
    通過發送SI6KILL信號停止指定服務的容器。示例
docker-compose kill eureka

該命令也支持通過參數來指定發送的信號,例如:

docker-compose kill -s nginx
  1. logs
    查看服務的日志輸出。
docker-compose logs nginx       #查看nginx的日志
docker-compose logs -f nginx    #查看nginx的實時日志
  1. port
    打印綁定的公共端口。示例
docker-compose port nginx 8080

這樣就可輸出 nginx服務8080端口所綁定的公共端口。
6. ps
列出所有容器。示例

docker-compose ps

也可列出指定服務的容器,示例:

docker-compose ps nginx
  1. pull
    下載服務鏡像。示例
docker-compose pull nginx
  1. rm
    刪除指定服務的容器。示例:
docker-compose rm nginx
  1. run
    在一個服務上執行一個命令。示例
docker-compose run web bash

這樣即可啟動一個web服務,同時執行bash命令。
10. scale
設置指定服務運行容器的個數,以 service=num的形式指定。示例

docker-compose scale user=3 movie=3
  1. start
    啟動指定服務已存在的容器。示例
docker-compose start nginx
  1. stop
    停止已運行的容器。示例:
docker-compose stop nginx

停止后,可使用 docker-compose start再次啟動這些容器
13. up
構建、創建、重新創建、啟動,連接服務的相關容器。所有連接的服務都會啟動,除非它們已經運行。
docker-compose up 命令會聚合所有容器的輸出,當命令退出時,所有容器都會停止。
使用 docker-compose up -d 可在后臺啟動并運行所有容器。

本章是 docker-compose 的常用命令,其他命令可詳見Docker官方文檔:https://docs.docker.com/compose/reference/overview/

Docker Compose網絡設置

本章所闡述的網絡特性僅適用于 Version2 file format,Version1 file format不支持該特性。

基本概念

默認情況下, Compose會為應用創建一個網絡,服務的每個容器都會加入該網絡中。這樣,容器就可被該網絡中的其他容器訪問,不僅如此,該容器還能以服務名稱作為hostname被其他容器訪問。
默認情況下,應用程序的網絡名稱基于 Compose的工程名稱,而項目名稱基于 docker-compose.yml 所在目錄的名稱。如需修改工程名稱,可使用 --project-name標識或COMPOSE_ PORJECT_NAME環境變量。
舉個例子,假如一個應用程序在名為 myapp的目錄中,并且 docker-compose.yml如下所示:

version: 2
servlce:web:build: .ports:"8000:8900"db:image: postgres

當運行 docker-compose up時,將會執行以下幾步:

  • 創建一個名為 myapp_default 的網絡。
  • 使用 web 服務的配置創建容器,它以"web"這個名稱加入網絡 myapp_default
  • 使用 db 服務的配置創建容器,它以"db"這個名稱加入網絡 myapp_default

容器間可使用服務名稱( web 或 db )作為 hostname 相互訪問。例如,web這個服務可使用 postgres://db:5432訪問db容器。

更新容器

當服務的配置發生更改時,可使用 docker-compose up命令更新配置。
此時, Compose會刪除舊容器并創建新容器。新容器會以不同的 IP 地址加入網絡,名稱保持不變。任何指向舊容器的連接都會被關閉,容器會重新找到新容器并連接上去。

前文講過,默認情況下,服務之間可使用服務名稱相互訪問。 links允許定義一個別名,從而使用該別名訪問其他服務。舉個例子:

version: 2
servlce:web:build: .links:- "db:database"db:image: postgres

這樣 Web 服務就可使用 db 或 database 作為 hostname 訪問 db 服務了。例如,postgres://database:5432

指定自定義網絡

一些場景下,默認的網絡配置滿足不了我們的需求,此時可使用 networks 命令自定義網絡。networks 命令允許創建更加復雜的網絡拓撲并指定自定義網絡驅動和選項。不僅如此,還可使用 networks 將服務連接到不是由 Compose 管理的、外部創建的網絡。
如下,在其中定義了兩個自定義網絡。

version: 2
servlce:proxy:build: ./proxynetworks:- frontapp:build: /appnetworks:- front- backdb:image: postgresnetworks:- backnetworks:front:# Use a custom driverdriver: custom-driver-1back:# Use a custom driver which takes special optionsdriver: custom-driver-2driver_opts:foo: "1"bar: "2"

其中, proxy 服務與 db 服務隔離,兩者分別使用自己的網絡,app 服務可與兩者通信。
由本例不難發現,使用 networks命令,即可方便實現服務間的網絡隔離與連接。

配置默認網絡

除自定義網絡外,也可為默認網絡自定義配置。

version: 2
servlce:web:build: .ports:- "8000:8000"db:image: postgres
networks:default:# Use a custom driverdriver: custom-driver-1

這樣,就可為該應用指定自定義的網絡驅動。

使用已存在的網絡

一些場景下,并不需要創建新的網絡,而只須加入已存在的網絡,此時可使用 external
選項。示例:

networks:default:external:name: my-pre-existing-network

學習于:《Spring Cloud與Docker 微服務架構實戰》 — 周立