以前的文章中,咱們使用docker run 命令來啓動一個容器,而做爲真正的線上業務環境,咱們服務確定不止一個,也就說明容器確定不止一個,而若是仍是手動的一個個來啓動容器這未免會讓人頭皮發麻,幸虧有Docker Compose,用於定義和運行多容器Docker應用程序的工具,有了它咱們能夠一次啓動多個容器,這也很是適合與持續集成工具(Jenkins)來配合。java
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
複製代碼
chmod +x /usr/local/bin/docker-compose
複製代碼
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
複製代碼
# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
複製代碼
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
複製代碼
命令 | 含義 | 示例 |
---|---|---|
build | 構建或從新構建服務 | build [options] [--build-arg key=val...] [SERVICE...](使用 docker-compose help build 查看詳細使用) |
help | 查看docker-compose命令幫助文檔 | docker-compose help COMMAND(標識要看的命令) |
up | 構建、建立、從新建立、啓動,鏈接服務的相關容器。全部鏈接的服務都會啓動,除非它們已經運行(前提該目錄下已經存在docker-compose.yml文件) | docker-compose up(直接啓動,該命令退出,全部容器中止) docker-compose up -d (後臺運行全部容器) |
kill | 發送SIGKILL 信號中止指定服務的容器 | docker-compose kill api-feign(注意該名稱爲docker-compose.yml中定義的服務名稱) |
start | 啓動指定服務已存在的容器 | docker-compose start api-feign |
stop | 中止指定服務已存在的容器 | docker-compose stop api-feign |
logs | 查看服務的日誌輸出 | docker-compose logs --tail="all" api-feign(查看api-feign 所有日誌輸出) |
ps | 列出全部容器 | docker-compose ps (和docker ps -a 同樣能夠查看容器,顯示信息不同) |
rm | 刪除指定服務的容器 | docker-compose rm api-feign |
version: '3.4'
services:
configerver: # 指定一個服務名稱
image: mao/configserver:0.0.1-SNAPSHOT # 鏡像名稱
ports:
- 8666:8666 # 指定端口映射
eureka:
image: test1/eureka1:0.0.1-SNAPSHOT
ports:
- 8805:8805
server-admin:
image: mao/server-admin:0.0.1-SNAPSHOT
ports:
- 8806:8806
api-feign:
image: mao/api-feign:0.0.1-SNAPSHOT
ports:
- 8840:8840
ribbon-consumer:
image: mao/ribbon-consumer:0.0.1-SNAPSHOT
ports:
- 8830:8830
ribbon-provider:
image: mao/ribbon-provider:0.0.1-SNAPSHOT
ports:
- 8820:8820
複製代碼
# docker compose 構建鏡像並使用鏡像啓動容器(-d 表示後臺啓動)
docker-compose up -d
複製代碼
#Dockerfile中
....
COPY wait-for-it.sh /wait-for-it.sh #在本項目模塊根目錄下複製wait-for-it.sh 到鏡像/目錄下
RUN chmod +x /wait-for-it.sh # 修改腳本權限
....
複製代碼
version: '3.7'
services:
configerver: # 指定一個服務名詞
image: mao/configserver:0.0.1-SNAPSHOT # 鏡像名稱
ports:
- 8666:8666 # 指定端口映射
depends_on:
- eureka
eureka:
image: mao/eureka:0.0.1-SNAPSHOT
ports:
- 8805:8805
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
server-admin:
image: mao/server-admin:0.0.1-SNAPSHOT
ports:
- 8806:8806
depends_on:
- eureka
- configerver
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
api-feign:
image: mao/api-feign:0.0.1-SNAPSHOT
ports:
- 8840:8840
depends_on:
- eureka
- configerver
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
ribbon-consumer:
image: mao/ribbon-consumer:0.0.1-SNAPSHOT
ports:
- 8830:8830
depends_on:
- eureka
- configerver
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
ribbon-provider:
image: mao/ribbon-provider:0.0.1-SNAPSHOT
ports:
- 8820:8820
depends_on:
- eureka
- configerver
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
gateway:
image: mao/gateway:0.0.1-SNAPSHOT
ports:
- 8081:8081
depends_on:
- eureka
- configerver
entrypoint: "./wait-for-it.sh configerver:8666 -- java -jar /app.jar"
複製代碼
docker-compose up -d
複製代碼