Docker使用之容器数据卷(一)

什么是容器数据卷

  • docker理念:将应用和环境打包成一个镜像
  • 需求:
  • 数据持久化,容器之间有个数据共享的技术,MySQL数据可以存储在本地

实现:Docker容器中产生的数据,同步到本地
卷技术:目录的挂载,将我们容器内的目录,挂载到linux上面

使用数据券

方式一:直接使用命令来挂载:docker run -it -v 主机目录:容器内目录

[root@swl123 ~]# docker run -it -v /home/ceshi:/home centos /bin/bash

再打开一个会话,查看/home路径下的test文件,及元数据

[root@swl123 ~]# docker inspect ffeebfdeccc8

映射路径内是同步的
在这里插入图片描述

安装MySQL8

查看这篇博客

  • 验证数据持久化
[root@swl123 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
612eaf5c2777   mysql:8.0.26           "docker-entrypoint.s…"   36 minutes ago   Up 36 minutes   33060/tcp, 0.0.0.0:3388->3306/tcp, :::3388->3306/tcp                                   mysql8
c6a750b3039f   portainer/portainer    "/portainer"             5 hours ago      Up 5 hours      0.0.0.0:8088->9000/tcp, :::8088->9000/tcp                                              portainer
34fb3c029026   elasticsearch:7.13.3   "/bin/tini -- /usr/l…"   6 hours ago      Up 6 hours      0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch02
[root@swl123 ~]# docker stop 612eaf5c2777
612eaf5c2777
[root@swl123 ~]# docker rm 612eaf5c2777
612eaf5c2777
[root@swl123 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED       STATUS       PORTS                                                                                  NAMES
c6a750b3039f   portainer/portainer    "/portainer"             5 hours ago   Up 5 hours   0.0.0.0:8088->9000/tcp, :::8088->9000/tcp                                              portainer
34fb3c029026   elasticsearch:7.13.3   "/bin/tini -- /usr/l…"   6 hours ago   Up 6 hours   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch02
[root@swl123 ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                     PORTS                                                                                  NAMES
ffeebfdeccc8   centos                 "/bin/bash"              3 hours ago    Exited (0) 3 hours ago                                                                                            romantic_sammet
95cd72311ab6   tomcat                 "catalina.sh run"        4 hours ago    Exited (129) 3 hours ago                                                                                          recursing_morse
c6a750b3039f   portainer/portainer    "/portainer"             5 hours ago    Up 5 hours                 0.0.0.0:8088->9000/tcp, :::8088->9000/tcp                                              portainer
34fb3c029026   elasticsearch:7.13.3   "/bin/tini -- /usr/l…"   6 hours ago    Up 6 hours                 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch02
b34c7392ddac   nginx                  "/docker-entrypoint.…"   10 hours ago   Exited (0) 7 hours ago                                                                                            nginx01
9cd4a264f0ab   centos                 "/bin/bash"              10 hours ago   Exited (0) 10 hours ago                                                                                           angry_cannon
[root@swl123 ~]# docker run -p 3388:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d --name mysql8 mysql:8.0.26 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1 --skip_name_resolve=no
83aa3f359896f65edd7f8d789543a2ec5dd15349918e0e7003926889ebdfd9b4
[root@swl123 ~]# 
  • 删除容器后,重新启动,查看数据库,新建的表依然存在
  • 需求解决:
  • -数据持久化,容器之间有个数据共享的技术,MySQL数据可以存储在本地

匿名挂载和具名挂载:

  • 匿名挂载: VOLUME NAME是一串字符串
# 查看所有的volume(卷)的情况
[root@swl23 ~]# docker volume ls
DRIVER    VOLUME NAME
local     5cfa15c8980f16706a81d8d0e1c71b0a17bb31329176208ba59f2fefa650e918
local     a9b588b8a1129dde100d92e1afc5c24a53496408481b520286428edb92e80f5f
local     c5d170ea4cab0c667af19c39dbdd05e4effd7f6e48fbc55d553f84e7942fe6e9
local     c791d4ddf71e1d0457b832deb6d7d5a3d325089270daef5a43064aa3ccb51756
local     e1e83706f9c11e2291ec3e89b65256c5f71112bd29ffb96a482b6355f0519ae4
[root@swl23 ~]# 
  • 具名挂载实现:VOLUME NAME出现:juming-nginx
[root@swl123 ~]# docker run -P --name nginx02 -v juming-nginx:/etc/nginx -d nginx 
f84edc0a32dd233b4804d1910402d615cf64a44b08de66a5decd660847a2a5dd
[root@swl123 ~]# docker volume ls 
DRIVER    VOLUME NAME
local     5cfa15c8980f16706a81d8d0e1c71b0a17bb31329176208ba59f2fefa650e918
local     34f8af2083d5cb7b4b1414a0c00224a740ea4e9ee5538e6ca3e15ff8fb706724
local     a9b588b8a1129dde100d92e1afc5c24a53496408481b520286428edb92e80f5f
local     c5d170ea4cab0c667af19c39dbdd05e4effd7f6e48fbc55d553f84e7942fe6e9
local     c791d4ddf71e1d0457b832deb6d7d5a3d325089270daef5a43064aa3ccb51756
local     e1e83706f9c11e2291ec3e89b65256c5f71112bd29ffb96a482b6355f0519ae4
local     juming-nginx
[root@swl123 ~]# 
  • 查看卷位置:
[root@swl123 ~]# docker inspect juming-nginx
[
    {
        "CreatedAt": "2021-07-20T21:07:19+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
[root@swl123 ~]# 

容器内地址为:"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data"

  • 进入容器内路径:
[root@swl123 ~]# cd /var/lib/docker/volumes/juming-nginx/_data
[root@swl123 _data]# ll
total 24
drwxr-xr-x 2 root root   26 Jul 20 21:07 conf.d
-rw-r--r-- 1 root root 1007 Jul  6 22:59 fastcgi_params
-rw-r--r-- 1 root root 5290 Jul  6 22:59 mime.types
lrwxrwxrwx 1 root root   22 Jul  6 23:11 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root  648 Jul  6 23:11 nginx.conf
-rw-r--r-- 1 root root  636 Jul  6 22:59 scgi_params
-rw-r--r-- 1 root root  664 Jul  6 22:59 uwsgi_params
[root@swl123 _data]#
  • 熟悉的感觉有木有?

在这里插入图片描述
在这里插入图片描述

初识Dockerfile

  • dockerfile就是用来构建的镜像文件,一段命令脚本,通过这个脚本可以生成一个镜像
  • 镜像是一层一层的文件,命令就是每层的一个命令

方式二:直接使用命令来挂载:docker run -it -v 主机目录:容器内目录

[root@swl123 ~]# cd /home
[root@swl123 home]# mkdir docker-test-volume
[root@swl123 home]# cd docker-test-volume
[root@swl123 docker-test-volume]# pwd
/home/docker-test-volume
[root@swl123  docker-test-volume]# vim dockerfile01
[root@swl123  docker-test-volume]# cat dockerfile01
FROM centos

VOLUME ["/volume01","/volume02"]

CMD "-------end----------"
CMD /bin/bash
[root@swl123  docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile01 -t swl/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 300e315adb2f
Step 2/4 : VOLUME ["/volume01","/volume02"]
 ---> Running in 1938b98a8f3d
Removing intermediate container 1938b98a8f3d
 ---> 6d4f11342d14
Step 3/4 : CMD "-------end----------"
 ---> Running in 878d97ce5a6a
Removing intermediate container 878d97ce5a6a
 ---> 1f1618607808
Step 4/4 : CMD /bin/bash
 ---> Running in 68286e5b21dd
Removing intermediate container 68286e5b21dd
 ---> a281d33bf80c
Successfully built a281d33bf80c
Successfully tagged swl/centos:1.0
[root@swl123  docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
swl/centos            1.0       a281d33bf80c   14 seconds ago   209MB
<none>                <none>    6a68676d2222   18 minutes ago   209MB
tomcat02              1.0       95e5803af676   5 hours ago      672MB
mysql                 5.7       9f1d21c1025a   17 hours ago     448MB
mysql                 8.0.26    95db2e2bd882   17 hours ago     514MB
nginx                 latest    4cdc5dd7eaad   13 days ago      133MB
tomcat                9.0       36ef696ea43d   2 weeks ago      667MB
tomcat                latest    36ef696ea43d   2 weeks ago      667MB
elasticsearch         7.13.3    84840c8322fe   2 weeks ago      1.02GB
redis                 latest    08502081bff6   3 weeks ago      105MB
portainer/portainer   latest    580c0e4e98b0   4 months ago     79.1MB
hello-world           latest    d1165f221234   4 months ago     13.3kB
centos                latest    300e315adb2f   7 months ago     209MB
[root@swl123  docker-test-volume]# docker run -it a281d33bf80c /bin/bash
[root@04f4ed31930b /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02

在这里插入图片描述

[root@swl123  docker-test-volume]# vim dockerfile01						
FROM centos								//	FROM 基础镜像

VOLUME ["/volume01","/volume02"]		//	设置容器的挂载卷

CMD "-------end----------"				//  CMD窗口,打印,本来打印应该加上echo的
CMD /bin/bash							//  CMD窗口,启动器
  • 查看容器信息
[root@swl123  ~]# docker inspect 04f4ed31930b
"Mounts": [
            {
                "Type": "volume",
                "Name": "7397b7e1cad2bace69a002ef7f20330646d2e9854d2ece27f360b40b1f045ef0",
                "Source": "/var/lib/docker/volumes/7397b7e1cad2bace69a002ef7f20330646d2e9854d2ece27f360b40b1f045ef0/_data",
                "Destination": "/volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "45f434497f375c356b7f5a2eb3c0997cd544f80639876576f0fe474cf9f2776e",
                "Source": "/var/lib/docker/volumes/45f434497f375c356b7f5a2eb3c0997cd544f80639876576f0fe474cf9f2776e/_data",
                "Destination": "/volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

在这里插入图片描述

下一篇:数据卷容器

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手揽回忆怎么睡

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值