docker部署应用及常用命令

一、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

     

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值