Docker Toolbox上のデータ永続化

3 min

Docker Toolbox上のDokcerコンテナのデータ永続化

Windows Server 20112上でDocker Toolboxを利用してdocker環境を構築しています。
こうして構築した環境は、VirtualBox上にVMでDocker Machineをたちあげて、その上に様々なDockerコンテナを構築するといった環境になっています。

この環境でGitLabの公式ページを参考にGitLabのdockerコンテナを立ち上げましたが、単純に立ち上げただけだと、VMを落としたときにデータがBoxの一時データとともに消え去ってしまったのでVMを落としてもデータが消えないようにデータの永続化をします!

試行錯誤してだめだったこと

WindowsとVMで共有しているストレージにデータを保存する

VirtualBoxではデータ永続化をするのに共有フォルダと呼ばれるものを利用するのがお作法のようでした。共有フォルダと呼ばれるものを利用すれば、VMからもWindowsからも触れる領域を設定することができます。

しかし、GitLabの公式ページに記載されている通り、エラーになってしまい、gitlabのデータストレージとしてマウントすることはできません。

This error occurs when using Docker Toolbox with VirtualBox on Windows or Mac, and making use of Docker volumes. The /c/Users volume is mounted as a VirtualBox Shared Folder, and does not support the all POSIX filesystem features. The directory ownership and permissions cannot be changed without remounting, and GitLab fails.
Our recommendation is to switch to using the native Docker install for your platform, instead of using Docker Toolbox.

VirtualBoxを使わないことを推奨される始末・・・

仮想HDDのマウント

次に試したのは仮想HDDマウント。VirtualBoxで仮想HDDを定義してVMにマウントしてそこにgitlabのデータを保存するというもの。

マウントしてデータの保存領域を定義してVMをリブートしたところ、マウントは解除されるし、データもそもそも保持されていないという大惨事でした。

永続化するためにやったこと

Dockerボリュームの作成

Dockerボリュームを作成してそこにgitlabのデータを保存することで永続化することに成功しました。

dockerボリュームを作成するコマンドは下記の通り。

docker volune create hogehoge

これでhogehogeというdockerボリュームを作成できます。
dockerコンテナを起動する際にgitlab-configgitlab-logsgitlab-dataというボリュームを作成してgitlabのデータが保存される以下のディレクトリに紐づけてあげます。

  • /etc/gitlab
  • /var/log/gitlab
  • /var/opt/gitlab

起動コマンド例をおいておきます。

docker run --detach \
--publish 10080:80 --publish 10022:22 \
--name gitlab \
--restart always \
-v gitlab-config:/etc/gitlab:Z \
-v gitlab-logs:/var/log/gitlab:Z \
-v gitlab-data:/var/opt/gitlab:Z \
gitlab/gitlab-ce:latest

オプションの説明をしておくと、v- hogehoge:/var/fugaでコンテナ上のディレクトリ/var/fugaをdokcer machine上のdocker volumehogehogeを(なければ作成しながら)マウントできる。なければ作成しながらが重要で、予めdocker volune create hogehogeでボリュームを作成する必要はないということです。

さいごに

docker volumeを作成しておけばVirtualBoxの再起動時にデータが消えることがなく永続化ができます!

他にもコンテナを永続化用のストレージとして使う方法もあるそうなので、気になる方はそちらを試してみても良いかもしれんません。