关于Docker数据持久化(Docker卷和绑定挂载)的讨论
概述
- Dockerボリュームをちゃんと知らなかったので簡単にまとめる。
Docker容器的特性和数据的持久化
作为一种理论,容器化环境可以轻松地创建和销毁容器。然而,这样一来就会引发一个问题,即容器被销毁时无法保留数据。
因此,根据我所了解的方法,有两种方式可以实现数据的持久化。
-
- ホストPCのディレクトリをマウント(バイマウント)
- Dockerボリュームを使用
对于前者来说,就像其名字所描述的那样,可以通过将主机PC的目录挂载来在主机PC上保存数据,而将执行部分保存在容器中。
对于后者来说,数据存储的位置仍然是在主机PC上,但不像前者那样将持久化数据放在实际显示为目录的位置上。看起来像是将数据保存在Docker管理的区域。
Docker卷的好处
听说使用Docker卷可以获得以下优点。
抽象化的概念
- Dockerが管理する領域で永続化することで、ホストPC側のディレクトリの権限やファイルシステムの種類などの面倒な部分を気にしなくて良くなる。異なるOSでも不安要素が減る。
简化
- Dockerが管理する領域なので、いい意味でも悪い意味でも開発者がいじれない場所にデータが永続化される。開発者が具体的なファイルパスを管理する必要がなくなる。
Docker卷的缺点
据说除了上述优点的反面之外,还存在以下这样的缺点。
如果希望在主机PC上表示目录结构
- Dockerボリュームはディレクトリ構造を持たないので不向き
如果直接引用持久化数据
- 例えばMinioコンテナを立てて画像をDockerボリュームで永続化してしまうと直接参照できない。
如果想要使用Docker卷
docker-composer.ymlを使って起動コンテナの管理をしている場合下記のように指定すればボDockerボリュームを使えるらしい。
docker-compose.yml
db-volume:/var/lib/postgresql/data:cached
逆にバイマウントを使いたい場合は下記のように指定する。(ホストPCのdb/dataというディレクトリをマウントする場合)
docker-compose.yml
./db/data:/var/lib/postgresql/data
已存在的Docker卷清单
コンテナ起動中に下記を実行することで既存のボリューム一覧を確認する事ができる。
docker volume list
删除已存在的Docker卷。
下記を実行すると指定されたボリュームを削除する事ができる。(永続化されているデータももちろん消えるので注意する。)
docker volume rm VOLUME NAME