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-config
、gitlab-logs
、gitlab-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の再起動時にデータが消えることがなく永続化ができます!
他にもコンテナを永続化用のストレージとして使う方法もあるそうなので、気になる方はそちらを試してみても良いかもしれんません。