赞
踩
目录
Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。.Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器,Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
Docker Compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner),如下图所示:
Compose 使用的三个步骤:
1.编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用,使用dockerfile部署springboot项目。
2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
3.最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线。
- docker --version #查看版本
-
- docker-compose -h # 查看帮助
-
- docker-compose up # 启动所有docker-compose服务
-
- docker-compose up -d # 启动所有docker-compose服务并后台运行
-
- docker-compose down # 停止并删除容器、网络、卷、镜像。
-
- docker-compose exec yml里面的服务id # 进入容器实例内部 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 # 停止服务
- # 下载
- curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
- # 开启可执行权限
- chmod +x /usr/local/bin/docker-compose
-
- # 查看版本
- docker-compose --version
- #docker-compose version 1.29.2, build 5becea4c
-
- # 如果使用curl方式安装的,这样卸载即可
- rm /usr/local/bin/docker-compose
这里模拟通过浏览器访问网关,然后网关将请求转发到订单微服务,通过查询订单返回订单信息,在其中过程中订单中有用户信息,需要根据订单中的用户id调用用户微服务进行查询然后进行赋值然后返回订单信息。这里的注册中心采用nacos。其中的每个微服务暂未搭建集群,这里网关端口号为7000,订单微服务端口号为8080,用户模块微服务端口号为9201,本地运行结果如下图:
version
字段指定了 Docker Compose 编排文件的版本,例如:
version: '3'
services
字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项。例如:
- services:
- mysql: #服务名
- image: mysql:5.5 #mysql镜像
build
字段允许在 Docker Compose 编排中指定 Dockerfile 的位置,从而可以使用 Docker Compose 构建镜像。image
字段指定要使用的 Docker 镜像。例如:
- services:
- mysql: #服务名
- image: mysql:5.5 #mysql镜像
- user: #服务名
- build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
volumes
字段指定了要使用的数据卷。environment
字段指定了要设置的环境变量。例如:
- services:
- mysql: #服务名
- image: mysql:5.5 #mysql镜像
- environment:
- MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
- volumes:
- - "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
ports
字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。expose
与 ports
不同的是,expose
字段仅仅是将容器内部的端口暴露给其他容器使用,而不是直接映射到宿主机上的端口
例如:
- services:
- gateway: #服务名
- build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
- ports:
- -"7000:7000"
- nginx:
- image: nginx
- expose:
- -"8080"
-
-
-
-
-
当然命令还有很多,这里进行部署实战的时候只用到上述这些编排字段,所以这里重点写了这些,其余的进行省略。
按照三步走策略第一步编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用,使用dockerfile部署springboot项目。
这里进行举例,把每个微服务的项目进行打包成jar文件,这里命名为a.jar。然后构建Dockerfile文件并且和每个微服务的jar包都单独放在同一个文件夹下。Dockerfile文件内容如下:
- From java:8-alpine
- COPY ./a.jar /tmp/app.jar
- EXPOSE 8080
- ENTRYPOINT java -jar /tmp/app.jar
使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。docker-compose.yml文件内容如下:
- version: "3.2"
-
- services:
- nacos: #服务名
- image: nacos/nacos-server #nacos镜像
- environment:
- MODE: standalone #单机模式
- ports:
- - "8848:8848" #ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)
- mysql: #服务名
- image: mysql:5.5 #mysql镜像
- environment:
- MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
- volumes:
- - "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
- user: #服务名
- build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
- order: #服务名
- build: ./order #这里为订单微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
- gateway: #服务名
- build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
- ports:
- - "7000:7000"
执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线,然后就可以在自己的服务器上进行远程访问了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。