黑马程序员技术交流社区
标题:
【上海校区】使用docker容器定制镜像(image)并部署简单 we...
[打印本页]
作者:
不二晨
时间:
2018-10-8 11:03
标题:
【上海校区】使用docker容器定制镜像(image)并部署简单 we...
概念简述
镜像
一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
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
1
2
建立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/vqAVRrE
或
http://blog.csdn.net/wsscy2004/article/details/25878223
Dockerfile文件内容如下:
(以系统Ubuntu镜像为基础镜像)
#Build java web app container imageFROM ubuntu:16.04MAINTAINER zhaokx3 "zhaokx3@mail2.sysu.edu.cn"#Make java and tomcat install directoryRUN mkdir /usr/local/javaRUN mkdir /usr/local/tomcat#Copy jre and tomcat into imageADD 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 portEXPOSE 8080CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
创建镜像
sudo docker build -t="ubuntu/mine:tomcat" .
1
2
启动容器
sudo docker run -p 8090:8080 --name tomcat -v /home/zhaokx3/docker/webapps/:/webapps/ ubuntu/mine:tomcat
1
简要说明:参数-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):
【转载】
https://blog.csdn.net/zhaokx3/ar ... 527?utm_source=copy
作者:
不二晨
时间:
2018-10-10 11:40
奈斯
作者:
魔都黑马少年梦
时间:
2018-11-1 16:33
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2