栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker 容器数据卷

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker 容器数据卷

数据卷特点
  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

总结: 就是容器的持久化,以及容器间的继承和数据共享!

使用数据卷 容器中直接使用命令来添加
# 挂载命令 
docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名 

# 测试
[root@iZwz98zi7ua638a1dxozhyZ ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@e039976cef28 /]#

# 查看数据卷是否挂载成功
[root@iZwz98zi7ua638a1dxozhyZ ~]# docker inspect e039976cef28
[
    {
        // ...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        // ...
    }
]

测试容器和宿主机之间数据共享:可以发现,在容器中,创建的会在宿主机中看到!

# 容器
[root@e039976cef28 /]# cd /home/
[root@e039976cef28 home]# ls
[root@e039976cef28 home]# touch test.log
[root@e039976cef28 home]# ls
test.log

# 宿主机
[root@iZwz98zi7ua638a1dxozhyZ /]# cd /home/ceshi/
[root@iZwz98zi7ua638a1dxozhyZ ceshi]# ls
test.log

测试容器停止退出后,主机修改数据是否会同步!

  1. 停止容器
  2. 在宿主机上修改文件,增加些内容
  3. 启动刚才停止的容器
  4. 然后查看对应的文件,发现数据依旧同步!ok
使用 docker 安装 mysql

思考:mysql 数据持久化的问题!

# 1、搜索镜像
[root@iZwz98zi7ua638a1dxozhyZ home]# docker search mysql
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11608     [OK]       
...

# 2、拉取镜像
[root@iZwz98zi7ua638a1dxozhyZ home]# docker pull mysql:5.7
5.7: Pulling from library/mysql
b380bbd43752: Already exists 
f23cbf2ecc5d: Already exists 
30cfc6c29c0a: Already exists 
b38609286cbe: Already exists 
8211d9e66cd6: Already exists 
2313f9eeca4a: Already exists 
7eb487d00da0: Already exists 
a71aacf913e7: Pull complete 
393153c555df: Pull complete 
06628e2290d7: Pull complete 
ff2ab8dac9ac: Pull complete 
Digest: sha256:2db8bfd2656b51ded5d938abcded8d32ec6181a9eae8dfc7ddf87a656ef97e97
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 3、启动容器 -e 环境变量!
# 注意: mysql的数据应该不丢失!先体验下 -v 挂载卷! 参考官方文档
[root@iZwz98zi7ua638a1dxozhyZ home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
fc7aa88270a249114df59b3199f22c448a09056bcb4ef4b4e3daf3e822b550ac

# 4、使用本地的sqlyog连接测试一下 3310

# 5、查看本地的 /home/mysql 目录
[root@iZwz98zi7ua638a1dxozhyZ home]# cd /home/mysql/data/
[root@iZwz98zi7ua638a1dxozhyZ data]# pwd
/home/mysql/data

# 可以看到我们刚刚建立的mysql数据库在本地存储着
[root@iZwz98zi7ua638a1dxozhyZ data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem

# 6、删除mysql容器
# 删除容器,然后发现远程连接失败!
[root@iZwz98zi7ua638a1dxozhyZ data]# docker rm -f mysql01
mysql01

# 可以看到我们刚刚建立的mysql数据库在本地存储着
[root@iZwz98zi7ua638a1dxozhyZ data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem
匿名和具名挂载
# 匿名挂载
# -v 容器内路径
[root@iZwz98zi7ua638a1dxozhyZ home]# docker run -d -P --name nginx01 -v /etc/nginx nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
b380bbd43752: Already exists 
fca7e12d1754: Pull complete 
745ab57616cb: Pull complete 
a4723e260b6f: Pull complete 
1c84ebdff681: Pull complete 
858292fd2e56: Pull complete 
Digest: sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36
Status: Downloaded newer image for nginx:latest
cc3b003bd095e3b3a9ac16aa196ce24090e96610f7a3a7ca1b66e9c3a16e8a18

# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume 维护
[root@iZwz98zi7ua638a1dxozhyZ home]# docker volume ls
DRIVER    VOLUME NAME
local     66ef490eef3840222f12448c8e9beb9e36f5f72185626b86cf390e2210794593

# 具名挂载
# -v 卷名:/容器内路径
[root@iZwz98zi7ua638a1dxozhyZ home]# docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
85bda31b7f8160e1731793223d27bb34cefda6c549eb8f5ed6be6a528a6f30f3

# 查看挂载的路径
[root@iZwz98zi7ua638a1dxozhyZ home]# docker volume inspect nginxconfig
[
    {
        "CreatedAt": "2021-10-29T22:28:02+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginxconfig/_data",
        "Name": "nginxconfig",
        "Options": null,
        "Scope": "local"
    }
]

# 怎么判断挂载的是卷名而不是本机目录名?
不是/开始就是卷名,是/开始就是目录名

# 改变文件的读写权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx
数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号