Docker Compose 常用命令
- build
構建或重新構建服務。服務被構建后將會以 project_service的形式標記,例如:comoretest db。 - help
査看指定命令的幫助文檔,該命令非常實用。 docker-compose所有命令的幫助文檔都可通過該命令查看。
docker-compose he lp COMMAND
示例
docker-compose he lp build #查看 docker- compose build的幫助
- kill
通過發送SI6KILL信號停止指定服務的容器。示例
docker-compose kill eureka
該命令也支持通過參數來指定發送的信號,例如:
docker-compose kill -s nginx
- logs
查看服務的日志輸出。
docker-compose logs nginx #查看nginx的日志
docker-compose logs -f nginx #查看nginx的實時日志
- port
打印綁定的公共端口。示例
docker-compose port nginx 8080
這樣就可輸出 nginx服務8080端口所綁定的公共端口。
6. ps
列出所有容器。示例
docker-compose ps
也可列出指定服務的容器,示例:
docker-compose ps nginx
- pull
下載服務鏡像。示例
docker-compose pull nginx
- rm
刪除指定服務的容器。示例:
docker-compose rm nginx
- run
在一個服務上執行一個命令。示例
docker-compose run web bash
這樣即可啟動一個web服務,同時執行bash命令。
10. scale
設置指定服務運行容器的個數,以 service=num的形式指定。示例
docker-compose scale user=3 movie=3
- start
啟動指定服務已存在的容器。示例
docker-compose start nginx
- 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
前文講過,默認情況下,服務之間可使用服務名稱相互訪問。 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