Jave web 之docker部署

155 阅读2分钟

之前写的微服务都是使用公司的tce进行部署,没有亲自实践过docker。就着之前写的简单helloworld,尝试把war部署到docker中运行,实践一下。

war是之前java web helloworld编译生成war包

本篇重点记录一下一个简单war的的docker构建和部署流程

一、基本概念

docker技术已经比较成熟,官网有详细介绍,网上也有很多blog。docker使用了linux namespace、cgroup等机制进行容器隔离,相比之前类似vmware的硬件虚拟化技术,docker资源分配更有弹性、部署流程更加标准化,避免了很多重复性劳动,提高了效率。

Docker的几个基本概念
  • Docker image:运行编写的服务之前,我们需要把服务编译后的可执行文件,以及服务运行的环境如tomcat统一打包成image文件。image有分层的概念,我们可以基于已有的镜像进行修改,或者在其上一层进行打包新的镜像。这样设计的好处很明显,最大限度的实现了复用,提高了效率。
  • Docker container:image打包好,需要在容器中运行,不同的image运行通过容器进行隔离
  • Docker engine:容器的启动,需要引擎的支持,类比vmvare
  • Docker hub仓库:类比git 仓库,一些通用的image,如nginx、tomcat可以从仓库直接下载下来



二、docker 部署tomcat+war包

  1. 官网下载:download.docker.com/mac/stable/…,下载过程中需要注册账号
  2. 安装:dmg顺序安装即可
  3. 代理配置:在docker setting配置阿里云代理是为了能够加速下载docker image,cr.console.aliyun.com/cn-hangzhou…,需要登录,二维码扫描支付宝账号即可

  • 拉取tomcat image
Docker pull tomcat
  • 编写自己的docker file

#基于仓库已有的tomcat image
From tomcat:latest
#之后构建命令运行的目录,image中的路径
WORKDIR /usr/local/tomcat/webapps
#拷贝war包到image中
ADD webdemo-1.0-SNAPSHOT webdemo-1.0-SNAPSHOT
#监听宿主机80端口
EXPOSE 80

  • 构建镜像
docker build -t="forest/war_demo:v1" .

Docker images ,发现镜像构建成功


  • 启动运行
docker run -d -p 8098:8080 --name forest_tomcat_war forest/war_demo:v1
进入docker容器,war包已经在容器中
docker exec -it db7b1ce15437 /bin/bash

ctrl + P + Q 推出container,docker ps -a ,可以看到helloworld程序所在的container
验证运行结果

三、容器隔离的实现主要依靠linux kernel的三个机制

  • namespace:资源视图隔离,如PID,网络等
  • juejin.cn/post/684490…
  • cgroup:资源使用率控制,如控制各容器的cpu、内存使用上线
  • juejin.cn/post/684490…
  • chroot:独立文件系统,设定容器内部的根目录,限定容器的文件访问范围在自己的根目录内。

四、基本命令
  • Docker seach: image 仓库检索
  • Docker pull:image 仓库拉取
  • Docker images: image列表显示
  • Docker run :启动container,运行image
  • Docker ps -a: 显示docker下所有的container信息
  • Docker builder: 基于docker file文件,构建自己的image文件