您的位置:首页 > 运维架构 > Docker

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

2017-05-25 20:55 344 查看

概念简述

镜像 一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。

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部署部分的方法。

[b]编写Dockerfile文件[/b]

补充:关于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):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