0


深入浅出之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 主机上。

expose

ports

不同的是,

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

标签: docker java 容器

本文转载自: https://blog.csdn.net/qq_43649937/article/details/131073227
版权归原作者 山河亦问安 所有, 如有侵权,请联系我们删除。

“深入浅出之Docker Compose详解”的评论:

还没有评论