form1.cn
Make a little progress every day

docker使用容器数卷volume

18th of June 2021 Linux Command 1939

方式一:指定路径挂载 -v,只能在run 命令下使用-v参数

docker run -it -d -p 3344:80 -v 主机目录:容器内目录 -v 主机目录:容器内目录 
 
# 测试1 nginx 在启动时挂载需要的目录,可以同时挂载多个,挂载后容器中的目录会被清空
docker run -d -p 3344:80 -v /home/docker:/usr/share/nginx/html --name nginx_v nginx 
 
# 测试2 mysql 
docker run -d -p 3306: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

# 启动之后通过 docker inspect 容器ID 查看是否挂载成功
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/mysql/conf",
                "Destination": "/etc/mysql/conf.d",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
# Mounts中有类似这样的数据,说明挂载成功



方式二:匿名挂载

-v 后面直接填写容器内部的文件目录 则该方式为匿名挂载。

会在docker 所在的宿主机对应的目录的下生成随机不重复的文件名,目录位置:

docker run -d -P —name nginx01 -v /etc/nginx nginx



方式三:具名挂载(常用)

-v 后面填写挂载目录名:容器内的目录 则该方式为具名挂载。

如果不指定目录名,则还是在/var/lib/docker/volumes/目录下生成挂载目录

docker run -d -p 3344:80 --name nginx02 -v juming_nginx:/etc/nginx nginx



查看具名或匿名已挂载的目录

docker volume ls


查看挂载卷

docker volume inspect mypashname



在挂载时使用 ro rw 权限的含义

docker run -d -p 3344:80 --name nginx02 -v juming_nginx:/etc/nginx:ro nginx  # 设置只读,只能通过容器外部修改,内容不能修改
docker run -d -p 3344:80 --name nginx02 -v juming_nginx:/etc/nginx:rw nginx  # 默认的权限 可读写