深入浅出之Docker Compose详解

目录

1.Docker Compose概述

1.1 Docker Compose 定义

1.2 Docker Compose产生背景

1.3 Docker Compose 核心概念

1.4 Docker Compose 使用步骤

1.5 Docker Compose 常用命令

 

2. Docker Compose 实战

2.1 Docker Compose下载和卸载

2.2 Docker Compose 项目概述

2.3 Docker Compose 编排字段部分详解

2.3.1 version

2.3.2 services

2.3.3 build 和 image

2.3.4 volumes 和 environment

2.3.5 ports 和 expose

2.4 Docker Compose 部署实战


 

1.Docker Compose概述

1.1 Docker Compose 定义

Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

1.2 Docker Compose产生背景

我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。.Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器,Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

1.3 Docker Compose 核心概念

Docker Compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner),如下图所示:

c3ea7117e68a4c58ad9cbc558e7c20c6.png

 

1.4 Docker Compose 使用步骤

Compose 使用的三个步骤:

1.编写Dockerfile定义各个微服务应用并构建出对应的镜像文件dockerfile的使用,使用dockerfile部署springboot项目。

2.使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。

3.最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线。

1.5 Docker Compose 常用命令

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      # 停止服务

 

2. Docker Compose 实战

2.1 Docker Compose下载和卸载

# 下载
 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

2.2 Docker Compose 项目概述

这里模拟通过浏览器访问网关,然后网关将请求转发到订单微服务,通过查询订单返回订单信息,在其中过程中订单中有用户信息,需要根据订单中的用户id调用用户微服务进行查询然后进行赋值然后返回订单信息。这里的注册中心采用nacos。其中的每个微服务暂未搭建集群,这里网关端口号为7000,订单微服务端口号为8080,用户模块微服务端口号为9201,本地运行结果如下图:

357967864766451db5b74b873aba98c6.png

 

2.3 Docker Compose 编排字段部分详解

2.3.1 version

version 字段指定了 Docker Compose 编排文件的版本,例如:

version: '3'

2.3.2 services

services 字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
  

2.3.3 build 和 image

build 字段允许在 Docker Compose 编排中指定 Dockerfile 的位置,从而可以使用 Docker Compose 构建镜像。image 字段指定要使用的 Docker 镜像。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
  user: #服务名
    build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件

2.3.4 volumes 和 environment

volumes 字段指定了要使用的数据卷。environment 字段指定了要设置的环境变量。例如:

services:
  mysql: #服务名
    image: mysql:5.5 #mysql镜像
    environment:
      MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
    volumes:
    - "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
 

2.3.5 ports 和 expose

ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。exposeports 不同的是,expose 字段仅仅是将容器内部的端口暴露给其他容器使用,而不是直接映射到宿主机上的端口

例如:

 services:
    gateway: #服务名
       build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
       ports:
          -"7000:7000"
    nginx:
        image: nginx
        expose:
          -"8080"

   

    

  

当然命令还有很多,这里进行部署实战的时候只用到上述这些编排字段,所以这里重点写了这些,其余的进行省略。

2.4 Docker Compose 部署实战

按照三步走策略第一步编写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命令 来启动并运行整个应用程序,完成一键部署上线,然后就可以在自己的服务器上进行远程访问了。

98306abac59e4bacb4cd90f1850fa9ed.gif

 

 

 

 

  • 133
    点赞
  • 275
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 144
    评论
Docker ComposeDocker官方的开源项目,用于实现对Docker容器集群的快速编排。它可以管理多个Docker容器,将它们组成一个应用。为了使用Docker Compose,你需要定义一个YAML格式的配置文件docker-compose.yml,其中包含了多个容器之间的调用关系。通过简单的命令,你可以同时启动或关闭这些容器Docker Compose由Python编写,并调用Docker服务提供的API来管理容器。因此,只要所操作的平台支持Docker API,就可以利用Compose进行容器编排和管理。 Docker Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。一个工程可以包含多个服务,每个服务定义了容器运行的镜像、参数和依赖关系。一个服务可以包括多个容器实例。需要注意的是,Docker Compose并没有解决负载均衡的问题,因此你可能需要借助其他工具来实现服务发现和负载均衡,比如Consul。 总结来说,Docker Compose是一个功能强大的工具,可以帮助你快速编排和管理容器集群,实现应用的部署和扩展。使用Compose,你可以通过简单的配置文件定义容器之间的关系,然后使用命令轻松地启动、停止和管理这些容器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深入浅出Docker Compose详解](https://blog.csdn.net/qq_43649937/article/details/131073227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker 容器编排之 --- docker-compose 详解](https://blog.csdn.net/shenyuanhaojie/article/details/121713626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 144
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河亦问安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值