CKA系列-5.数据卷
2022/12/14 17:03 投稿

课程来自于: 老段工作室 https://www.rhce.cc/
本文档采用的系统为:CentOS Linux release 7.4.1708 (Core)

1.在宿主机里查找文件

find / -name aaa.txt ---没找着

2.进入到web1这个容器里

nerdctl exec -it nginx-7b6af bash 之后创建aaa.txt
touch /aaa.txt

3.再次到宿主机上查询

 find / -name=aaa.txt 找着了
[root@vms71 ~]# nerdctl exec -it nginx-7b6af bash
root@7b6af4037f69:/# touch aaa.txt
root@7b6af4037f69:/# exit
exit
[root@vms71 ~]# find / -name aaa.txt
/run/containerd/io.containerd.runtime.v2.task/k8s.io/7b6af4037f6932ddcc906136ba968c57af159ed8e676136bdd510b18291560b8/rootfs/aaa.txt
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/18/fs/aaa.txt

在容器里新增的数据是保存在宿主机里的—–这个位置我们称之为 容器层

重启容器都没关系,但是一旦删除容器,则容器层会被一起删除掉

操作,删除容器

[root@vms71 ~]# nerdctl rm -f nginx-7b6af
nginx-7b6af
[root@vms71 ~]# find / -name aaa.txt 发现找不到了

nerdctl run -it --name=c1 --rm -v c_path2 镜像名 bash

这里-v后面就一个目录,则指定的是容器里的目录,宿主机随机生成。宿主机里的目录可以通过 nerdctl inspect 容器名 找到Mounts查看。然后发现在c_path2下创建的文件宿主机目录中可以看到。

例子:nerdctl run -it --name=c1 -rm -v /data nginx bash
写数据 touch /data/aaaa.txt

查看对应到宿主机的目录 nerdctl inspect c1

nerdctl run -it --rm -v p_path1:c_path2 镜像名 bash

这里冒号左边p_path1是宿主机目录,冒号右边c_path2是容器目录

如果宿主机里没有p_path1则会报错,需要提前创

例子1:nerdctl run -it --name=c1 --rm -v /xx:/data nginx bash
nerdctl run -it --name=c1 --rm -v p_path1:c_path2:rw 镜像名
nerdctl run -it --name=c1 --rm -v p_path1:c_path2:ro 镜像名
例子 nerdctl run -it --name=c1 --rm -v /xx:/data:ro nginx bash

在docker里使用卷的命令跟上述命令一致,只要把上述命令的nerdctl可以换成docker命令

但是在docker里,宿主机的目录如果没有创建的话,则系统会自动创建出来

实验:

实例1:

echo hello nginx > /xx/index.html
nerdctl run -d --name=web1 --restart=always -v /xx:/usr/share/nginx/html/ -p 8888:80 nginx

打开浏览器访问192.168.26.92:8888 看到的内容应该是hello nginx

实例2:

先拉取mysql镜像 crictl pull hub.c.163.com/library/mysql

mysql容器能用到的变量

MYSQL_ROOT_PASSWORD 指定root密码的,这个变量一定要写

mkdir /db
nerdctl run -d --name=db --restart=always -e MYSQL_ROOT_PASSWORD=haha001 -v /db:/var/lib/mysql hub.c.163.com/library/mysql:latest

查看容器db的IP

nerdctl inspect db | grep -i ipaddress ---这里是10.4.0.26

同一个机器安装mariadb

 yum install mariadb -y

连接到数据库上去(容器所在机器)

mysql -uroot -phaha001 -h10.4.0.26
MySQL [(none)]> create database aa;

Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> use aa;

Database changed

MySQL [aa]> create table aa(id int ,name varchar(10));

Query OK, 0 rows affected (0.00 sec)

MySQL [aa]> insert into aa values (1,'tom1');

Query OK, 1 row affected (0.00 sec)

MySQL [aa]> quit

Bye

这里写的数据都写入到容器的/var/lib/mysql — 宿主机的/db

删除db容器

nerdctl rm -f db

再次重建容器

nerdctl run -d --name=db --restart=always -e MYSQL_ROOT_PASSWORD=haha001 -v /db:/var/lib/mysql hub.c.163.com/library/mysql:latest

查看IP nerdctl inspect db | grep -i ipaddress

登录过去之后,aa库里的aa表里是否数据?

存在

下一篇:nerdctl网络管理