docker镜像
docker tomcat镜像530MB,官网的tomcat linux安装包9428KB,530*1024=542,720KB,docker下载的tomcat镜像比官网的tomcat体积大很多。
因为docker镜像是基于UnionFS联合文件系统实现分层的,一个tomcat镜像由下向上层层相叠:centos、JDK、tomcat。
主机磁盘上只保存一份base镜像,内存中也只加载一份base镜像,然后多个镜像都从相同的base镜像构建而来。比如下载,先用docker下载tomcat7,再用docker下载tomcat8,下载tomcat8时,前面的几个基础镜像就不需要下载了,内存磁盘都已经有了。
docker容器
docker镜像是只读的,不能修改。当把这个镜像启动为一个容器时,一个新的写入层被加载到镜像的顶部,这一层被叫为容器层,下面的叫镜像层。
部署tomcat
docker run -it -p 8888:8080 tomcat:jdk8
docker run -d -p 8888:8080 tomcat:jdk8
8080是容器内tomcat的端口号,8888是docker容器的端口号
浏览器访问:http://192.168.0.105:8888/,第一次404找不到资源,因为webapps下没有任何文件,复制webapp.dist下的文件到webapp。
修改容器为新的镜像
docker commit -a="zrw" -m="add project" 004efbe2d4c3 tomcat:2.0
容器卷
容器卷的设计目的是数据持久化。将主机上的某个目录与容器的某个目录(也称为挂载点或卷)关联起来,容器挂载点的内容就是主机目录下的内容;修改主机上该目录的内容时,不需要同步容器,对容器来说是立即生效的;相反容器向挂载点写数据,也会立刻在主机某个目录生效,而不会写入到容器存储层。
命令添加容器卷
docker run -it -v /宿主机绝对目录:/容器内目录:ro 镜像名
-v 添加容器卷 ro 容器内只读,不可修改
查看数据卷是否挂载成功
docker inspect
DockerFile添加容器卷
1、根目录下创建mydocker文件夹并进入
2、新建DockerFile,内容
FROM tomcat:2.0
# 在容器端添加两个数据卷。考虑不同操作系统的宿主机文件系统的不同,会影响DockerFile的可移植性、分享性,DockersFile不支持指定宿主机目录,而是提供默认目录。
VOLUME ["/containerdata1", "/containerdata2"]
CMD echo "------------------------------successful------------------------------"
CMD /bin/bash
3、构建
docker build -f /mydocker/DockerFile -t tomcat:3.0 .
数据卷容器
容器1指定数据卷目录,其它容器启动时通过参数"--volumes-from 容器1"继承容器1,以实现数据共享。
docker run -it --name container1 tomcat:3.0
docker run -it --name container2 --volumes-from container1 centos:7
即使父容器挂掉了,子容器之间还可以实现完整的数据共享。