十七资料

本文主要介绍十七资料 方法和在新技术下所面对的“挑战”,方便大家深入理解十七资料 过程。本文也将分享十七资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。

十七 容器数据卷

容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像
需求:数据可以持久化和同步

使用数据卷

指定路径挂载

docker run -it -v 主机目录:容器内目录  # 测试 [root@hwh1 ~]# docker run -it -v /home/test:/home tomcat10.0.0:1.0 /bin/bash [root@hwh1 ~]# docker inspect 4446060c16ca     .......          "Mounts": [             {                 "Type": "bind",                 "Source": "/home/test",                 "Destination": "/home",                 "Mode": "",                 "RW": true,                 "Propagation": "rprivate"             }         ],       .......      [root@hwh1 home]# ls hwh  test                # 可以看到已经有文件夹了 # 测试容器内新增文件是否会添加到 主机 root@3e7209654d79:/home# touch test1.txt root@3e7209654d79:/home# ls test1.txt # 主机内同步添加 [root@hwh1 test]# pwd /home/test [root@hwh1 test]# ls test1.txt  # 测试当容器停止时,在主机上添加文件 重新启动后 会发现容器中也会增加 # 新增文件 [root@hwh1 test]# touch test2.txt  [root@hwh1 test]# ls test1.txt  test2.txt # 启动容器 [root@hwh1 ~]# docker start 3e7209654d79 3e7209654d79 [root@hwh1 ~]# docker ps CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 3e7209654d79        tomcat10.0.0:1.0    "/bin/bash"         4 hours ago         Up 3 seconds        8080/tcp            practical_archimedes # 进入容器查看 [root@hwh1 ~]# docker attach 3e7209654d79 root@3e7209654d79:/usr/local/tomcat# cd /home/ root@3e7209654d79:/home# ls test1.txt  test2.txt 

十七

测试:安装 MySQL

# 拉取镜像 [root@hwh1 ~]# docker pull mysql:5.7 [root@hwh1 ~]# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE mysql               5.7                 9cfcce23593a        2 weeks ago         448MB  # 运行容器 挂载数据,设置密码 [root@hwh1 ~]# docker run -d -p 3306:3306      -v /home/mysql/conf/:/etc/mysql/conf.d     -v /home/mysql/data/:/var/lib/mysql --name mysql1.0 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7  # -d 后台运行 # -p 暴露端口 # -v 卷挂载 # --name 设置名字 # -e 环境配置 # MYSQL_ROOT_PASSWORD=123456     mysql密码设置  [root@hwh1 ~]# docker ps  CONTAINER ID        IMAGE        COMMAND                  CREATED             STATUS          PORTS                               NAMES 3954a6cf0d8a        mysql:5.7    "docker-entrypoint.s…"   10 seconds ago      Up 8 seconds    33060/tcp, 0.0.0.0:3306->3306/tcp   mysql1.0 # 用 mysql 连接工具测试  # 查看 data [root@hwh1 data]# pwd /home/mysql/data [root@hwh1 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  

十七

具名和匿名挂载

# 查看所有卷  的情况 [root@hwh1 ~]# docker volume --help  Usage:	docker volume COMMAND Manage volumes Commands:   create      Create a volume                                          创建一个 volume   inspect     Display detailed information on one or more volumes      显示一个或多个卷的详细信息   ls          List volumes                                             列表查看 volume   prune       Remove all unused local volumes                          移除所有不用的 volumes   rm          Remove one or more volumes                               移除一个或者多个 volumes   # 匿名挂载 # -v 容器内路径 [root@hwh1 ~]# docker run -d --name nginx02 -P -v /etc/nginx nginx:1.19.0  1baf9eb9dc56967b790999942bdb346a8ade8eff8636f1776ef7996eb63ec2ae # 因为在挂载的时候,只写了容器内路径,而没有写 主机路径,这就是匿名挂载 [root@hwh1 ~]# docker volume ls DRIVER              VOLUME NAME local               0586a6dd5c3052d18e9baff561bc0c2fb310428b3791efa80d424646e0a6912a   # 具名挂载 # -v 卷名:容器内目录 [root@hwh1 ~]# docker run -d -P -v obviousNginx:/etc/nginx nginx:1.19.0  cb7f8b00b8b5ff926696e48f63fe7ce71db8de5332d41cbd3ce1d5efbd780bf8 [root@hwh1 ~]# docker volume ls DRIVER              VOLUME NAME local               obviousNginx [root@hwh1 ~]# docker volume inspect obviousNginx  [     {         "CreatedAt": "2020-06-24T20:50:01+08:00",         "Driver": "local",         "Labels": null,         "Mountpoint": "/var/lib/docker/volumes/obviousNginx/_data",         "Name": "obviousNginx",         "Options": null,         "Scope": "local"     } ] 

