A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

概念简述
  • 镜像  一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
        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/vqAVRrEhttp://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

2 个回复

正序浏览
回复 使用道具 举报
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马