Docker 的持久化存储和数据共享

数据持久化:Data Volume

在这里插入图片描述

在这里插入图片描述

Volume 的类型
  • 受管理的data Valume,由docker后台自动创建
  • 绑定挂载的volume,具体挂载位置可以由用户指定

安装插件,将本地文件拷贝到vagrant host
vagrant plugin install vagrant-scp
在这里插入图片描述
mysql的Dockerfile 中

VOLUME /var/lib/mysql

mysql 启动之后会在本地创建一个volume,这个volume不会随着container的消失而消失。

	[vagrant@docker-hello ~]$ sudo docker run -d --name mysql_1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
4002fad9802ff2b67187bcfa13bec77a22efb8058a52a2794e300729f30ee2d1
[vagrant@docker-hello ~]$ sudo docker volume ls
DRIVER              VOLUME NAME
local               1a298ad38b398ac029c01d20cca18bcbe60801112554f755528179b4bf0a7c41
[vagrant@docker-hello ~]$ sudo docker volume inspect 694cdebefd057d83e52f95cef57917f23406159f70ced785c79aba0514c2d72b
[
    {
        "CreatedAt": "2019-10-17T09:48:29Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/694cdebefd057d83e52f95cef57917f23406159f70ced785c79aba0514c2d72b/_data",
        "Name": "694cdebefd057d83e52f95cef57917f23406159f70ced785c79aba0514c2d72b",
        "Options": null,
        "Scope": "local"
    }
]

mysql产生的数据会mount到/var/lib/docker/volumes/xxx/_data目录下
创建第二个mysql container

[vagrant@docker-hello ~]$ sudo docker run -d --name mysql_2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
50e1be6fcfbe2e5b8e267b214aa2deffadc118d43e7f55840751ef85a666d0f6
[vagrant@docker-hello ~]$
[vagrant@docker-hello ~]$ sudo docker volume ls
DRIVER              VOLUME NAME
local               1a298ad38b398ac029c01d20cca18bcbe60801112554f755528179b4bf0a7c41
local               149c2ea615209c1c5bd758b930e173a8674644cc2eb0c813be888525d4b81ca3
local               694cdebefd057d83e52f95cef57917f23406159f70ced785c79aba0514c2d72b

现在把container删除,对应volume是不会被删除的

[vagrant@docker-hello ~]$ sudo docker stop mysql_1 mysql_2
mysql_1
mysql_2
[vagrant@docker-hello ~]$ sudo docker rm mysql_1 mysql_2
mysql_1
mysql_2
[vagrant@docker-hello ~]$ sudo docker volume ls
DRIVER              VOLUME NAME
local               1a298ad38b398ac029c01d20cca18bcbe60801112554f755528179b4bf0a7c41
local               149c2ea615209c1c5bd758b930e173a8674644cc2eb0c813be888525d4b81ca3
local               694cdebefd057d83e52f95cef57917f23406159f70ced785c79aba0514c2d72b

data volume的名字不是很友好。可以给volume起一个别名,在创建container的时候加上-v mysql:/var/lib/mysql

[vagrant@docker-hello ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[vagrant@docker-hello ~]$ sudo docker run -d -v mysql:/var/lib/mysql --name mysql_2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true
mysql
762323198d02a9daa4bfb14f84130dd0694b6f22e695ea45a454104104a95132
[vagrant@docker-hello ~]$ sudo docker volume ls
DRIVER              VOLUME NAME
local               mysql

进入mysql_2container中创建一个docker database

[vagrant@docker-hello ~]$ sudo docker exec -it mysql_2 /bin/bash
root@762323198d02:/# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> create database docker;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| docker             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

退出容器删除mysql_2 container。

[vagrant@docker-hello ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
762323198d02        mysql               "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        3306/tcp, 33060/tcp   mysql_2
[vagrant@docker-hello ~]$ sudo docker rm -f mysql_2
mysql_2
[vagrant@docker-hello ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

删除容器之后volume仍然存在

[vagrant@docker-hello ~]$ sudo docker volume  ls
DRIVER              VOLUME NAME
local               mysql

重新创建一个container来使用这个volume

[vagrant@docker-hello ~]$ sudo docker run -d -v mysql:/var/lib/mysql --name mysql_3 -e MYSQL_ALLOW_EMPTY_PASSWORD=true
mysql
6c19583dfd95d47e877d9c65bc52b6757b6e9d1fcb1cfb387a24d284312d95f0

进入容器能看到之前创建的docker数据表

[vagrant@docker-hello ~]$ sudo docker exec -it mysql_3
"docker exec" requires at least 2 arguments.
See 'docker exec --help'.

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container
[vagrant@docker-hello ~]$ mysql -u root
-bash: mysql: command not found
[vagrant@docker-hello ~]$ sudo docker exec -it mysql_3 /bin/bash
root@6c19583dfd95:/# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| docker             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |

在这里插入图片描述

数据持久化:Bind Mounting

build 一个docker image

[vagrant@docker-host docker-nginx]$ docker build -t ehuamay/my-nginx .

创建container

[vagrant@docker-host docker-nginx]$ docker run -d -p 80:80 --name web ehuamay/my-nginx
8a6e0a526838255a6761fa7975fc93b2f325c33cc2a9a3e1e4f8cc0db2cba6a7
[vagrant@docker-host docker-nginx]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
8a6e0a526838        ehuamay/my-nginx    "nginx -g 'daemon of…"   25 seconds ago      Up 24 seconds       0.0.0.0:80->80/tcp   web
[vagrant@docker-host docker-nginx]$ curl 127.0.0.1
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">

  <title>hello</title>

</head>

<body>
  <h1>Hello Docker! </h1>
</body>
</html>

删除容器重新创建

[vagrant@docker-host docker-nginx]$ docker rm -f web
web

新创建容器将本地目录映射到docker中的指定目录 -v $(pwd): docker目录

[vagrant@docker-host docker-nginx]$ docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web ehuamay/my-nginx
9e9758990997fbd60df782bf08e454fa7f21fa797351fef2b2da17b5bd3bd5ba

进入容器中 touch一个文件然后退出容器,发现本地也生成一个新的文件

[vagrant@docker-host docker-nginx]$ docker exec -it web /bin/bash
root@9e9758990997:/usr/share/nginx/html# ls
Dockerfile  index.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值