所有的 docker容器内的卷,没有指定目录的情况下都是在 “/var/lib/docker/volumes/卷名/_data”
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况都是在使用 具名挂载
十七

具体区别

-v 容器内路径           # 一 匿名挂载 -v 卷名:容器内目录      # 二 具名挂载 -v 主机目录:容器内目录   # 三 指定路径挂载 

扩展

# 设置权限 ro rw 改变读写权限 # -v 容器内路径:ro/rw  ro    readonly    # 只读,只能通过主机操作,容器内部无法操作 rw    readwrite   # 可读可写 

初识Dockerfile

Dockerfile就是用来构建 docker镜像的构建文件

# 简单构建测试 [root@hwh1 home]# mkdir dockerfile_test [root@hwh1 home]# cd dockerfile_test/ [root@hwh1 dockerfile_test]# pwd /home/dockerfile_test [root@hwh1 dockerfile_test]# vim dockerfile1 [root@hwh1 dockerfile_test]# cat dockerfile1  FROM centos  VOLUME ["volume01","volume02"]            # 挂载目录,匿名挂载  CMD echo"success"                        # 输出成功证明脚本运行成功 CMD /bin/bash                            # 默认 bash 控制台  # -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')      dockerfile 路径 # --tag list                    Name and optionally a tag in the 'name:tag' format         版本  [root@hwh1 dockerfile_test]# docker build -f dockerfile1 -t centos:1.0 .       # 注意这里有个点 .  Sending build context to Docker daemon  2.048kB Step 1/4 : FROM centos                                                    # 分布设置 latest: Pulling from library/centos 6910e5a164f7: Pull complete  Digest: sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b Status: Downloaded newer image for centos:latest  ---> 831691599b88 Step 2/4 : VOLUME ["volume01","volume02"]                              # 挂载目录  ---> Running in 982ae0c60dd5 Removing intermediate container 982ae0c60dd5  ---> 8c5dc67775f3 Step 3/4 : CMD echo"success"                                            ---> Running in 5c3d0ee1ba60 Removing intermediate container 5c3d0ee1ba60  ---> e391fd4d40e6 Step 4/4 : CMD /bin/bash    ---> Running in 2ec7cb4632dc Removing intermediate container 2ec7cb4632dc  ---> 4f7354d57ff3 Successfully built 4f7354d57ff3 Successfully tagged centos:1.0 [root@hwh1 dockerfile_test]# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE centos              1.0                 4f7354d57ff3        27 seconds ago      215MB 

十七

# 启动自己写的镜像测试 [root@hwh1 ~]# docker run -it 4f7354d57ff3 /bin/bash [root@1d2a9a575139 /]# ls -l total 0 lrwxrwxrwx.   1 root root   7 May 11  2019 bin -> usr/bin drwxr-xr-x.   5 root root 360 Jun 28 13:48 dev drwxr-xr-x.   1 root root  66 Jun 28 13:48 etc drwxr-xr-x.   2 root root   6 May 11  2019 home lrwxrwxrwx.   1 root root   7 May 11  2019 lib -> usr/lib lrwxrwxrwx.   1 root root   9 May 11  2019 lib64 -> usr/lib64 drwx------.   2 root root   6 Jun 11 02:35 lost+found drwxr-xr-x.   2 root root   6 May 11  2019 media drwxr-xr-x.   2 root root   6 May 11  2019 mnt drwxr-xr-x.   2 root root   6 May 11  2019 opt dr-xr-xr-x. 350 root root   0 Jun 28 13:48 proc dr-xr-x---.   2 root root 162 Jun 11 02:35 root drwxr-xr-x.  11 root root 163 Jun 11 02:35 run lrwxrwxrwx.   1 root root   8 May 11  2019 sbin -> usr/sbin drwxr-xr-x.   2 root root   6 May 11  2019 srv dr-xr-xr-x.  13 root root   0 Jun 28 08:21 sys drwxrwxrwt.   7 root root 145 Jun 11 02:35 tmp drwxr-xr-x.  12 root root 144 Jun 11 02:35 usr drwxr-xr-x.  20 root root 262 Jun 11 02:35 var drwxr-xr-x.   2 root root   6 Jun 28 13:48 volume02        drwxr-xr-x.   2 root root   6 Jun 28 13:48 volume01 

