docker-compose部署springboot项目

2022-08-29 12:25:36

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

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

  • 作者:xujingyiss
  • 原文链接:https://blog.csdn.net/xujingyiss/article/details/119179987
    更新时间:2022-08-29 12:25:36