赞
踩
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
在pull界面我们就可以看到下载的文件是一层层的
好处:共享资源
比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
大家需要注意,Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶层,这一层通常被称为容器层,容器层之下的都叫镜像层。
我们现在已经掌握了从docker hub上获取相关镜像,然后运行容器,并作出我们自己的处理,但有时候我们需要将我们自己的容器制作为对应的镜像,以便后面继续使用,这时我们就需要用到docker commit …命令了
docker commit -m="要提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
操作案例
我们通过tomcat镜像来创建容器后操作处理,然后将容器制作为新的镜像然后我们通过新的镜像来制作容器来演示这个效果
docker pull tomcat
docker run -it -p 8888:8080 tomcat
参数 | 说明 |
---|---|
-p | 主机端号 |
-P | 随机分配端口 |
-i | 交互 |
-t | 终端 |
404
说明访问到了
我们发现启动的容器中没有访问的资源,那么我们自己创建对应的资源即可
docker exec -it 容器ID /bin/bash
我们现在的容器和下载的有区别了,我们可以在这个基础上来创建新的镜像
docker commit -a='biao' -m='add index.html' 容器ID biao/tomcat:1.6
docker run -it -p 8888:8080 biao/tomcat:1.6
前面介绍过了镜像和容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题。
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就想当于Redis中持久化方式的RDBheAOF。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
运行一个CentOS容器
docker run -it -v /宿主机绝对路径:/容器内目录 镜像名
Ctrl+P+Q可退出进程
在宿主的根目录下会多出对应的文件夹
然后在容器的根目录下也可以看到这个文件夹
通过inspect命令可以查询容器的详情
修改数据
宿主机可以同步到
停止掉容器后,数据仍然存在
修改权限
ro:只读的意思
docker run-it-v /宿主机绝对路径:/容器目录:ro 镜像名
宿主机根目录下创建一个mydocker,并在该目录下创建一个文件,内容如下
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
docker build -f dockerFile1 -t biao/centos .
-f DockerFile文件的路径
-t 标签
. 当前的路径
根据新创建的镜像文件创建一个容器,启动后我们可以看到在容器中创建的有对应的目录
这两个目录和宿主机的映射目录在哪呢?这时我们可以通过inspect命令查看
验证就只需要在宿主机创建文件,然后再到容器对应的文件夹中查看即可
命名的容器挂载数据卷,其他容器通过挂载这个 容器实现数据共享,挂载数据的容器,称之为数据卷容器
docker run -it --name dc02 --volumes-from dc01 biao/centos
docker run -it --name dc03 --volumes-from dc01 biao/centos
创建了两个子容器后,首先都可以看到dc01中的共享资源。第二个在dc01中修改了共享资源文件后,在两个容器中也是可见的。
注意 :删除dc01父容器后,dc02和dc03两个子容器之间数据还是共享的
注意: 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
DockerFile中的指令需要满足如下的规则
docker执行一个Dockerfile脚本的流程大致如下:
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
我们从官方pull下来的centos是没有vim命令的,我们可以自定义一个镜像,功能比官方提供的强大一点
FROM centos
MAINTAINER biao<biao163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
EXPOSE 80
CMD echo $MYPATH
CMD echo "success ------- 66666"
CMD /bin/bash
docker build -f DockerFile文件路径 -t 镜像名称:tag .
例子
[root@biao mydocker]# docker build -f /mydocker/dockerFile2 -t biao/centos:1.7 .
成功:
docker run -it biao/centos:1.7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。