• Docker学习笔记3 -- 数据卷


    1. Docker 进入容器

    某些时候需要进入容器进行操作,使用 docker exec 命令

    docker exec -it 容器ID(Names)bash
    

    -i -t 参数 docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当 -i -t 参数一起使用时,则可以看到我们熟悉的Linux命令提示符。

    示例:

    进入容器,对默认的tomcat进行页面修改,然后再访问查看效果。

    • 注意默认容器内linux包是最小安装。只拥有最基本的命令,比如执行ll就会说找不到命令。
    • exit,不会导致容器的停止
    docker exec -it tomcat1 bash //进入容器名称叫tomcat1
    cd webapps  // 进入到webapps文件夹下
    mkdir ROOT // 新建目录
    echo 'hello docker'>>index.jsp //对容器内的index.jsp进行字符串追加
    

    2. 数据卷(容器数据管理)

    在之前的tomcat案例中,修改ROOT里边的html页面时,需要进入tomcat内部。并且因为没有编辑器,修改文件也很麻烦。

    这就是因为容器与数据(容器内文件)耦合带来的后果。

    image-20210731172440275

    要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。

    2.1.1. 什么是数据卷

    数据卷(volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。

    image-20210731173541846

    一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

    这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/local/tomcat/webapps/ROOT目录了

    为什么需要数据卷?

    • 不能在宿主机上很方便地访问容器中的文件。
    • 无法在多个容器之间共享数据。
    • 当容器删除时,容器中产生的数据将丢失。

    使用数据卷的最佳场景

    • 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据。
    • 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。
    • 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。
    • 当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。

    2.1.2. 数据卷操作命令

    数据卷操作的基本语法如下:

    docker volume [COMMAND]
    

    docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

    • create 创建一个volume
    • inspect 显示一个或多个volume的信息
    • ls 列出所有的volume
    • prune 删除未使用的volume
    • rm 删除一个或多个指定的volume

    2.1.3. 创建和查看数据卷

    需求:创建一个数据卷,并查看数据卷在宿主机的目录位置

    ① 创建数据卷

    docker volume create html
    

    ② 查看所有数据

    docker volume ls
    

    结果:

    image-20210731173746910
    ③ 查看数据卷详细信息卷

    docker volume inspect html
    

    结果:
    image-20210731173809877

    可以看到,我们创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data目录。
    小结

    数据卷的作用:

    • 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

    数据卷操作:

    • docker volume create:创建数据卷
    • docker volume ls:查看所有数据卷
    • docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
    • docker volume rm:删除指定数据卷
    • docker volume prune:删除所有未使用的数据卷

    2.1.4. 挂载数据卷

    我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

    docker run 
      --name mn 
      -v html:/root/html 
      -p 8080:8080
      tomcat 
    

    -v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中,这是采用数据卷方式,真正的目录在/var/lib/docker/volumes/html/_data

    还可以采用路径的方式:

    docker run -d -p 8080:8080 --name tomcat-8080 -v /opt/html:/usr/local/tomcat/webapps tomcat
    

    也就是说,在opt目录下创建数据卷html,然后指定路挂载。

    2.1.5. 案例-给tomcat挂载数据卷

    需求:创建一个tomcat容器,修改容器内的ROOT目录内的index.html内容

    分析:上个案例中,我们进入tomcat容器内部,已经知道tomcat的html目录所在位置/usr/local/tomcat/webapps/ROOT/index.html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

    提示:运行容器时使用 -v 参数挂载数据卷

    步骤:

    ① 创建容器并挂载数据卷到容器内的HTML目录

    docker run --name mn -v html:/usr/local/tomcat/webapps/ROOT -p 8080:8080 -d tomcat
    

    ② 进入html数据卷所在位置,并修改HTML内容

    # 查看html数据卷的位置
    docker volume inspect html
    # 进入该目录
    cd /var/lib/docker/volumes/html/_data
    # 修改文件
    vi index.html
    

    如果使用路径的方式挂载,就直接进入到/opt/html里边改内容就行了。

  • 相关阅读:
    Python36和Python27共存的方法
    普通用户启动redis
    NetHogs 实时检测网络流量 转
    Linux命令nohup+screen 转
    变更Linux下的Java版本 alternatives
    centos7下使用yum安装mysql
    CentOS6.6系统中安装配置Samba的教程
    Linux服务器中木马(肉鸡)手工清除方法(转)
    linux杀毒软件clamav安装与使用
    msys git 安装配置、git命令行使用
  • 原文地址:https://www.cnblogs.com/dcy521/p/15376637.html
Copyright © 2020-2023  润新知