匿名映射

新建一个容器,并将它的/usr/local/data映射到宿主机

sudo docker run -di -v /usr/local/data --name 容器名 镜像名

上面的命令将会生成一个匿名卷,放在宿主机的/var/lib/docker/volumes目录

查看宿主机上映射到的目录

  1. sudo ls /var/lib/docker/volumes
  2. #映射的目录:
  3. 27cf85990bbb9fd819122faa2ada7d89f995fad88f7547db1b9f59388ad30047
  4. cd 27cf859.........
  5. cd _data
  6. #这个目录就是docker容器的/usr/local/data目录
  7. #

如果匿名卷越来越多,怎么找:

sudo docker inspect nginx01

结果:

  1. "Mounts": [
  2. {
  3. "Type": "volume",
  4. "Name": "27cf85990bbb9fd819122faa2ada7d89f995fad88f7547db1b9f59388ad30047",
  5. "Source": "/var/lib/docker/volumes/27cf85990bbb9fd819122faa2ada7d89f995fad88f7547db1b9f59388ad30047/_data",
  6. "Destination": "/usr/local/data",
  7. "Driver": "local",
  8. "Mode": "",
  9. "RW": true,
  10. "Propagation": ""
  11. }
  12. ],

具名目录挂载

sudo docker run -di -v docker_xx:/usr/local/data --name 容器名 镜像名

这种方式和匿名区别在于,这个是有名字进行挂载的。挂载的宿主机目录与匿名一样。注意:容器挂载的目录存在不是必须的。你可以随便写个目录,当容器创建时,他会自动创建这个目录.

指定目录挂载

sudo docker run -di --name 容器名 -p 宿主机端口:容器端口 -v 本机目录:容器目录 镜像名

数据卷只读或读写

容器只读,不可写方式

此种方式,宿主机可写可读,容器只能读不能写
sudo docker run -di --name 容器名 -P -v 本机目录:容器目录:ro 镜像名

容器可读写

sudo docker run -di --name 容器名 -P -v 本机目录:容器目录:rw 镜像名

说下-P(大写)和-p(小写)的区别,使用-P时,Docker会随机映射一个49000~49900的端口到容器开放的网络端口。使用docker ps可以看到

继承卷(上一个卷)

sudo docker run -di --volumes-from 容器名n:ro|rw --name 容器名 镜像名

构建一个新的容器

sudo docker run -di --name laravel-ubuntu ubuntu:20.04

构建镜像

sudo docker commit -a="作者" -m="提交信息" 现在容器名 镜像名:version