Docker compose 簡介
compose是用來定義和運行多個Docker容器。
比如一個簡單的web項目,除了web服務之外,我們可能要需要數據庫容器、注冊中心容器等等。那我們需要:
- 定義各個容器的Dockerfile文件,docker build -t
- 映射硬盤保存數據 docker volume create,然后mount
- 設置網絡實現容器橋連 docker network create
- 。。。。
但有了docker-compose,我們可以在docker-compose.yml定義這些操作,然后只要一個命令docker-compose up -d
就行
例子
以spring cloud 的入門hello world為例子部署
項目目錄:
-springcloud
--feign
---src
---target
---Dockerfile
--hello-server
---src
---target
---Dockerfile
--register
---src
---target
---Dockerfile
--docker-compose.yml
register的Dockerfile定義為上一章的例子,其他的兩個的Dockerfile跟register的差不多,只需更改端口和jar包名。
docker-compose的定義如下:
version: '2.1'
services:
registry:
image: test/register
build: ./register
ports:
- 8761:8761
hello:
image: test/hello
ports:
- 8080:8080
build: ./hello-server
depends_on:
- registry
feign:
image: test/feign
ports:
- 8082:8082
build: ./feign
depends_on:
- registry
然后在docker-compose.yml 目錄下執行docker-compose up -d
docker-compose 在執行up命令時會創建默認網絡,然后docker-compose編排的服務都會在這個網絡下
docker-compose.yml常用命令
build:指定 Dockerfile
所在文件夾的路徑
image:指定為鏡像名稱或鏡像 ID。
depends_on: 解決容器的依賴、啟動先后的問題。但只解決容器啟動先后,但沒解決服務完全啟動先后,可以用wait for it
network_mode: 設置網絡模式
network:配置網絡
expose:暴露端口,但不映射到宿主機,只被連接的服務訪問。
ports:暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER)
格式
devices: 指定設備映射關系。
volumes:數據卷所掛載路徑設置。可以設置宿主機路徑 (HOST:CONTAINER
) 或加上訪問模式 (HOST:CONTAINER:ro
)。