docker-compose部署springboot项目

本文详细介绍了如何借助docker-compose部署SpringBoot项目,包括环境准备、Dockerfile与docker-compose.yml配置、启动与管理容器,并特别提醒了在使用特定镜像时关于ENTRYPOINT与CMD的区别及可能遇到的问题。
摘要由CSDN通过智能技术生成

本文简单介绍下如何通过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

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

Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速部署分布式应用。通过 Docker Compose,我们可以定义和运行多个 Docker 容器,并通过一个 YAML 文件来配置需要的服务。 下面是使用 Docker Compose 部署 Spring Boot 项目的简单步骤: 1. 编写 Dockerfile 在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,并添加以下内容: ``` FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 2. 编写 docker-compose.yml 文件 在 Spring Boot 项目的根目录下创建一个名为 docker-compose.yml 的文件,并添加以下内容: ``` version: '3' services: app: image: your-image-name build: context: . dockerfile: Dockerfile ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=prod restart: always ``` 其中,your-image-name 是自定义的镜像名称,需要在构建镜像时使用。 3. 构建镜像 在 Spring Boot 项目的根目录下执行以下命令,构建镜像: ``` docker build -t your-image-name . ``` 4. 启动容器 在 Spring Boot 项目的根目录下执行以下命令,启动容器: ``` docker-compose up -d ``` 5. 查看容器状态 执行以下命令查看容器状态: ``` docker-compose ps ``` 至此,你已经成功使用 Docker Compose 部署了 Spring Boot 项目。如果需要停止容器,可以执行以下命令: ``` docker-compose stop ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值