docker-compose部署springboot项目

本文简单介绍下如何通过docker-compose来部署一个springboot项目,以及部署过程中可能遇到的坑。

前提准备

需要提前准备好docker环境,并安装docker-compose。

docker-compose安装比较简单,下载个bin文件然后放到 /usr/bin 目录中就行。

准备好 springboot 项目的 jar 包。

下载 jdk 镜像

这里以 jdk8 为例(其他版本一样的操作),如果还没有 jdk8 镜像,则直接搜索 jdk8 镜像,然后下载第一个就行。

# 搜索 jdk8 镜像
docker search jdk8

# 下载 jdk8 镜像
docker pull ascdc/jdk8
 

文件存放路径

配置文件:/data/docker-compose/docker-compose.yml

jar 包路径:/data/docker-compose/demo/demo.jar

日志文件路径:/data/docker-compose/demo/logs

Dockerfile: /data/docker-compose/demo/Dockerfile

编写 docker-compose.yml

docker-compose services 中增加 demo 服务

version: '3'
services:
  demo:
    build: /data/docker-compose/demo
    volumes:
      - /data/docker-compose/demo/logs:/usr/local/logs
    ports:
      - 8091:8091

对外暴露的服务端口,根据实际情况进行修改

编写 Dockerfile

# 基础镜像
FROM ascdc/jdk8
# 拷贝jar包到容器中
COPY demo.jar /usr/local
# 容器工作目录
WORKDIR /usr/local
# 设置字符集
ENV LANG C.UTF-8
# 启动命令(注意,这里一定要用ENTRYPOINT,不能用CMD)
ENTRYPOINT ["java", "-jar", "/usr/local/demo.jar"]

为了不每次修改镜像,所以在每次启动时,把新的jar包拷贝到容器中,再启动

ENTRYPOINT 是设置容器启动的命令,在这里就是 java -jar /usr/local/demo.jar

这里有个坑(这个镜像的坑),不能使用 CMD,必须使用 ENTRYPOINT,虽然它俩都是在指定容器启动程序及参数。

ENTRYPOINT 和 CMD 一样,都是在指定容器启动程序及参数,但是这里如果用 CMD ,待会就无法启动了。因为这容器里本身就用了 ENTRYPOINT,这时候如果增加了 CMD 的命令,那么会将 CMD 的内容作为参数传给 ENTRYPOINT 指令,命令将变为:<ENTRYPOINT> "<CMD>"。而不是直接运行 CMD 命令!

使用 docker inspect 查看容器信息也可以看出来,启动脚本是 /scirpt/run.sh,而 java -jar /usr/local/demo.jar 变成了 /scirpt/run.sh 的参数!

当然,不同的镜像,情况不同,这里只是以刚下的 ascdc/jdk8 镜像为例,它默认设定了启动脚本是 /script/run.sh。我们当然也可以用其他镜像,或者自己做一个。

启动/停止/删除容器

注意:如果想直接执行 docker-compose 命令,那么必须进入到 docker-compose.yml 所在的目录执行!否则需要使用 docker-compose -f 名指定 docker-compose.yml 的地址!

# 进入 /data/docker-compose 目录后再执行其他操作
cd /data/docker-compose

# 创建容器
docker-compose up -d --build demo

# 停止容器
docker-compose stop demo

# 删除容器
docker-compose rm -f demo

# 查看容器日志
docker-compose logs <-f> demo

# 查看 docker-compose 管理的容器
docker-compose ps

创建容器后,服务就已经起来了,可以照常访问。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker Compose中部署Spring Boot项目和MySQL数据库,并创建表结构,可以按照以下步骤进行操作: 1. 首先,确保已经在你的Spring Boot项目中定义了数据库表结构。这可以通过使用JPA或者手动创建SQL脚本来完成。 2. 在你的Docker Compose文件中,定义两个服务:一个是Spring Boot应用程序,另一个是MySQL数据库。以下是一个简单的示例: ```yaml version: '3' services: app: build: context: . dockerfile: Dockerfile ports: - 8080:8080 depends_on: - db db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: your_password MYSQL_DATABASE: your_database_name MYSQL_USER: your_username MYSQL_PASSWORD: your_password volumes: - ./data:/var/lib/mysql ``` 在上面的示例中,`app`服务是你的Spring Boot应用程序,`db`服务是MySQL数据库。你可以根据自己的需求进行调整。 3. 确保在你的Spring Boot应用程序中的数据库配置文件(如`application.properties`或`application.yml`)中,将数据库连接信息配置为以下内容: ```properties spring.datasource.url=jdbc:mysql://db:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password ``` 这里的`db`是Docker Compose中定义的MySQL服务的名称。 4. 在你的Spring Boot应用程序根目录下创建一个名为`Dockerfile`的文件,并添加以下内容: ```Dockerfile FROM openjdk:8-jdk-alpine COPY target/your_app.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] ``` 这个Dockerfile文件将使用Alpine版本的OpenJDK 8作为基础镜像,并将构建的Spring Boot应用程序的JAR文件复制到镜像中。 5. 最后,在命令行中进入你的项目根目录,并运行以下命令来构建和启动Docker容器: ``` docker-compose up --build ``` 这将根据Docker Compose文件构建和启动两个容器:一个是包含你的Spring Boot应用程序的容器,另一个是MySQL数据库的容器。在启动过程中,数据库表结构将会自动创建。 请注意,以上步骤中的配置信息应该根据你的实际需求进行调整,例如数据库名称、用户名、密码等。另外,确保你已经安装了Docker和Docker Compose,并且已经在命令行中切换到了正确的项目目录。 希望以上信息对你有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值