一、Docker Compose概述
先前我们在使用Dockerfile构建镜像时,在编写好Dockerfile文件以及其他必要文件后,需要使用docker build 、docker run 等命令操作{创建,启动,停止等}容器。然而,在微服务架构体系中,一个应用系统一般包含若干个服务器,每个微服务通常都会部署多个实例,如果每个服务都要手动启停,那么这样效率太低了,而且维护也非常不方便。
因此,便有了docker compose,它可以轻松、高效地管理容器,是一个用于定义和运行多容器docker的应用程序工具。
二、Docker Compose 安装
安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
查看安装是否成功
docker-compose -v
Docker和compose的兼容性
compose文件格式版本 | docker版本 |
---|---|
1.0 | 1.9.1.+ |
2.0 | 1.10.0+ |
2.1 | 1.12.0+ |
2.2 | 1.13.0+ |
2.3 | 17.06.0+ |
3.0 | 1.13.0+ |
3.1 | 1.13.1+ |
3.2 | 17.04.0+ |
3.3 | 17.06.0+ |
3.4 | 17.09.0+ |
Docker版本变化说明:
Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。
Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。
三、Docker-compose容器编排
前提:
YUML是一种 标记语言很直观的数据序列化格式,文件格式及编写注意事项
不支持制表符tab键缩进,需要使用空格缩进
通常开头缩进两个空格
字符后缩进1个空格,如冒号、逗号、横杆
用#号注释
如果包含特殊字符用单引号引起来
布尔值必须用引号括起来
1.Docker Compose配置常用字段
2.Docker Compose常用命令
docker-compose -h # 查看帮助
docker-compose up # 创建并运行所有容器
docker-compose up -d # 创建并后台运行所有容器
docker-compose ps # 显示所用容器信息
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose rm # 删除容器
docker-compose logs # 查看容器输出日志
docker-compose pull # 拉取依赖镜像
dokcer-compose config # 检查配置
dokcer-compose config -q # 验证yaml配置文件是否正确,有问题才有输出
docker-compose pause # 暂停容器
docker-compose unpause # 恢复暂停
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务3.Compose命令说明
基本的使用格式
docker-compose [options][COMMAND][ARGS...]docker-compose选项
--verbose输出更多调试信息
--version打印版本并退出
-f,--fileFILE使用特定的compose模板文件,默认为docker-compose.yml
-p,--project-name NAME指定项目名称,默认使用目录名称
4.编排容器
- 先打包本地一个服务的sharding-jdbc-server-2.2.2-SNAPSHOT.jar到服务器上
就放在/home/image- 在该目录下编写一个Dockerfile,用来构建镜像
FROM jdk1.8:latest
MAINTAINER docker
WORKDIR /
# hello-docker-0.0.1-SNAPSHOT.jar为maven打包生成的,app.jar是被打进镜像中jar
ADD sharding-jdbc-server-2.2.2-SNAPSHOT.jar /sharding-jdbc-server-2.2.2-SNAPSHOT.jar# 对外暴露的端口
EXPOSE 8097
ENTRYPOINT ["java","-jar","/sharding-jdbc-server-2.2.2-SNAPSHOT.jar"]在home下创建一个docker-compose.yml 命令。
这里需要展示两种方式的编排:
第一种是已存在的镜像,直接构建容器并启动
第二种是不存在的镜像,需要通过DockerFile先build镜像再构建容器启动version: '3' #compose 文件版本(1.2.x+ 用3即可)
services:
sharding-jdbc-sever:
container_name: sharding-docker-test2.1
build:
context: ./image
dockerfile: Dockerfile
ports:
- '8099:8090'redis-server-compose:
image: redis:latest
ports:
- '63790:6379'执行开启docker-compose -f docker-compose.yml up -d
docker-compose ps docker images docker ps
5.idea整合代码编排容器
1.准备
一方面我们需要docker安装环境,也需要安装docker compose工具;
下载docker并安装,地址为
https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe
配置2. 创建docker-compose.yml文件
在springboot项目的根目录pom.xml文件所在目录下,一般docker-compose.yml与父工程的pom.xml是同级的,使用其对子工程进行构建镜像和容器编排
docker-compose.yml:version: '3' #compose 文件版本(1.2.x+ 用3即可) services: sharding-sever: container_name: sharding-docker-test2.1 build: context: ./sharding-jdbc-server dockerfile: Dockerfile ports: - '8099:8090' redis-server: image: redis:latest ports: - '63790:6379'创建一个docker-compose configrations执行就ok了
第一个容器:通过dockerfile文件先构建镜像再创建启动容器