docker compose 是一款用于定義和運(yùn)行多個(gè)docker容器應(yīng)用程序的工具。它允許用戶在一個(gè)yaml文件中將應(yīng)用程序的不同組件(比如數(shù)據(jù)庫、web服務(wù)器等)描述成為不同的服務(wù)浅役,并協(xié)調(diào)這些服務(wù)之間的網(wǎng)絡(luò)連接葱椭、配置浮入、數(shù)據(jù)卷等資源。在使用docker compose時(shí)尽爆,用戶可以通過簡單的命令來啟動(dòng)、關(guān)閉读慎、構(gòu)建和管理整個(gè)應(yīng)用程序漱贱。
這使得開發(fā)人員和管理員能夠更方便地在多個(gè)容器程序之間進(jìn)行協(xié)作和遷移,并提高了應(yīng)用程序的可復(fù)制性和可移植性夭委。
docker-compose 使用
- 創(chuàng)建并編輯一個(gè) docker-compose.yml 文件幅狮,指定了所有容器及其配置。這個(gè)文件可以包含多個(gè)服務(wù)株灸,并指定他們的依賴關(guān)系崇摄、端口映射、卷掛載等慌烧。
# docker-compose.yml
version: '3.9'
services:
soanr:
image: soanrqube
environment:
work: opt/sonarqube
volumes:
- /tmp/sonarqube/data:/opt/sonarqube/data
- /tmp/sonarqube/logs:/opt/sonarqube/logs
- /tmp/sonarqube/extensions:/opt/sonarqube/extensions
web:
build: ./
ports:
- 9000: 9000
看不懂以上的配置沒關(guān)系逐抑,先跟之前使用 docker run
創(chuàng)建運(yùn)行容器的方式命令進(jìn)行對比一下。
$ docker run --name sonar \
-p 9000:9000 \
-v tmp/sonarqube/data:/opt/sonarqube/data \ # 將主機(jī)目錄直接與容器內(nèi)的目錄掛載
-v tmp/sonarqube/logs:/opt/sonarqube/logs \
-v tmp/sonarqube/extensions:/opt/sonarqube/extensions \
-d \
sonarqube
細(xì)心的同學(xué)可以發(fā)現(xiàn)屹蚊,兩種方式其實(shí)基本是一致的厕氨,docker-compose 只是把 docker run 命令拆解使用yaml文件進(jìn)行配置,方便集群部署 docker 容器而已淑翼。
下載安裝
由于GitHub下載速度腳本腐巢,推薦一個(gè)新的國內(nèi)的地址,基本是秒下玄括,特別快冯丙!
# 下載
$ curl -L https://get.daocloud.io/docker/compose/releases/download/2.1.73/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 修改文件權(quán)限
$ chmod 777 /usr/local/bin/docker-compose
# base 自動(dòng)補(bǔ)全命令
$ curl -L https://raw.githubusercontent.com/docker/compose/2.1.73/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 如果出現(xiàn)錯(cuò)誤執(zhí)行以下操作
$ echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
Docker Compose - 集群部署微服務(wù)
- 定義 docker-compose.yml,配置 nacos、mysql胃惜、user泞莉、order、gateway 等服務(wù)
version: '3.9'
services:
nacos:
image: nacos
environment:
MODE: standalone
ports:
- "8848:8848"
myslq:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
user:
build: ./user # 執(zhí)行當(dāng)前目錄下 Dockerfile
order:
build: ./order # jar包需要提前打包放置在dockerfile執(zhí)行的目錄下
gateway:
build: ./gateway # 注意服務(wù)之間的依賴關(guān)系確定服務(wù)啟動(dòng)的順序
ports:
- "10010:10010"
# 注意: docker-compose 服務(wù)之間是通過服務(wù)名稱進(jìn)行訪問船殉,需要對應(yīng)項(xiàng)目工程中的服務(wù)實(shí)例名稱鲫趁。jar包名稱在使用打包工具插件中定義。
- 一鍵運(yùn)行運(yùn)行 docker-compose
# 創(chuàng)建并執(zhí)行容器利虫,以后臺方式運(yùn)行 --help
$ docker-compose up -d
# 查看運(yùn)行的容器
$ docker ps
# docker-compose 查看容器運(yùn)行日志
$ docker-compose logs -f
如果檢查容器啟動(dòng)日志存在報(bào)錯(cuò)挨厚,則需要解決之后重新運(yùn)行docker-compose
$ docker-compose restart [serverName...]