课程来自于: 老段工作室 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网络管理
写的挺好~
哈哈哈