
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)