第六章:Docker数据管理

2017-08-06  本文已影响0人  xrichardyan

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 参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。

6.3利用数据卷容器来迁移数据

1.备份

2.恢复

上一篇 下一篇

猜你喜欢

热点阅读