该实验参考bilibili狂神说视频:
将本地文件夹挂载到docker容器对应的文件夹下:
例如将宿主机/home/ceshi挂载到centos7容器内部/home,这样容器内/home里的文件跟宿主机/home/ceshi实现将同步。
命令参考:
docker run -it -v /home/ceshi:/home centos:centos7 /bin/bash
[root@localhost ~]# docker run -it -v /home/ceshi:/home centos:centos7 /bin/bash [root@b423e6a40290 /]# cd /home/ [root@b423e6a40290 home]# ll total 0 [root@b423e6a40290 home]# touch 1.txt [root@b423e6a40290 home]# ll total 0 -rw-r--r--. 1 root root 0 Apr 1 02:42 1.txt 然后回到宿主机,进入/home目录,可以看到下面已自动创建了一个名为ceshi的文件夹,进入之后可以看到我们创建的1.txt文件。 [root@localhost ~]# cd /home/ [root@localhost home]# [root@localhost home]# ll total 0 drwxr-xr-x. 2 root root 19 Mar 31 22:42 ceshi [root@localhost home]# cd ceshi/ [root@localhost ceshi]# ll total 0 -rw-r--r--. 1 root root 0 Mar 31 22:42 1.txt 然后我们在宿主机上创建一个2.txt的文件,回到容器,也能看到对应的2.txt已经同步到容器。 [root@localhost ceshi]# touch 2.txt [root@localhost ceshi]# ll total 0 -rw-r--r--. 1 root root 0 Mar 31 22:42 1.txt -rw-r--r--. 1 root root 0 Mar 31 22:43 2.txt [root@b423e6a40290 home]# ll total 0 -rw-r--r--. 1 root root 0 Apr 1 02:42 1.txt -rw-r--r--. 1 root root 0 Apr 1 02:43 2.txt
在容器详细信息可以看到:
[root@localhost ceshi]# docker inspect b423e6a40290 "Mounts": [ { "Type": "bind", "Source": "/home/ceshi", "Destination": "/home", "Mode": "", "RW": true, "Propagation": "rprivate"
当我们停止容器之后,文件不会消失,并且重启之后,会重新加载文件夹下所有文件。
停止容器: [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 进入宿主机测试目录下创建文件3.txt: [root@localhost ~]# cd /home/ceshi/ [root@localhost ceshi]# touch 3.txt [root@localhost ceshi]# ll total 0 -rw-r--r--. 1 root root 0 Mar 31 22:42 1.txt -rw-r--r--. 1 root root 0 Mar 31 22:43 2.txt -rw-r--r--. 1 root root 0 Mar 31 23:02 3.txt 重启并进入容器: [root@localhost ceshi]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b423e6a40290 centos:centos7 "/bin/bash" 20 minutes ago Exited (0) About a minute ago angry_allen 3cf493d3feb0 portainer/portainer "/portainer" 16 hours ago Up 16 hours 0.0.0.0:8088->9000/tcp clever_kowalevski 4300e911311e lihaijun/centos7:v1 "/bin/bash" 18 hours ago Exited (137) 17 hours ago heuristic_chatelet 93b35bb0c041 centos:centos7 "/bin/bash" 18 hours ago Exited (0) 18 hours ago epic_darwin [root@localhost ceshi]# docker start b423e6a40290 b423e6a40290 [root@localhost ceshi]# docker attach b423e6a40290 查看文件是否已经同步: [root@b423e6a40290 /]# cd /home/ [root@b423e6a40290 home]# ll total 0 -rw-r--r--. 1 root root 0 Apr 1 02:42 1.txt -rw-r--r--. 1 root root 0 Apr 1 02:43 2.txt -rw-r--r--. 1 root root 0 Apr 1 03:02 3.txt
下面创建一个mysql试试:
[root@localhost ceshi]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 440a5df74aa3cfa186908cb9fe3a1e72a30bba91c53dcbba5128476e43fbec4d 参数说明: -d:后台运行 -p:端口映射,将内部3306端口映射为3310端口 -v:挂载容器卷,将宿主机的/home/mysql/data和/home/mysql/conf分别挂载到容器的/var/lib/mysql和/etc/mysql/conf.d -e:传递环境变量,这里传递root的密码为123456 --name:容器的名称 mysql:5.7:镜像的名称和版本 [root@localhost ceshi]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 440a5df74aa3 mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01 3cf493d3feb0 portainer/portainer "/portainer" 17 hours ago Up 16 hours 0.0.0.0:8088->9000/tcp clever_kowalevski 查看文件夹的文件: [root@localhost ~]# cd /home/mysql/ [root@localhost mysql]# ll total 4 drwxr-xr-x. 2 root root 6 Mar 31 23:20 conf drwxr-xr-x. 5 systemd-coredump root 4096 Mar 31 23:20 data [root@localhost mysql]# cd data/ [root@localhost data]# ll total 188484 -rw-r-----. 1 systemd-coredump input 56 Mar 31 23:20 auto.cnf -rw-------. 1 systemd-coredump input 1676 Mar 31 23:20 ca-key.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 ca.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 client-cert.pem -rw-------. 1 systemd-coredump input 1680 Mar 31 23:20 client-key.pem -rw-r-----. 1 systemd-coredump input 1359 Mar 31 23:20 ib_buffer_pool -rw-r-----. 1 systemd-coredump input 79691776 Mar 31 23:20 ibdata1 -rw-r-----. 1 systemd-coredump input 50331648 Mar 31 23:20 ib_logfile0 -rw-r-----. 1 systemd-coredump input 50331648 Mar 31 23:20 ib_logfile1 -rw-r-----. 1 systemd-coredump input 12582912 Apr 1 00:19 ibtmp1 drwxr-x---. 2 systemd-coredump input 4096 Mar 31 23:20 mysql drwxr-x---. 2 systemd-coredump input 8192 Mar 31 23:20 performance_schema -rw-------. 1 systemd-coredump input 1680 Mar 31 23:20 private_key.pem -rw-r--r--. 1 systemd-coredump input 452 Mar 31 23:20 public_key.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 server-cert.pem -rw-------. 1 systemd-coredump input 1676 Mar 31 23:20 server-key.pem drwxr-x---. 2 systemd-coredump input 8192 Mar 31 23:20 sys 通过mysql工具创建一个名为test的数据库的时候,会发现在宿主机的data目录下多出来一个test的文件夹。 [root@localhost data]# ll total 188484 -rw-r-----. 1 systemd-coredump input 56 Mar 31 23:20 auto.cnf -rw-------. 1 systemd-coredump input 1676 Mar 31 23:20 ca-key.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 ca.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 client-cert.pem -rw-------. 1 systemd-coredump input 1680 Mar 31 23:20 client-key.pem -rw-r-----. 1 systemd-coredump input 1359 Mar 31 23:20 ib_buffer_pool -rw-r-----. 1 systemd-coredump input 79691776 Mar 31 23:20 ibdata1 -rw-r-----. 1 systemd-coredump input 50331648 Mar 31 23:20 ib_logfile0 -rw-r-----. 1 systemd-coredump input 50331648 Mar 31 23:20 ib_logfile1 -rw-r-----. 1 systemd-coredump input 12582912 Apr 1 00:19 ibtmp1 drwxr-x---. 2 systemd-coredump input 4096 Mar 31 23:20 mysql drwxr-x---. 2 systemd-coredump input 8192 Mar 31 23:20 performance_schema -rw-------. 1 systemd-coredump input 1680 Mar 31 23:20 private_key.pem -rw-r--r--. 1 systemd-coredump input 452 Mar 31 23:20 public_key.pem -rw-r--r--. 1 systemd-coredump input 1112 Mar 31 23:20 server-cert.pem -rw-------. 1 systemd-coredump input 1676 Mar 31 23:20 server-key.pem drwxr-x---. 2 systemd-coredump input 8192 Mar 31 23:20 sys drwxr-x---. 2 systemd-coredump input 20 Apr 1 00:26 test