Docker-compose部署java项目
Docker-compose部署java项目
前置条件:
- 安装docker
- 安装docker-compose
- 防火墙啥的都设置好
dockerfile-demo
FROM java:8
VOLUME /tmp
WORKDIR /
ADD ./project-demo-1.0.0.jar project-demo.jar
RUN bash -c 'touch /project-demo.jar'
EXPOSE 8080
ENTRYPOINT ["java","-jar","/project-demo.jar"]
compose-project-demo.yaml
version: '3'
# 关于网络,如果用到mysql或者redis,并且希望在同一个网络,那么就可以直接使用同一个网络名
# docker network create project-demo_bridge
networks:
project-demo_bridge:
driver: bridge
services:
project-demo:
container_name: project-demo
image: project-demo:1.0
restart: always
volumes:
# 同步时间
- /etc/localtime:/etc/localtime:ro
# 如果项目有些日志或者写文件,需要同步到宿主机器,也需要定义相应的卷
- ./data:/etc/project-demo/data
- ./log:/etc/project-demo/log
ports:
- 8080:8080
networks:
- project-demo_bridge
start-project-demo.sh
#! /usr/bin/bash
PROJECT_NAME=project-demo
containerName=$PROJECT_NAME:1.0
imagesName=$PROJECT_NAME:1.0
# 定义一个名称变量
network_name="$PROJECT_NAME_bridge"
filterName=`docker network ls | grep $network_name | awk '{ print $2 }'`
if [ "$filterName" == "" ]; then
# 不存在就创建
docker network create $network_name
echo "Created network $network_name success!!"
fi
existContainer=`docker inspect --format '{{.State.Running}}' ${containerName}`
function delExistImagesAndContainer() {
if [ "${existContainer}" == "true" ]; then
docker stop ${containerName}
echo "容器:${containerName}已停止"
docker rm ${containerName}
echo "容器:${containerName}已删除"
docker rmi ${imagesName}
echo "镜像:${containerName}已删除"
fi
}
function buildJar(){
echo "正在构建jar镜像"
# 其实这个构建指令是可以直接写到compose的那个启动文件中的
docker build -f dockerfile-$PROJECT_NAME -t $PROJECT_NAME:1.0 .
echo "镜像构建完成"
echo "正在创建并启动容器"
docker-compose -f ./compose-$PROJECT_NAME.yaml up -d
}
delExistImagesAndContainer
buildJar