一、簡介
Docker-Compose是Docker官方的開源項目,負責實現(xiàn)對Docker容器集群的快速編排。
docker建議我們每一個容器中只運行一個服務,因為docker容器本身占用資源極少,所以最好是將每個服務單獨的分割開來但是這樣我們又面臨了一個問題?
如果我需要同時部署好多個服務,難道要每個服務單獨寫Dockerfile然后在構(gòu)建鏡像,構(gòu)建容器,這樣累都累死了,所以docker官方給我們提供了docker-compose多服務部署的工具
例如要實現(xiàn)一個Web微服務項目,除了Web服務容器本身,往往還需要再加上后端的數(shù)據(jù)庫mysql服務容器,redis服務器,注冊中心eureka,甚至還包括負載均衡容器等等。
Compose允許用戶通過一個單獨的docker-compose.yml模板文件(YAML 格式)來定義一組相關聯(lián)的應用容器為一個項目(project)。
可以很容易地用一個配置文件定義一個多容器的應用,然后使用一條指令安裝這個應用的所有依賴,完成構(gòu)建。Docker-Compose 解決了容器與容器之間如何管理編排的問題。
二、常用命令
Compose常用命令
docker-compose -h # 查看幫助
docker-compose up # 啟動所有docker-compose服務
docker-compose up -d # 啟動所有docker-compose服務并后臺運行
docker-compose down # 停止并刪除容器、網(wǎng)絡、卷、鏡像。
docker-compose exec yml里面的服務id # 進入容器實例內(nèi)部 docker-compose exec docker-compose.yml文件中寫的服務id /bin/bash
docker-compose ps # 展示當前docker-compose編排過的運行的所有容器
docker-compose top # 展示當前docker-compose編排過的容器進程
docker-compose logs yml里面的服務id # 查看容器輸出日志
docker-compose config # 檢查配置
docker-compose config -q # 檢查配置,有問題才有輸出
docker-compose restart # 重啟服務
docker-compose start # 啟動服務
docker-compose stop # 停止服務
三、案例
編寫docker-compose.yml
version: "3"
services:
microService:
image: lizj_docker:2.0
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- atguigu_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- atguigu_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
MYSQL_USER: 'lizj'
MYSQL_PASSWORD: 'lizj123'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- atguigu_net
command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問
networks:
atguigu_net:
編寫Dockerfile
# 基礎鏡像使用java
FROM java:8
# 作者
MAINTAINER lizj
# VOLUME 指定臨時文件目錄為/tmp,在主機/var/lib/docker目錄下創(chuàng)建了一個臨時文件并鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中并更名為lizj_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar lizj_docker.jar
# 運行jar包
RUN bash -c 'touch /lizj_docker.jar'
ENTRYPOINT ["java","-jar","/lizj_docker.jar"]
#暴露6001端口作為微服務
EXPOSE 6001
生成鏡像:docker build -t lizj_docker:2.0 .
運行服務:docker-compose up -d
停止服務:docker-compose stop
相關資源:jar文件