zoukankan      html  css  js  c++  java
  • Docker

    在容器中管理数据主要有两种方式:数据卷( Data volumes)和数据卷容器( Data volume containers)。

    数据卷

    数据卷是一个可供一个或多个容器使用的特殊目录。数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

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

    数据卷用于持久化数据,生命周期独立于容器,在容器被删除后,数据卷不会被自动删除。
    但可以在删除最后一个挂载它的容器时,使用docker rm -v命令在删除容器的同时移除数据卷。

    创建数据卷到容器

    使用docker run命令的-v参数可以创建数据卷(挂载本地主机的目录或文件)到容器。多次使用-v参数可以挂载多个数据卷。
    本地目录和文件的路径必须是绝对路径,如果路径不存在 Docker将自动创建。
    挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。
    特别注意:虽然可以挂载主机文件到容器,但建议直接挂载主机文件的父目录到容器,防止容器内的编辑造成主机文件inode的改变。

    删除数据卷

    数据卷用于持久化数据,生命周期独立于容器,在容器被删除后,数据卷不会被自动删除。
    但可以在删除最后一个挂载它的容器时,使用docker rm -v命令在删除容器的同时移除数据卷。

    示例

    [root@CentOS7 ~]# docker run -itd --name test-data-volume -v /home:/home docker.io/ubuntu /bin/bash
    715cdbfe8b905a28301532cfbe91df39e28f7c1fa76575422618cfb39d6a3e46
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    715cdbfe8b90        docker.io/ubuntu    "/bin/bash"         13 seconds ago      Up 11 seconds                           test-data-volume
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker inspect test-data-volume
    [
        {
            "Id": "715cdbfe8b905a28301532cfbe91df39e28f7c1fa76575422618cfb39d6a3e46",
            "Created": "2017-04-28T15:37:33.785636016Z",
            "Path": "/bin/bash",
    ......
    ......
    ......
            "Mounts": [
                {
                    "Source": "/home",
                    "Destination": "/home",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
    ......
    ......
    ......
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker inspect --format "{{ .HostConfig.Binds }}" test-data-volume
    [/home:/home]
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker attach test-data-volume
    root@715cdbfe8b90:/# 
    root@715cdbfe8b90:/# cd /home
    root@715cdbfe8b90:/home# echo "This is a test!" >> test.log
    root@715cdbfe8b90:/home# ls -l test.log 
    -rw-r--r--. 1 root root 16 Apr 28 15:39 test.log
    root@715cdbfe8b90:/home# cat test.log 
    This is a test!
    root@715cdbfe8b90:/home# 
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# ls -l /home/test.log 
    -rw-r--r--. 1 root root 16 4月  28 23:39 /home/test.log
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# cat /home/test.log 
    This is a test!
    [root@CentOS7 ~]# 
    

    数据卷容器

    数据卷容器适合容器之间持续更新的数据共享。
    数据卷容器,实际上就是一个正常的容器,专门用来提供数据卷供其它容器挂载。
    使用方法比较直观,首先创建一个数据卷容器,然后在创建其他容器时,利用docker run命令的--volumes-from参数挂载数据卷容器的数据卷。
    --volumes-from参数支持从多个容器挂载不同的数据卷,也可以多级串联挂载包含数据卷的容器。

    示例:创建数据卷容器

    [root@CentOS7 ~]# docker run -d --name dbdata -v /dbdata docker.io/ubuntu
    8fe93640074a296f8185cc14a891ce35b59234168e151737e52ebfd505cf1413
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    8fe93640074a        docker.io/ubuntu    "/bin/bash"         4 seconds ago       Exited (0) 3 seconds ago                       dbdata
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker inspect dbdata
    [
        {
            "Id": "8fe93640074a296f8185cc14a891ce35b59234168e151737e52ebfd505cf1413",
            "Created": "2017-04-28T15:56:44.569538208Z",
            "Path": "/bin/bash",
    ......
    ......
    ......
            "Mounts": [
                {
                    "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",
                    "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",
                    "Destination": "/dbdata",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    ......
    ......
    ......
    [root@CentOS-7 ~]# 
    

    示例:挂载数据卷容器的数据卷

    [root@CentOS7 ~]# docker run -itd --volumes-from dbdata --name test-data-container-1 docker.io/ubuntu /bin/bash
    d2f50439edfd80424ac7a26b0d2bd9628877078f80d7d65f910c4c54172d881c
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker run -itd --volumes-from dbdata --name test-data-container-2 docker.io/ubuntu /bin/bash
    7a6ff0476aa2cb3ddc523290994e764648beb448bea8f7687c9d4db641d0a571
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES
    7a6ff0476aa2        docker.io/ubuntu    "/bin/bash"         17 seconds ago       Up 16 seconds                                   test-data-container-2
    d2f50439edfd        docker.io/ubuntu    "/bin/bash"         About a minute ago   Up About a minute                               test-data-container-1
    8fe93640074a        docker.io/ubuntu    "/bin/bash"         17 minutes ago       Exited (0) 17 minutes ago                       dbdata
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker inspect test-data-container-1
    [
        {
            "Id": "d2f50439edfd80424ac7a26b0d2bd9628877078f80d7d65f910c4c54172d881c",
            "Created": "2017-04-28T16:12:35.871642587Z",
            "Path": "/bin/bash",
    ......
    ......
            "Mounts": [
                {
                    "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",
                    "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",
                    "Destination": "/dbdata",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    ......
    ......
    [root@CentOS-7 ~]# 
    [root@CentOS7 ~]# docker inspect test-data-container-2
    [
        {
            "Id": "7a6ff0476aa2cb3ddc523290994e764648beb448bea8f7687c9d4db641d0a571",
            "Created": "2017-04-28T16:13:48.489300382Z",
            "Path": "/bin/bash",
    ......
    ......
            "Mounts": [
                {
                    "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",
                    "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",
                    "Destination": "/dbdata",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    ......
    ......
    [root@CentOS-7 ~]# 
    

    示例:数据共享

    [root@CentOS7 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    7a6ff0476aa2        docker.io/ubuntu    "/bin/bash"         3 minutes ago       Up 3 minutes                                    test-data-container-2
    d2f50439edfd        docker.io/ubuntu    "/bin/bash"         4 minutes ago       Up 4 minutes                                    test-data-container-1
    8fe93640074a        docker.io/ubuntu    "/bin/bash"         20 minutes ago      Exited (0) 20 minutes ago                       dbdata
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker attach test-data-container-1
    root@d2f50439edfd:/# 
    root@d2f50439edfd:/# cd /dbdata/
    root@d2f50439edfd:/dbdata# echo "test data container" > sample.log
    root@d2f50439edfd:/dbdata# ls -l sample.log 
    -rw-r--r--. 1 root root 20 Apr 28 16:18 sample.log
    root@d2f50439edfd:/dbdata# cat sample.log 
    test data container
    root@d2f50439edfd:/dbdata# md5sum sample.log 
    36e654d6c7720c5d99e5ee3792174c8c  sample.log
    root@d2f50439edfd:/dbdata# [root@CentOS7 ~]# 
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# 
    [root@CentOS7 ~]# docker attach test-data-container-2
    root@7a6ff0476aa2:/# 
    root@7a6ff0476aa2:/# cd /dbdata/
    root@7a6ff0476aa2:/dbdata# 
    root@7a6ff0476aa2:/dbdata# ls -l sample.log 
    -rw-r--r--. 1 root root 20 Apr 28 16:18 sample.log
    root@7a6ff0476aa2:/dbdata# cat sample.log 
    test data container
    root@7a6ff0476aa2:/dbdata# md5sum sample.log 
    36e654d6c7720c5d99e5ee3792174c8c  sample.log
    root@7a6ff0476aa2:/dbdata# [root@CentOS7 ~]# 
    [root@CentOS7 ~]# 
    
  • 相关阅读:
    C语言 · 猜算式
    C语言 · 2n皇后问题
    数据结构 · 二叉树遍历
    C语言 · 滑动解锁
    出现Exception in thread "main" java.lang.UnsupportedClassVersionError: org/broadinstitute/gatk/engine/CommandLineGATK : Unsupported major.minor version 52.0问题解决方案
    linux提取指定列字符并打印所有内容(awk)
    mapping生成sam文件时出现[mem_sam_pe] paired reads have different names错误
    出现“java.lang.AssertionError: SAM dictionaries are not the same”报错
    Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错
    Linux:echo中,>和>>的区别(保存结果和追加结果)
  • 原文地址:https://www.cnblogs.com/anliven/p/6784113.html
Copyright © 2011-2022 走看看