• Docker使用数据卷自定义镜像Dockerfile


    目录

    一、数据卷

    1.1、简介

    1.2、用途

    1.3、特性:

    1.4、数据卷相关操作

    1.5、使用情况

    二、自定义镜像Dockerfile

    2.1、Dockerfile

    2.1、使用情况

    2.3、具体操作

    a、自定义centos

    创建文件   

     编辑内容

    制作镜像

    测试

    b、自定义tomcat

     创建文件   

    编辑内容 

    制作镜像

    构建镜像

    测试


    一、数据卷

    有数据卷就可以直接从数据卷查看日志,不用一个一个进去查看日志了

    1.1、简介

    数据卷是Docker容器中用于持久化存储数据的一种机制。数据卷可以在容器之间共享和重用,使得容器之间可以更加灵活地共享数据。数据卷可以在容器启动时被创建,并且可以在容器停止或删除时保留数据。数据卷可以存储在宿主机的文件系统中,也可以存储在网络存储中,如网络文件系统(NFS)或云存储服务。数据卷的使用可以帮助用户更好地管理容器中的数据,并且可以提高容器的可移植性和可靠性。

    1.2、用途

    1. 数据持久化:数据卷可以用于持久化存储容器中的数据,确保数据在容器重启或删除后仍然存在。

    2. 数据共享:多个容器可以共享同一个数据卷,以便它们之间可以共享数据。

    3. 数据备份和恢复:通过使用数据卷,可以更容易地备份和恢复容器中的数据。

    4. 数据迁移:数据卷可以用于将容器中的数据迁移到其他地方,如不同的主机或云存储服务。

    5. 数据共享和协作:多个团队或应用程序可以共享同一个数据卷,以便它们之间可以协作和共享数据。

    总的来说,数据卷可以帮助用户更好地管理容器中的数据,提高容器的可靠性和可移植性,并促进容器之间的数据共享和协作。

    1.3、特性:

    • 在容器之间共享和重用
    •  修改会立马生效
    • 更新,不会影响镜像
    • 默认会一直存在,即使容器被删除数据卷相关操作

    1.4、数据卷相关操作

       1.创建数据卷

         docker volume create my-vol

         此时,数据卷默认会放到/var/lib/docker/volumes路径下,会发现所新建的数据卷位置,查看命令如下:

         ## 参数可以为数字“1”,字母L:大小写均可,但效果不一样

         ls -1 /var/lib/docker/volumes

       2.查看所有的数据卷

         docker volume ls

       3.查看指定数据卷的详细信息(显示一个JSON格式的数据)

         docker volume inspect my-vol

      

       4.删除一个volume

         docker volume rm my-vol

       

         注1:数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,

              并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,

              所以要及时删除

       ## 挂载数据卷,最好是通过run而非create/start创建启动容器

       ## create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以

    1.5、使用情况

    1、数据卷------------宿主机与容器共享目录

    docker run -di --name c2 -v /home/shasha/data/:/home/shasha/data/ centos:7

    docker run   启动容器

    -di启动不进入

    -v挂载

    shasha 自己取的名字,查看没有这个目录,也没关系会自己创建

    1. [root@localhost ~]# docker images
    2. REPOSITORY TAG IMAGE ID CREATED SIZE
    3. centos 7 eeb6ee3f44bd 2 years ago 204MB
    4. [root@localhost ~]# cd /home/
    5. [root@localhost home]# ll
    6. 总用量 0
    7. drwxr-xr-x. 3 root root 18 228 16:37 shasha
    8. [root@localhost home]# cd shasha/
    9. [root@localhost shasha]# ll
    10. 总用量 0
    11. drwxr-xr-x. 2 root root 6 228 16:37 data
    12. [root@localhost shasha]# cd data/
    13. [root@localhost data]# ll
    14. 总用量 0
    15. [root@localhost data]#

     下好后,就可以在home下查到shasha,切进去就有data,查看data里面是没有文件的

    [root@localhost data]# docker exec -it c2 /bin/bash      ----------------进入容器
    [root@d01495d52976 /]# pwd                                        ---------------显示在根目录下
    /
    [root@d01495d52976 home]# cd /home/shasha/data/     --------------进入data目录
    [root@d01495d52976 data]#

    假如data是tomcat日志

    [root@d01495d52976 data]# echo  tomcatrun >123.txt
    [root@d01495d52976 data]# ll
    total 4
    -rw-r--r--. 1 root root 10 Feb 28 08:57 123.txt
    [root@d01495d52976 data]# pwdread escape sequence
    [root@localhost data]# ll
    总用量 4
    -rw-r--r--. 1 root root 10 2月  28 16:57 123.txt
    [root@localhost data]# cat 123.txt                              ---------  查看日志
    tomcatrun
    [root@localhost data]#

    2、数据卷容器-------容器与容器共享目录

    1. docker run -di -v /home/javaxl/data/c4 --name c4 centos:7
    2. docker run -di --volumes-from c4 --name c6 centos:7

    创建c4,然后绑定到c6,,c6里面也有/home/javaxl/data/c4

     

    假设这是 echo operate  >readme.txt上传文件 

    进到c6 ,发现可以看见c4里面的日志,就可以cat readme.txt

     

    二、自定义镜像Dockerfile

    2.1、Dockerfile

    Dockerfile是一个文本文件,其中包含了一系列用于构建Docker镜像的指令和配置。通过在Dockerfile中编写这些指令,用户可以定义镜像中包含的文件、环境变量、运行命令等内容,从而实现定制化的镜像构建过程。Dockerfile通常用于自动化构建过程,使得镜像的构建过程更加简单、可重复和可管理。

    作用:制作镜像文件

    2.1、使用情况

    1. 需要在多个环境中部署相同的应用程序或系统配置。通过创建自定义镜像,可以在不同的环境中快速部署相同的配置,提高部署效率。

    2. 需要定制化的操作系统或应用程序。通过创建自定义镜像,可以在镜像中预先安装所需的软件包、配置文件等,以满足特定的需求。

    3. 需要在本地开发环境和生产环境之间保持一致性。通过创建自定义镜像,可以在本地开发环境中构建和测试应用程序,并将相同的镜像部署到生产环境中,确保一致性。

    4. 需要加密或保护敏感数据。通过创建自定义镜像,可以在镜像中加密或隐藏敏感数据,以确保数据安全性。

    总的来说,自定义镜像可以帮助用户快速部署、定制化和保护应用程序或系统,提高工作效率和数据安全性。

    具体:docker search找不到的时候

    没有ipconfig这个查看IP命令,因为外部面试启动Centos7容器,cenos7现在只有204MB,相当于拓展功能没有了,

    :官方版本提供的镜像是不完整的相当于阉割版本

    解决办法:去容器里下载--------------------会特别慢

    yum  install -y ifconfig

    2.3、具体操作

    a、自定义centos

    创建文件   

    vi   mycentosDockerfile          

    mycentosDockerfile       名字

     编辑内容

    向 mycentosDockerfile编辑内容

    按i进入编辑模式

    按ESC   :wq退出并保存

    1. FROM centos:7
    2. MAINTAINER shasha"shasha@qq.com"
    3. RUN yum -y install vim
    4. RUN yum install net-tools.x86_64 -y
    5. CMD /bin/bash
    制作镜像

    后面注意有点必须加上去

    docker build 制作镜像                 

    -f       依靠哪个文件做镜像

    -f        mycentosDockerfile其实可以省略,但是创建时名字必须用Dockerfile,不能用自己创建的名字了

    shasha          做的镜像名字

    1.0版本

    docker build -f mycentosDockerfile -t shasha/centos:v1.0 .

    失败重启一遍再运行

    测试

    通过镜像运行一个容器进行测试  ,发现都可以执行ifconfig

    mc1是名字,换一个名字,再运行一遍就又有一个ip,相当于虚拟机里面的虚拟机

     

    docker run -it --name mc1 javaxl/centos:v1.0 /bin/bash

     

    b、自定义tomcat

     创建文件   

    vi   mytomcatDockerfile          

    mytomcatDockerfile          名字

    编辑内容 

     向 mytomcatDockerfile   编辑内容

    按i进入编辑模式

    按ESC   :wq退出并保存

    1. FROM centos:7
    2. MAINTAINER sha"sha@qq.com"
    3. ENV workerDir /home/sha/dockerfile/3
    4. WORKDIR $workerDir
    5. ADD jdk-8u151-linux-x64.tar.gz $workerDir
    6. COPY apache-tomcat-8.5.20.tar.gz $workerDir
    7. RUN tar -xvf apache-tomcat-8.5.20.tar.gz apache-tomcat-8.5.20
    8. ENV JAVA_HOME $workerDir/jdk1.8.0_151
    9. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    10. ENV TOMCAT_HOME $workerDir/apache-tomcat-8.5.20
    11. ENV PATH $JAVA_HOME/bin:$TOMCAT_HOME/bin:$TOMCAT_HOME/lib:$PATH
    12. EXPOSE 8080
    13. ENTRYPOINT ["/home/sha/dockerfile/3/apache-tomcat-8.5.20/bin/catalina.sh","run"]
    制作镜像

    ADD添加并解压

    默认进入--------------\,所有workerDir改路径

    OOPY   复制

    RUM执行解压包

    ENV配置环境变量

    EXPOSE         向外暴露端口

     

    docker build -f mytomcatDockerfile -t javaxl/tomcat8:v1.0 .

    构建镜像

    docker  build -f mytomcatDockerfile -t sha/tomcat8:v1.0
    测试

    自动分配ip,启动端口

    mt1-------名字

    docker run -di --name mt1 -P javaxl/tomcat8:v1.0
    

     

    如果就想用8080,大写-P改成小写的,名字也换了

    docker run -di --name mt2 -p   8080:8080 sha/tomcat8:v1.0

     

  • 相关阅读:
    Linux 实时补丁开启内核抢占了吗?
    机器学习 - 似然函数:概念、应用与代码实例
    李沐深度学习记录4:12.权重衰减/L2正则化
    后端开发面试题5(附答案)
    Vue---SCSS
    强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代
    物联网硬件对接,高位在前,低位在后,数据转换方法,需要的拿走!
    两个BI开发,3000多张报表?如何做的到?
    macOS端React的项目WebPack热更新(HMR)失效问题分析及解决,原因竟是Windows文件系统不区分大小写导致
    《逆向工程核心原理》学习笔记(四):API钩取
  • 原文地址:https://blog.csdn.net/m0_74276368/article/details/136349438