docker-compose部署Java应用和相关依赖方式

 更新时间:2024年10月31日 08:43:23   作者:莱特昂  
介绍如何使用docker-compose一键部署Java应用及依赖,并实现MySQL数据库的自动初始化

docker-compose部署Java应用和相关依赖

上次用了docker远程部署之后,发现还是有点不方便的地方。2357上传了镜像之后,不会自动启动成容器,而且许多启动时的命令还要重新打。

换台机器还要从偷装mysql和minio等等。网上看到能通过docker-compose进行一键部署。

docker-compose部署分为以下几步:

  1. 下载docker-compose
  2. 编写build镜像相关的dockerfile
  3. 编写docker-compose启动的yml文件

以本Java应用为例,dockerfile已经本地通过IDEA的docker-maven-plugin插件打好了,可以忽略第二步。直接进行1、3。

1. 下载docker-compose

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

查看是否安装成功

docker-compose --version

3. 编写docker-compose启动的yml文件

本地IDEA中编写docker-compose.yml,用于启动web应用启动所需要的依赖:

version: '3'
services:
  # 指定服务名称
  mysql:
    # 指定服务使用的镜像
    image: mysql:5.7
    # 指定容器名称
    container_name: mysql
    restart: always
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    # 指定服务运行的端口
    ports:
      - 3306:3306
    # 指定容器中需要挂载的文件
    volumes:
      - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
      - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载
      - /mydata/mysql/log:/var/log/mysql #日志文件挂载
    # 指定容器的环境变量
    environment:
      - MYSQL_ROOT_PASSWORD=root

  # 指定服务名称
  minio:
    # 指定服务使用的镜像
    image: minio/minio
    # 指定容器名称
    container_name: minio
    restart: always
    # 指定服务运行的端口
    ports:
      - 9000:9000 # api 端口
      - 9090:9090 # 控制台端口
    # 指定容器中需要挂载的文件
    volumes:
      - /mydata/minio/data:/data               #映射当前目录下的data目录至容器内/data目录
      - /mydata/minio/config:/root/.minio/     #映射配置目录
      - /etc/localtime:/etc/localtime
    # 指定容器的环境变量
    environment:
      MINIO_ACCESS_KEY: minioadmin    #管理后台用户名
      MINIO_SECRET_KEY: minioadmin #管理后台密码,最小8个字符
    command: server -console-address ":9000" --address ":9090" /data  #指定容器中的目录 /data
  
  nginx:
    image: nginx:1.10
    restart: always
    container_name: nginx
    volumes:
      - /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载
      - /mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
      - /mydata/nginx/log:/var/log/nginx #日志文件挂载
      - #若用到ssl,可以引入
      - /mydata/nginx/ssl:/etc/nginx/ssl
    ports:
      - 80:80
      - 443:443

启动Java应用的yml:

version: '3'
services:
  # 指定服务名称
  mall-tiny-docker-compose:
    # 指定服务使用的镜像
    image: mall-tiny/mall-tiny:1.0.0-SNAPSHOT
    # 指定容器名称
    container_name: mall
    depends_on:
      - minio
      - mysql
    # 指定服务运行的端口
    ports:
      - 8080:8080
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /mydata/app/mall-tiny-docker-compose/logs:/var/logs
    external_links:
      - minio:minio #可以用redis这个域名访问redis服务
      - mysql:mysql #可以用mongo这个域名访问mongo服务

之所以分开写是因为,启动完mysql还要手动输入sql文件生成数据库,再去跑web应用的Java应用的ym,不然会起不来,报数据库表找不到的error。

先启动依赖:

docker-compose -f docker-compose.yml up -d

然后本地连上mysql导入相关的数据表后,启动web:

docker-compose -f docker-compose-app.yml up -d

此时均已按相关参数启动,可通过docker ps查看,也可能调服务验证。

另外有几个命令参考:

#停止所有相关容器
docker-compose stop
#列出所有容器信息
docker-compose ps

后续要想办法把数据库初始化也干了,绝对有方法的,不然一堆集群的话要怎么搞呢。看到一种方法是加启动指令,在但是也要再挂载的目录里把sql提前复制过去。

这也不是一种很好的方法。也有是直接写脚本,把要打的sql都先放脚本里,到时候一键启动脚本创建目录和sql,再自动运行docker-compose的yml。