十七

# 只有容器内路径挂载,匿名挂载 # 外部查看 [root@hwh1 ~]# docker volume ls DRIVER              VOLUME NAME local               3147ec56df4ec370dadee55edc42c5f8a10d2e352b5eb0d74969b7ff64b06670 local               351272828a359dd2095d9f9caced693a1bf6272924637e3edfdead2945dd0782  # 查看容器的外部路径 [root@hwh1 ~]# docker inspect 1d2a9a575139     .......     "Mounts": [                 {                     "Type": "volume",                     "Name": "351272828a359dd2095d9f9caced693a1bf6272924637e3edfdead2945dd0782",                     "Source": "/var/lib/docker/volumes/351272828a359dd2095d9f9caced693a1bf6272924637e3edfdead2945dd0782/_data",                     "Destination": "volume01",                     "Driver": "local",                     "Mode": "",                     "RW": true,                     "Propagation": ""                 },                 {                     "Type": "volume",                     "Name": "3147ec56df4ec370dadee55edc42c5f8a10d2e352b5eb0d74969b7ff64b06670",                     "Source": "/var/lib/docker/volumes/3147ec56df4ec370dadee55edc42c5f8a10d2e352b5eb0d74969b7ff64b06670/_data",                     "Destination": "volum02",                     "Driver": "local",                     "Mode": "",                     "RW": true,                     "Propagation": ""                 }             ],     .......  

十七

数据卷容器

如果你有一些要在容器之间共享的持久性数据,或者希望在非持久容器中使用,那么最好创建一个命名的数据卷容器,然后从其挂载数据。
实现两个或者多个容器之间实现数据同步和共享

# 启动测试 用刚刚创建的镜像测试,启动三个容器 [root@hwh1 ~]# docker run -it --name docker01 centos:1.0  [root@6815ba3aebfa /]#          #  Ctrl + P +Q 不停止容器退出  # --volumes-from    指定容器载入卷 [root@hwh1 ~]# docker run -it --name docker02 --volumes-from docker01 centos:1.0   # 到 docker01 中的 volume01 或者 volume02 进行修改测试,查看是否同步到 docker02 [root@hwh1 ~]# docker exec -it cc6698c7e1ae /bin/bash [root@cc6698c7e1ae volume01]# pwd /volume01 [root@cc6698c7e1ae volume01]# mkdir test     # 新增测试 [root@cc6698c7e1ae volume01]# ls test  # 回到 docker02 查看,已经实现同步数据 [root@f71dd97f742f /]# cd volume01 [root@f71dd97f742f volume01]# ls test  # 创建第三个容器 测试同步 [root@hwh1 ~]# docker run -it --name docker03 --volumes-from docker01 centos:1.0  [root@06b74c606532 /]# cd volume01 [root@06b74c606532 volume01]# ls test # 同样可以同步数据   # 测试删除 docker01 ,查看文件是否还存在 [root@hwh1 ~]# docker ps  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 06b74c606532        centos:1.0          "/bin/sh -c /bin/bash"   3 minutes ago       Up 3 minutes                            docker03 f71dd97f742f        centos:1.0          "/bin/sh -c /bin/bash"   9 minutes ago       Up 9 minutes                            docker02 cc6698c7e1ae        centos:1.0          "/bin/sh -c /bin/bash"   30 minutes ago      Up 30 minutes                           docker01 [root@hwh1 ~]# docker rm -f cc6698c7e1ae cc6698c7e1ae # docker02 还存在原来的文件 [root@f71dd97f742f /]# cd volume01 [root@f71dd97f742f volume01]# ls test  # 原理:相当于双向复制进行备份的形式,进行同步数据 # 在这种情况下,如果移除其中已经挂载的容器,无论是移除哪个,都不会被移除。 # 要将卷从硬盘上删除,必须使用 docker rm -v 删除所有引用该卷的容器 

十七资料部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 十七资料

提供最优质的资源集合

立即查看 了解详情