0%

Dockerでデータ分析環境 - Part5: RStudio ServerとData-onlyコンテナ

RStudio Serverをdisposableに本番環境へデプロイする準備として、ホームディレクトリをData-onlyコンテナへ分離します。

今回作成するData-onlyコンテナにはフットプリントの小さいbusyboxを使います。RStudio Server学習者へRStudioとデータの2コンテナをセットで提供します。

Data-onlyコンテナはアーカイブしてIDCFオブジェクトストレージにバックアップする予定です。

rstudioユーザーのUIDとGID

RStudio Serverコンテナに作成したユーザーのUIDとGIDを確認します。

/etc/passwd
rstudio:x:1000:1001::/home/rstudio:

ドットファイルのコピー

まずプロジェクトを作成します。

$ mkdir ~/docker_apps/rstudio_data
$ cd !$
$ mkdir dotfiles

Data-onlyにrstudioユーザーのホームディレクトリを作成するので、基本的なドットファイルをRstudio Serverコンテナからコピーします。

$ docker cp 6a373a56e271:/etc/skel/.bash_logout dotfiles
$ docker cp 6a373a56e271:/etc/skel/.bashrc dotfiles
$ docker cp 6a373a56e271:/etc/skel/.profile dotfiles

Data-onlyコンテナの作成

busyboxをbaseimageに使い、Data-onlyコンテナのDockerfileを作成します。
VOLUMEディレクトリはRStudio Server/home/rstudio/ディレクトリをマウントするので、
UIDとGIDを、上記で確認した1000:1001に合わせます。

~/docker_apps/rstudio_data/Dockerfile
FROM busybox
MAINTAINER Masato Shimizu <ma6ato@gmail.com>
RUN mkdir /tmp/dotfiles
ADD dotfiles /tmp/dotfiles
RUN mkdir /home/rstudio \
&& cp /tmp/dotfiles/.* /home/rstudio \
&& chown -R 1000:1001 /home/rstudio
VOLUME /home/rstudio
CMD /bin/sh

イメージをビルドします。

$ docker build -t masato/rstudio-data

Data-onlyコンテナを起動します。

$ docker run -i -t -d --name rstudio-data masato/rstudio-data

ローカルのdocker-registryにpush

あとで本番環境にデプロイするため、ローカルのdocker-registryにpushします。

$ curl localhost:5000
"docker-registry server (dev) (v0.7.3)"
$ docker tag masato/rstudio-data localhost:5000/rstudio-data
$ docker push localhost:5000/rstudio-data
...
Pushing tag for rev [710a7212b5b7] on {http://localhost:5000/v1/repositories/rstudio-data/tags/latest}

ボリュームをマウントしてRStudio Serverコンテナを起動

$ docker run --rm -i -t --volumes-from rstudio-data masato/rstudio-server /sbin/my_init bash

ダミーファイルの作成

RStudio Serverのrstudioユーザーのホームディレクトリにダミーファイルを作成します。

# sudo - rstudio
$ echo hello > hello.txt

Data-onlyコンテナのvfsを確認

Data-onlyコンテナのvfsのディレクトリの場所をinspectします。

$ docker inspect 11a84ee4e500 | grep "vfs/dir"
"/home/rstudio": "/var/lib/docker/vfs/dir/1fc752b41a7ef3d749152581e9482bedba9085817afe82da54accc9857668767"

Dockerホスト上から、Data-onlyコンテナに作成されたファイルを確認します。

$ sudo ls -altr /var/lib/docker/vfs/dir/1fc752b41a7ef3d749152581e9482bedba9085817afe82da54accc9857668767
合計 80
-rw-r--r-- 1 matedev admin 675 8月 7 22:56 .profile
-rw-r--r-- 1 matedev admin 3637 8月 7 22:56 .bashrc
-rw-r--r-- 1 matedev admin 220 8月 7 22:56 .bash_logout
drwx------ 455 root root 57344 8月 7 23:05 ..
-rw-rw-r-- 1 matedev admin 6 8月 7 23:06 hello.txt
drwxr-xr-x 2 matedev admin 4096 8月 7 23:06 .

Data-onlyコンテナにアタッチして確認

Data-onlyコンテナに直接アタッチして、作成したファイルを確認します。

$ docker start 11a84ee4e500
$ docker attach 11a84ee4e500
/ # cd /home/rstudio/
/home/rstudio # ls
R hello.txt

まとめ

Data-onlyボリュームのバックアップはServerFaultのDocker volume backup and restoreを参考にして試してみます。

docker-backupや、S3にバックアップするdocker-lloydといったライブラリが紹介されています。