使用docker容器定制镜像(image)并部署简单 web应用

Posted OneDay-X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用docker容器定制镜像(image)并部署简单 web应用相关的知识,希望对你有一定的参考价值。

概念简述

  • 镜像 一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
    Docker镜像是一个只读的模板。比如一个镜像可以包含Ubuntu系统以及安装在Ubuntu上的Apache Web服务器和你自己的应用。镜像是用来创建容器的。Docker提供了一个简单的方式用以创建新的镜像或者更新现存的镜像,甚至你可以下载其他地方提供的镜像。镜像是Docker服务的组件之一。
    由于Docker使用一个统一文件系统,Docker镜像其实就是一堆文件的集合,并不是像VM那样的是一个操作系统。镜像可以简单到只有一个程序文件,比如如果你写了一个简单的hello world程序放到一个空的镜像中,那么整个镜像的大小,就是你编译后的二进制文件的大小。
    总结来说就是:
    镜像(image)是 Docker 的三大组件之一;
    镜像是用来启动容器的基石;
    镜像是只读的,也即是无状态的,一个镜像是永久不会变的;
    一个没有任何父镜像的镜像,称之为基础镜像;
    在Docker容器中所有的变更都发生顶层的镜像可写层;
    Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载( 默认是 Docker Hub 公共注册服务器中的仓库)。
  • 容器 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库 镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务 1)docker hub 2)私有仓库
  • Dockerfile 镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
  • 数据卷 一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
    * 数据卷可以在容器之间共享和重用
    * 对数据卷的修改会立马生效
    * 对数据卷的更新,不会影响镜像
    * 数据卷默认会一直存在,即使容器被删除

环境准备

(运行环境:Ubuntu 16.04)
- 安装jre:
可参考1:http://blog.csdn.net/u010542873/article/details/51679373
2:http://www.linuxidc.com/Linux/2016-04/129731.htm
- 安装Tomcat:
可参考:Tomcat9安装
- 在tomcat中部署webapp:
可参考:http://www.linuxidc.com/Linux/2015-02/112887.htm
IDEA集成样例可参考http://blog.csdn.net/yhao2014/article/details/45740111
- Ubuntu 16.04安装docker:
可参考 http://www.linuxidc.com/Linux/2016-12/138489.htm

利用DockerFile制定镜像

通过编写Dockerfile的方式制作镜像。
需要在Dockerfile中完成如下几项工作:
(1)安装jre
(2)安装tomcat,并完成在tomcat中部署web应用的基本配置(为实现此功能:在制作镜像之前直接先完成tomcat的基础配置,然后直接拷贝到镜像中即可)。
(3)对外开发8080端口(具体的端口值可以根据实际Tomcat配置参数为准)。

$mkdir docker
$cd docker

建立docker文件夹,并把之前下好的jre文件夹和tomcat文件夹(或者压缩包,均可)拖入其中,docker文件夹下目录如下:

说明:webapps文件夹中可以放入war吧,后面通过数据卷的方式挂载到镜像里,简单点可以直接将项目文件夹放入apache-tomcat-9.0.0.M21的webapps中,让tomcat自行部署,其余方法可参考上面Tomcat部署部分的方法。

编写Dockerfile文件

补充:关于Dockerfile文件
在容器中配置运行环境(此处是jre和tomcat)的任务主要是在容器中安装软件,并进行相应的配置,如果把这个过程所要执行的命令全都提取出来,写入一个文件中,若需要构建镜像则直接运行该文件,基于其中的命令生成一个镜像。这就是基于Dockerfile构建镜像的方式,这个文件就称为Dockerfile
Dockerfile文件一共分为四个部分,分别是:注释信息、基础镜像、创建者信息、构建镜像所需的命令:
详细介绍可参考:http://www.tuicool.com/articles/vqAVRrEhttp://blog.csdn.net/wsscy2004/article/details/25878223
Dockerfile文件内容如下:
(以系统Ubuntu镜像为基础镜像)

#Build java web app container image
FROM ubuntu:16.04
MAINTAINER zhaokx3 "zhaokx3@mail2.sysu.edu.cn"

#Make java and tomcat install directory
RUN mkdir /usr/local/java
RUN mkdir /usr/local/tomcat

#Copy jre and tomcat into image
ADD jre1.8.0_131 /usr/local/java/
ADD apache-tomcat-9.0.0.M21 /usr/local/tomcat/

ENV PATH $PATH:/usr/local/java/bin

#Expose http port
EXPOSE 8080

CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

创建镜像

 sudo docker build -t="ubuntu/mine:tomcat" .

启动容器

sudo docker run -p 8090:8080 --name tomcat -v /home/zhaokx3/docker/webapps/:/webapps/ ubuntu/mine:tomcat

简要说明:参数-v指定挂载的卷,如没有可不使用,参数-p将8080端口映射成主机的8090端口,这样就可以访问主机的8090端口就到容器的8080端口。
docker run 命令详解可参考:http://www.lupaworld.com/article-250439-1.html

最后成功通过http://localhost:8090/your_test 访问自己的web应用(端口8090):

可对比直接利用Tomcat部署web应用(端口8080):

以上是关于使用docker容器定制镜像(image)并部署简单 web应用的主要内容,如果未能解决你的问题,请参考以下文章

Docker极简教程 高级

Docker下载镜像并创建容器运行

docker基本部署

Docker基础

Docker是什么?

Docker基础操作