Shell脚本+DockerCompose发布项目
-
项目(Dockefile)->git->Shell拉取->打包->执行 docker-compose up -d
-
Docker-compose
-
java程序
-
Mysql
-
Redis
-
思路分析:
1.推送远程仓库 gitee.cn
2.CentOS
1)检查本地是否有相关镜像和容器,如果有,直接删掉 如果容器ID不为空,删除容器:docker rm -f 容器名字 删除镜像:docker rmi 镜像名
2)制作镜像-DockerCompose
A:MySQL、Redis 安装一次[检查是否已安装,没安装,才安全MySQL,同理:Redis] a.判断MySQL和Redis容器是否存在
b.如果不存在,则创建,存在就不需要处理
B:构建苍穹外卖镜像 Dockerfile
a.构建苍穹外卖镜像
b.创建实例
其他案例参考脚本:
#!/bin/bash
function rmi_fk()
{
if [ -n "$(docker ps -f name=fkc --format '{{.ID}}' )" ]
then
#停止容器
docker stop $(docker ps -f name=fkc --format '{{.ID}}' )
fi
if [ -n "$(docker ps -a -f name=fkc --format '{{.ID}}' )" ]
then
#删除容器
docker rm $(docker ps -a -f name=fkc --format '{{.ID}}' )
fi
if [ -n "$(docker images fk:1.0 --format '{{.ID}}' )" ]
then
#删除之前的镜像
docker rmi $(docker images fk:1.0 --format '{{.ID}}' )
fi
}
function build_fk()
{
cd /usr/local/server/jenkins_projects/jars/fk/target
cp ../Dockerfile ./
docker build -t fk:1.0 .
docker run -it -d --name=fkc -p 38081:38081 fk:1.0
}
rmi_fk
build_fk
DockerCompose不重复创建命令:--no-recreate
参考
shell脚本:
#!/bin/sh
echo =================================
echo 苍穹外卖自动化部署脚本启动
echo =================================
#项目名称
APP_NAME=sky-take-out
#仓库地址
URL=https://gitee.com/ITdog1/sky-take-out.git
#查看项目进程,并停止
tpid=`ps -ef|grep sky-server|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo '停止原来运行中的工程 Stop Process!'
kill -15 $tpid
fi
sleep 2
#再次确认,查看项目进程,并停止
tpid=`ps -ef|grep sky-server|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo '停止原来运行中的工程 Kill Process!'
kill -9 $tpid
fi
#如果文件夹不存在,就克隆仓库
if [ ! -d "./$APP_NAME" ]; then
echo '克隆仓库'$URL
git clone -b test $URL
fi
#删掉苍穹外卖容器
docker rm -f sky-server
#休眠3秒
sleep 3
#删除苍穹外卖镜像
docker rmi docker-compose_sky-server:latest
#休眠3秒
sleep 3
echo 拉取仓库最新代码
cd $APP_NAME
git pull origin test
git checkout test
echo 开始编译项目打包,请耐心等待
mvn clean package -Dmaven.test.skip=true
cd sky-server/target
mv sky-server-1.0-SNAPSHOT.jar /usr/local/docker-compose/sky-server.jar
cd /usr/local/docker-compose
#sudo docker build -t sky-server.jar:1.0 .
docker-compose up -d
#nohup java -jar sky-server-1.0-SNAPSHOT.jar &> sky.log &
echo '项目启动完成! 后台管理地址 http://ip:8080/doc.html'
Dockerfile
# 指定基础镜像
FROM openjdk:11-jre# 拷贝jdk和java项目的包
COPY ./sky-server.jar /tmp/app.jar# 暴露端口
EXPOSE 8082
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
Dockercompose脚本:
version: "3.2"
services:
mysql:
restart: always
image: mysql:8.0
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "/usr/local/mysql/log:/var/log/mysql"
- "/usr/local/mysql/data:/var/lib/mysql"
- "/usr/local/mysql/conf:/etc/mysql/conf.d"redis:
image: redis:6.2.4
restart: always
container_name: redis
privileged: true
ports:
- 6379:6379
environment:
TZ: Asia/Shanghai
volumes:
- /usr/local/redis/data:/usr/local/redis/data
- /usr/local/redis/conf/redis.conf:/usr/local/redis/conf/redis.conf
- /usr/local/redis/logs:/usr/local/redis/logs
command: ["redis-server","/usr/local/redis/conf/redis.conf"]sky-server:
container_name: sky-server
build: ./
ports:
- "8080:8080"