6.1数据卷
1.在容器内创建一个数据库
$ docker run -d -P --name web -v /webapp training/webapp python app.py # 注意:只里面的 -P 是大写
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
034cc7dedb4b2a207476b8c0810bb5599c8bc847f0af753b3ca4f3dcf522ae63
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
training/webapp latest 6fae60ef3446 2 years ago 349MB
2.挂载一个主机目录作为数据卷
使用 -v 标记可以指定挂载一个本地的已有的目录到容器中作为数据卷
$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
3aeda02e4fe6e3797325a91b74d53a0793152f5ad9ccae03ea92b40b53909f0b
上面的命令加载电脑本机的 /src/webapp 目录到容器的 /opt/webapp 目录。
3.挂载一个本地主机文件作为数据卷
(不推荐)
6.2数据卷容器
$ docker run -it -v /dbdata --name dbdata ubuntu
root@851a7c458c64:/# ls # 查看 /dbdata 目录
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
然后,可以和其他容器中使用 --volumes-from 来挂载 dbdata容器中的数据卷,例如创建 db1 和 db2 两个容器,并从 dbdata 容器挂载数据卷:
$ docker run -it --volumes-from dbdata --name db1 ubuntu
root@d6b56948c842:/# exit
$ docker run -it --volumes-from dbdata --name db2 ubuntu
root@0025f65e34dc:/# exit
查看已创建的容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0025f65e34dc ubuntu "/bin/bash" 19 seconds ago Exited (0) 13 seconds ago db2
d6b56948c842 ubuntu "/bin/bash" 41 seconds ago Exited (0) 25 seconds ago db1
851a7c458c64 ubuntu "/bin/bash" 12 minutes ago Exited (0) About a minute ago dbdata
三个容器任何一方在该目录下的写入,其他容器都可以看到。
$ docker run -it -v /dbdata --name dbdata ubuntu
root@851a7c458c64:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@851a7c458c64:/# cd /dbdata/
root@851a7c458c64:/dbdata# touch helloworld.py
root@851a7c458c64:/dbdata# ls
helloworld.py
在 db1 容器内查看它:
$ docker run -it --volumes-from dbdata --name db1 ubuntu
root@d6b56948c842:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@d6b56948c842:/# cd dbdata/
root@d6b56948c842:/dbdata# ls
helloworld.py
可以多次使用 --volume-from 参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。