这确实是一种方法,后面机器多了可以试试。

command: --init-file /docker-entrypoint-initdb.d/init.sql

4. 停止docker-compose启动程序

  • docker-compose stop:这个命令只会停止docker-compose运行的容器,不会删除容器。
  • docker-compose down:推荐,在停止docker-compose运行容器的同时,删除容器

不过镜像还是都在的,想要删除镜像只能通过docker image rm的方式

2022.11.19更新

看到一种创建数据库容器的时候,也把sql初始化的方法。当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。

如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。

那么,数据库的docker-compose的部分就能写成这样:

  mysql:
    image: mysql:8.0.30
    restart: always
    container_name: mysql
    volumes:
      - ../volumes/data/mysqldata:/var/lib/mysql
      - ./config/my.cnf:/etc/mysql/conf.d/my.cnf
      #      数据库还原目录 可将需要还原的sql文件放在这里
      - ./init/mysql:/docker-entrypoint-initdb.d
    environment:
      - "MYSQL_ROOT_PASSWORD=lilishop"
      - "MYSQL_DATABASE=lilishop"
      - "TZ=Asia/Shanghai"
    ports:
      - 3306:3306

初始化就是这句:

- ./init/mysql:/docker-entrypoint-initdb.d

上传服务器的时候,把整个文件夹传上去,结构类似这种:

在当前文件夹运行docker-compose启动指令,即可创建数据库容器的时候,初始化数据库。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker 网络代理配置及防火墙设置的方法步骤

    Docker 网络代理配置及防火墙设置的方法步骤

    在服务器无法直接访问外网的环境中,Docker命令需要通过网络代理连接,本文就来介绍一下Docker 网络代理配置及防火墙设置的方法步骤,感兴趣的可以了解一下
    2024-10-10
  • docker内的容器如何与宿主机共享IP的方法

    docker内的容器如何与宿主机共享IP的方法

    本文主要介绍了docker内的容器如何与宿主机共享IP的方法,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 使用Docker+Nginx部署vue项目详细图文教程

    使用Docker+Nginx部署vue项目详细图文教程

    这篇文章主要给大家介绍了关于使用Docker+Nginx部署vue项目的相关资料,文中通过图文介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • docker+daocloud实现前端项目自动构建部署

    docker+daocloud实现前端项目自动构建部署

    这篇文章主要介绍了docker+daocloud实现前端项目自动构建部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 使用Docker Swarm搭建分布式爬虫集群的方法示例

    使用Docker Swarm搭建分布式爬虫集群的方法示例

    这篇文章主要介绍了使用Docker Swarm搭建分布式爬虫集群的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • docker 可用镜像服务地址的使用(亲测可用)

    docker 可用镜像服务地址的使用(亲测可用)

    Docker可用的镜像服务地址通常指的是Docker镜像仓库的地址,用于拉取和推送镜像,本文就来介绍了docker 可用镜像服务地址的使用,感兴趣的可以了解一下
    2024-10-10
  • docker compose up 命令默认配置文件自动查找规则详解

    docker compose up 命令默认配置文件自动查找规则详解

    DockerCompose在没有指定配置文件时,会按照优先级顺序查找compose.yaml、compose.ymldocker-compose.yml等文件,官方推荐使用compose.yaml,本文给大家介绍docker compose up 命令默认配置文件自动查找规则详解,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Docker之Compose的安装和使用过程

    Docker之Compose的安装和使用过程

    DockerCompose是用于定义和运行多容器应用的工具,通过定义yml文件自动创建或管理容器,简化了Docker操作,本文详细介绍了DockerCompose的安装步骤、版本差异以及基本命令,帮助用户更好地理解和使用DockerCompose
    2026-04-04
  • 基于Docker、Nginx和Jenkins实现前端自动化部署

    基于Docker、Nginx和Jenkins实现前端自动化部署

    本文主要介绍了搭建Docker+Nginx+Jenkins环境,用于实现前端自动化部署的流程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Docker 搭建 RabbitMQ的详细过程

    Docker 搭建 RabbitMQ的详细过程

    在现代微服务与分布式架构中,RabbitMQ 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件,本文将详细介绍Docker 搭建 RabbitMQ的过程,感兴趣的朋友一起看看吧
    2025-04-04

最新评论