使用 docker-compose 部署java 应用

一、概述

docker-compose 是一个很好用的容器编排工作,使用docker 直接部署应用的话过程过于繁琐,也不利于维护。本文将介绍怎么使用docker-compose 去部署应用,前期需要先部署docker-compose 可参考 centOS7 安装docker-compos 这篇博文。

二、配置过程

2.1 基础配置

services:
容器的基础配置,在这里需要先定义好容器的名称,引入的基础镜像,挂载卷和端口等。

version: "3.1"
services:
  XXXXXXX:   #定义容器,可自定义命名(一般与容器名称相同)。
    container_name: xxxxxxx  #容器名称,如是java 项目 可以直接命名为应用名称
    image: XXXXXX  # 需要导入的镜像,如果是java 应用,则jdk 是必要的,所以需要导入jdk的镜像
    working_dir: /root/xxxx #工作区间
    volumes:  # 磁盘挂载,就是将容器中的 文件路径 挂载映射至宿主机
      # 格式: -  容器文件路径:宿主机路径  ./  表示当前路径
      - ./:/opt   # 例如 容器启动的当前路径 挂载到 宿主机的 /opt 目录下
    ports: #端口 
      # 格式: -容器内端口:宿主机端口
      - 8080:8080

2.2 程序启动配置

在配置完基础信息以后,接下来就是需要配置,我们启动java 程序的指令参数,这部分配置在 command: 下

command: [
        "java",
        "-Djava.security.egd=file:/dev/./urandom",
        "-Dfile.encoding=UTF-8",
        "-Duser.timezone=GMT+08",
        "-Duser.dir=/opt/xxxxx",
        "-Djava.library.path=/opt/xxxx",
        "-XX:+UseContainerSupport",
        "-XX:MaxRAMPercentage=50",
        "-XX:+UseG1GC",
        "-XX:MaxGCPauseMillis=100",
        "-XX:ParallelGCThreads=8",
        "-XX:ConcGCThreads=4",
        "-XX:+TieredCompilation",
        "-XX:+UseStringDeduplication",
        "-XX:+OptimizeStringConcat",
        "-XX:+HeapDumpOnOutOfMemoryError",
        "-XX:HeapDumpPath=/opt/xxxxxx/heapdump",
        "-jar","-javaagent:/opt/application/skywalking-agent/skywalking-agent.jar",
        "-jar","/xxx/xxxx/xxxxx.jar",
        "--user.dir=/opt",
        "--spring.profiles.active= xxx",
        "--server.port=8080"
    ]

上面配置为jvm启动参数和程序所需的配置参数。

2.3 环境变量配置

为了方便配置管理,做到环境的配置与代码的隔绝,有时候我们需要将一些中间件客户端配置写在环境变量中,方便其启动时根据不同环境获取不同的配置参数。如nacos 这样子 需要在配置文件中配置对应的环境变量,想这些配置参数我们会统一放在 environment: 下。

environment:
      TZ: Asia/Shanghai
      NACOS_ADDR: "xxx.xxxx.xxxx.xxxx:8848"
      NACOS_USERNAME: "xxxxx"
      NACOS_PASSWORD: "xxxxx"
      NACOS_NAMESPACE: "xxxx"
      LOGBACK_ROLLINGPOLICY_MAX_HISTORY: "7"
      LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE: "50MB"

2.4 容器参数配置

最后就要开始配置一些容器的参数配置了,比如 操作,系统资源,网络等。

restart: "yes"  #是否重启,该参数配置以后,当应用或者容器下线时,会自动重启
    mem_limit: 2g #容器等内存限制
    cpus: 2  #容器等cpu限制
    logging:
      options:
        max-size: 512m #设置容器日志 最大为512m
networks:     #网络配置
  default:
    external:
      name: weave # 当前使用的是 weave 网络管理,也可以自行组建子网,或者自己 桥接至宿主机网络

配置完以上参数以后,就可以开始启动应用,只需要使用docker-compones up -d 命令即可启动。

三、问题原因排查

在新手使用时,更多遇到的是 网络问题,容器网络互动配置。当服务无法访问时,应该先检查当前服务端口是否有开放,可以进去一个容器中去访问另一个应用。理论上,只要容器间在同一个子网内,网络访问就不会有问题。
还有一个问题就是jvm 问题,这个可以看看我的另一篇文章:容器环境下 jvm问题排查

### 使用 Docker Compose 部署 Java 应用程序 #### 准备工作 为了确保能够顺利使用 `docker-compose` 来部署 Java 应用,需先确认环境已安装好 DockerDocker Compose。如果尚未安装 Docker Compose,则可以通过如下命令下载: ```bash curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ``` 这一步骤用于获取适合当前操作系统的版本并赋予执行权限[^1]。 #### 编写 docker-compose.yml 文件 创建一个名为 `docker-compose.yml` 的文件,在其中定义服务、网络以及卷等内容。对于简单的 Java 应用来说,可能只需要关注服务部分。下面是一个基本的例子: ```yaml version: '3' services: app: image: your-java-app-image # 替换成实际镜像名 ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: dev depends_on: db: condition: service_healthy networks: default: external: name: cq-data-security ``` 这里假设应用程序监听的是 8080 端口,并且依赖数据库服务运行。注意这里的网络设置指向了一个外部存在的网络名称 `cq-data-security`,这是预先创建好的桥接模式下的自定义网络[^2]。 #### 构建与启动容器 当所有的准备工作完成后,可以在包含 `docker-compose.yml` 文件的目录下执行以下命令来构建和启动应用: ```bash docker-compose up --build ``` 这条指令会让 Docker Compose 去读取配置文件中的信息,拉取必要的镜像(如果没有本地缓存的话),然后按照顺序依次启动各个服务实例。 #### 关闭与清理资源 停止正在运行的服务可使用: ```bash docker-compose down ``` 若要彻底移除由该组合产生的所有数据卷,可以加上 `-v` 参数: ```bash docker-compose down -v ``` 这样做有助于保持主机上的存储空间整洁有序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Resean0223

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

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

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

打赏作者

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

抵扣说明:

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

余额充值