docker 4 : 容器数据卷使用

该实验参考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

  

上一篇:Docker遇到Syslog的踩坑小记


下一篇:CentOS 安装MongoDB