一、docker部署springboot项目
1、Dockerfile文件
FROM openjdk:8
#RUN rm -f xxx 删除镜像内文件
#COPY ./x /home/ 将文件复制到镜像指定目录
#WORDIR /data 切换到镜像的/app目录,等价 cd /app
VOLUME /home/fcw
ADD app.jar app.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/app.jar"]
centos 时间矫正
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
unbtn时间矫正
ENV TZ=Asia/Shanghai
RUN apt update \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
&& apt install tzdata \
&& apt clean \
&& apt autoclean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2、构建镜像(生成一个jar的本地镜像)
docker build -t app_image .
3、后台运行docker的web容器(使用构建出的镜像生成一个web服务实例)
docker run -d -p 8081:8081 -v /home/fcw/peofile:/home/fcw/profile --name app_con app_image
4、sh脚本编写
#!/bin/bash
dkfilePath=/home/fcw/Dockerfile
conontentPath=/home/zxwz
#容器数据卷映射目录
vpath=/home/fcw/profile/
# 容器名称
cname=app_con
# 镜像名称
iname=app_img
#私有网络名称
netname=yd
# 查找正在运行的javaweb容器ID并关闭
serverId=`docker ps -a | grep $cname | awk '{print $1}'`
if [ -z $serverId ]; then
echo "没有检测到正在运行的服务容器。开始启动新的容器......"
else
echo "扫描到正在运行的容器,执行关闭......"
docker rm $(docker stop $serverId)
fi
# 删除旧镜像
# 查找存在的镜像
serverId=`docker images | grep $iname | awk '{print $3}'`
if [ -z $serverId ]; then
echo "没有检测到指定的镜像......"
else
echo "扫描到指定的镜像......"
docker rmi -f $iname
fi
# 构建新的javaweb服务镜像,并命名为inquiry_admin_image
echo "构建所需镜像......"
docker build -t $iname -f $dkfilePath $conontentPath
if [ $? -eq 0 ]; then
echo "镜像构建完成,开始启动新容器......"
else
echo "镜像构建失败,请查看错误日志"
exit;
fi
# 启动新javaweb容器
docker run \
-d --name $cname \
--network $netname \
--network-alias $cname \
-p 8081:8081 \
-v $vpath:$vpath \
--privileged=true \
$iname
serverId=`docker ps | grep $cname | awk '{print $1}'`
echo "新javaweb容器已启动,ID:$serverId, name:$cname, 网络:$netname"
二、docker 命令
1、镜像查询、构建、删除操作
docker --help
#查询镜像
docker search [iamge_name]:tag
#拉取远程仓库镜像
docker pull [image_name]:tag
#加载本地镜像
docker load -i [image_name].img.gz
#Dockerfile构建镜像
docker build -t iamge_name -f dockerfile ./
#打包镜像
docker save -o image_name.img.gz image_name
#移除镜像
docker rmi image_name
2、容器查询、构建、交互、删除
#容器关闭、重启、容器
docker stop | restart | rm container_name
#以交互式终端启动容器
docker run -it --name [con_name] -p [psyport]:[conport] -v [psypath]:[vpath]
[image_name]
#以后台方式启动运行容器
docker run -d --name [con_name] -p [psyport]:[conport] -v [psypath]:[vpath]
[image_name]
#进入正在运行的容器以命令行的形式与容器交互
docker exec -it [con_id] /bin/bash
#容器文件拷贝至宿主机
docker cp [con_id]:[con_path] [psy_path]
#宿主机拷贝文件到容器
docker cp [psy_path] [con_id]:[con_path]
#查看容器详情
docker inspect container_name
#查看容器日志
docker logs -f -t --tail 3 container_name
#查看指定时间的日志 (查看2019-06-05 的14:14:456至14:15:06的日志)
docker logs --since='2019-06-05T14:14:45' --until='2019-06-05T14:15:06' container_name
3、批量停止容器 、冗余清除
方式1:
docker stop $(docker ps -a | grep "key" | awk '{print $1}')
方式2:
docker ps | grep "key" | awk '{print $1}' | xargs docker stop docker
#移除状态为exited的容器
docker rm $( docker ps -qf status=exited)
#删除孤立容器
docker container prune、
#磁盘清理
docker system prune --volumes
docker system prune --a
cat /dev/null /var/lib/docker/containers/*-json.log
4、容器私有网络
为了实现容器间的网络同信交互,docker提供了bridge、host、none、container四种网络模式
#查询网络
docker network ls
#创建私有网络
docker network create --driver=bridge netname
#查看网络详情
docker network inspect netname
#将容器桥接到私有网络
docker network connect netname container_name
#将容器与私有网络断开
docker network disconnect netname container_name
#删私有网络
docker network rm | prune netname