什么是容器数据卷

docker的理念

将应用和环境打包成镜像!
数据如果在容器中,如果容器删除,数据就会丢失! 需求:数据可以持久化
Mysql,容器删了,数据就没了,需求:Mysql数据可以存储到本地!
容器之间可以有一个容器数据==共享技术!Docker容器中的数据,同步到本地!==
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

总结:容器的持久化和同步操作!容器间也是可以数据共享!

使用数据卷

方式一:直接使用命令来挂载 -v,可以自己创建主机目录。(即自动挂载)

docker run -it -v 主机目录:容器内目录

测试

docker run -it -v /home/test:/home centos bash

启动后,我们可以通过docker inspect 容器id查看挂载信息

docker inspect id

具名和匿名挂载

#匿名挂载
-v 容器内路径!
docker run -d -P --name nginx nginx01 -v /etc/nginx nginx    #-P随机映射端口
#查看所有匿名卷的情况
docker volume ls
#这里发现,这种匿名挂载只写了容器内路径,没有写容器外的路径。
#具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx/ nginx

#通过 -v 卷名:容器内路径
#查看卷
docker volume inspect juming-nginx

所有的docker容器内的卷,没有指定目录的情况下都是在"==/var/lib/docker/volumes/卷名/_data=="大多数情况下都使用具名挂载。

#如何确定是具名还是匿名,还是指定路径挂载!
-v  容器内路径                  #匿名挂载
-v  卷名:容器内路径            #具名挂载
-v  /宿主机路径:容器内路径      #指定路径挂载
拓展
#通过 -v 容器内路径,ro rw改变读写权限
ro  readonly    #只读,只能从宿主机修改
rw  readwrite   #可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx/:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx/:rw nginx

初识Dockerfile

Dockerfile就是用来构建Docker镜像的构建文件!命令脚本!
通过这个脚本可以生产一个镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

方式二

#创建一个dockerfile文件,名字自取,建议dockerfile
#文件中的内容 指令 (大写) 参数
FROM centos
VOLUME ["volume01","volume02"]

CMD echo "----end----"

CMD /bin/bash

#每个命令,就是镜像的每一层
#运行脚本
docker build -f /home/docker-test-volume/dockerfile1 -t dayu/centos:1.0

==发现是匿名挂载,用inspect可查看挂载路径==

数据卷容器

多个mysql同步数据

docker run it --name docker01 dayu/centos:1.0
docker run it --name docker02 --volumes-from docker01 dayu/centos:1.0
#此时,宿主机 docker01 docker02都有volumes01 volumes02,自动同步。

==删除docker01,不影响docker02和宿主机使用==

==结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用位置。
但是你持久化到了本地,这个时候,本地的数据是不会删除的!==

DockerFile

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

  1. 编写一个 dockerfile 文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(dockerHub、阿里云镜像仓库!)

    基础知识:

  5. 每个保留关键字(指令)都必须是大写字母
  6. 执行从上到下
  7. -表示注释

  8. 每一个指令都会创建提交一个新的镜像层,并提交

dockerfile 是面向开发的,我们以后要发布新项目,做镜像,就需要编写dockerfile 文件。

  • Docker镜像逐渐成为企业交付的标准
  • Dockerfile :构建文件,定义了一切的步骤,源代码
  • DockerImages :通过DockerFile 构建生成的镜像,最终发布和运行的产品,原来是jar war
  • Docker容器 :容器就是镜像运行起来提供服务器

DockerFile 的指令

FROM                        #基础镜像,一切从这里开始
MAINTAINER                  #镜像作者,姓名 + 邮箱
RUN                         #镜像构建的时候需要运行的命令
ADD                         #步骤,可以自动解压
WORKDIR                     #镜像的工作目录
VOLUME                      #挂载的目录
EXPOSE                      #暴露端口配置
CMD                         #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT                  #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD                     #当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY                        #类似ADD,将我们文件拷贝到镜像中
ENV                         #构建的时候设置环境变量!

实战

创建一个centos

#编写配置文件
FROM centos
MAINTAINER dayu<836277273@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
#通过这个文件构建镜像
#命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
docker build -f dockerfile-centos -t mycentos:1.0 .
#Successfully built 57c86b31133c
#Successfully tagged mycentos:1.0
docker run -it mycentos:1.0 bash            #启动容器,查看是否有vim ifconfig
CMD 和 ENTRYPOINT 区别
CMD                         #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被其他命令替代,但是不能追加参数
ENTRYPOINT                  #指定这个容器启动的时候要运行的命令,可以追加参数

Tomcat镜像

  1. 准备镜像文件 tomcat 压缩包,jdk 的压缩包
  2. 编写 Dockfile 文件,官方命名,build 自动寻找,就不需要 -f 指定文件了

    FROM centos
    MAINTAINER dayu<836277273@qq.com>
    
    COPY readme.txt /usr/local/readme.txt
    
    ADD jdk-XXXX-XXXX-XXX.tar.gz /usr/local
    ADD apach-tomcat-XXX.tar.gz /usr/local
    
    RUN yum -y install vim
    
    ENV MYPATH /usr/local
    WORK $MYPATH
    
    ENV JAVA_HOME /usr/local/jdkXXXX
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar/:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-XXX-XXX
    ENV CATALINA_BASH /usr/local/apache-XXX-XXX
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$ENV CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-XXX-XXX/bin/startup.sh && tail -F /url/local/apache-XXX-XXX/bin/logs/catalina.out
  3. 构建镜像

    docker build -t diytomcat .
  4. 启动镜像

    docker run -d -p 9090:8080 --name dayutomcat -v /home/yu/build/tomcat/test:/usr/local/apache-tomcat/webapps/test -v /home/yu/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-XXX/logs diytomcat
  5. 访问镜像
  6. 发布项目(由于做了挂载卷,我们直接在本地编写项目就可以发布了)