Docker学习——Docker数据卷

容器数据卷

概述

在Docker中,我们可以将应用和环境打包成一个镜像,如果我们将容器删除,那么容器中产生的数据也会消失,那么容器产生的数据该怎么进行持久化处理呢?再者,Docker中每个容器之间是相互隔离的,那么容器之间又怎么共享数据呢?这就需要容器数据卷技术了。

通过数据卷技术,我们能够实现容器的持久化和同步操作,容器之间也是能够实现数据共享。

使用数据卷

方式一

直接使用命令进行挂载 -v

docker run -it -v 主机目录:容器内目录 name bash
               -v 卷名:容器内目录
               -v 容器内目录

类似于主机目录和容器目录做了一个双向映射,其本质上都是指向同一个磁盘地址。所以挂载之后,不论容器是启动还是关闭,数据都会同步。

具名挂载和匿名挂载

#匿名挂载
#-v 只写了容器内的目录,没有写容器外的目录
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有卷状态
docker volume ls

DRIVER    VOLUME NAME
local     dbee2eea315528a120cc592c1773c42163162bf473933a6d4d43a83c81738020

#具名挂载
#-v 卷名:容器内目录
docker run -d -P --name nginx01 -v juming:/etc/nginx nginx

DRIVER    VOLUME NAME
local     dbee2eea315528a120cc592c1773c42163162bf473933a6d4d43a83c81738020
local     juming

所有Docker容器内的卷,在没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data下。

卷权限

#权限可分为
ro (readonly)
rw (readwrite)(默认)

#容器内不可修改,只能通过宿主机修改
docker run -d -P --name nginx01 -v /etc/nginx:ro nginx 

docker run -d -P --name nginx01 -v /etc/nginx:rw nginx 

方式二

使用Dockerfile进行挂载。

Dockerfile就是用来构建Docker镜像的构建文件,是一个命令脚本。

#dockerfile1
#每个命令都是镜像的一层
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "------end------"
CMD /bin/bash

#构建镜像
docker build -f dockerfile1 -t  test/ubuntu .

#运行镜像
docker run -it id /bin/bash

#查看挂载信息
docker inspect id

"Mounts": [
            {
                "Type": "volume",
                "Name": "55e52519c7822b2493fec1f0303121ace3577aad1eab934d6d8b818fff69b656",
                "Source": "/var/lib/docker/volumes/55e52519c7822b2493fec1f0303121ace3577aad1eab934d6d8b818fff69b656/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "23712dacbc2e58c800e9a22cde6578dd07eac38b7390363f23ee9560901ebb76",
                "Source": "/var/lib/docker/volumes/23712dacbc2e58c800e9a22cde6578dd07eac38b7390363f23ee9560901ebb76/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

数据卷容器

两个或多个容器实现数据共享,通过--volume-from命令。

#启动第一个镜像
docker run -it --name docker01 test/ubuntu

#启动第二个镜像
docker run -it --name docker02 --volumes-from docker01 ubuntu:15.10

#查看文件
ls

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var       volume02
boot  etc  lib   media  opt  root  sbin  sys  usr  volume01

#可以看到同样有volume01和volume02

只要有一个容器在使用数据,数据就不会丢失。数据卷容器可以实现容器之间配置信息的传递,它生命周期一直持续到没有容器使用为止。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