NextCloudを利用する
セットアップが完了すると、NextCloudを使うことができます。既定では、図に示したように[推奨アプリをインストール]にチェックが付いているので、アプリのプラグインもいくつかインストールされます。
NextCloudはアプリを追加することで、さまざまな機能を追加できますが、メインとなるのは、OneDriveやGoogleドライブのようなファイル共有です。左上の「フォルダの形のアイコン」をクリックすると、ファイル共有できる画面が表示され、ここにファイルをドラッグし、皆で共有して利用できます。
ほかにも、「写真」「トーク」「メール」「連絡先」「カレンダー」などの便利機能がありますが、この連載はNextCloudの使い方を紹介するのが主目的ではないので、実際の使い方の解説は省きます。NextCloudの使い方については、公式ドキュメントなどを参照してください。
ストレージの永続化を検討する
もしインストールしたサーバーが、VPSやクラウドの仮想マシンなどグローバルIPアドレスを持つ環境なら、「http://サーバーのIPアドレス:8080」でアクセスすれば、インターネット上でも利用可能です。
「http://サーバーのIPアドレス/」のように「:8080」を付けずにアクセスできるようにするには、起動時に「-p 8080:80」ではなく、「-p 80:80」を指定します。
ただし実用的に使うのは、少し待ってください。この状態では、すべてのファイルがコンテナのなかにあります。そのためNextCloud上にファイルをアップロードしたり、連絡先を登録したりしても、それらはコンテナを破棄すれば消えてしまいます。消えないようにするには、こうしたデータが入っているディレクトリを、Dockerホストにマウントする必要があります。

では、このディレクトリは、どこでしょうか? どこをマウントすればよいのでしょうか。それを調べる手がかりは、2つあります。
1. ドキュメントを読む
1つは、ドキュメントを読むことです。ドキュメントの「Persistent data」という項目には、「/var/www/html」が永続的なデータを保存する場所だと書かれています。

2. docker inspectコマンドで調べる
もう1つは、Dockerイメージの情報を参照する方法です。「docker image inspect」というコマンドを使うと、イメージに設定された各種情報を参照できます。
$ docker image inspect nextcloud
たくさんの情報がJSON形式で出力されますが、このなかの「Config」という項目に、イメージの設定情報があります。
…略…
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PHPIZE_DEPS=autoconf \t\tdpkg-dev \t\tfile \t\tg++ \t\tgcc \t\tlibc-dev \t\tmake \t\tpkg-config \t\tre2c",
"PHP_INI_DIR=/usr/local/etc/php",
"APACHE_CONFDIR=/etc/apache2",
"APACHE_ENVVARS=/etc/apache2/envvars",
"PHP_EXTRA_BUILD_DEPS=apache2-dev",
"PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2 --disable-cgi",
"PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64",
"PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64",
"PHP_LDFLAGS=-Wl,-O1 -pie",
"GPG_KEYS=42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312",
"PHP_VERSION=7.4.13",
"PHP_URL=https://www.php.net/distributions/php-7.4.13.tar.xz",
"PHP_ASC_URL=https://www.php.net/distributions/php-7.4.13.tar.xz.asc",
"PHP_SHA256=aead303e3abac23106529560547baebbedba0bb2943b91d5aa08fff1f41680f4",
"NEXTCLOUD_VERSION=20.0.3"
],
"Cmd": [
"apache2-foreground"
],
"Image": "sha256:b911588f1d3321dc22ee87e5533b8884ddbb3b7d24de87c69150548249abbac8",
"Volumes": {
"/var/www/html": {}
},
"WorkingDir": "/var/www/html",
"Entrypoint": [
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": null,
"StopSignal": "SIGWINCH"
},
…略…
ここで注目したいのは、「Volumes」のところです。ここには、イメージの作成者が「このディレクトリはマウントしたほうがよい」と推奨する場所が記載されています。次のように、ドキュメントに書かれているのと同じく「/var/www/html」が指定されていることがわかります。
"Volumes": {
"/var/www/html": {}
},
蛇足ですが、-pで指定すべきポート番号についても、実はExposedPortsの項目で確認できます。
"ExposedPorts": {
"80/tcp": {}
},
ただし、VolumesやExposedPortsなどの設定値は、イメージの制作者が提示する値に過ぎず、実際の動きを示しているわけではありません。(公式のイメージではほぼありえませんが)イメージの制作者が設定し忘れたり間違った記載をしていれば、VolumesやExposedPortsに適切ではない値が設定されていることもありえます。
これらの値は、イメージ制作者が作成する「Dockerfile」というファイルに記載された値が、そのまま設定されています。
inspectの結果を見やすく表示する
inspectの結果は、JSONなので少し見づらいです。実は、「-f」(または「--format」)オプションを指定すると、特定のフォーマットに合致する箇所だけを参照できます。
フォーマットの書式は、Go言語のtext/templateパッケージの書式でわかりにくいのですが、例えばConfigの下のVolumesだけを参照したいのであれば、次のようにします。
$ docker image inspect --format="{{.Config.Volumes}}" nextcloud
map[/var/www/html:{}]
同様に、ExposedPortsも次のようにして取得できます。
$ docker image inspect --format="{{.Config.ExposedPorts}}" nextcloud
map[80/tcp:{}]
永続化すべき場所をマウントして起動し直す
いずれの方法であれ、/var/www/htmlをマウントすべきだということがわかりました。そこで、このディレクトリをマウントして起動し直しましょう。マウントし直すため、一度コンテナを停止しましょう。docker psコマンドで実行中のコンテナを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 70aac52e0162 nextcloud "/entrypoint.sh apac…" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp gracious_ishizaka
上記の例では、コンテナIDが「70aa…...」のようなので、このコンテナIDを指定して停止および破棄します(破棄するので、NextCloud上で設定した管理者ユーザー名や管理者パスワード、アップロードしたファイルや登録した連絡先など、すべての操作は失われます)。
$ docker stop 70aa $ docker rm 70aa
そして「-v」オプションを付けて、ボリュームを割り当てて起動します。連載第1回で説明したように、バインドマウントでもボリュームマウントでもよいですが、例えばバインドマウントを使って/home/dataに割り当てる場合は、次のようにして起動します。
$ docker run -d -p 8080:80 -v /home/data:/var/www/html nextcloud
これでNextCloudのデータ(および設定ファイルなど)は、Dockerホストの/home/dataに保存されるので、NextCloudコンテナを破棄しても失われなくなります。
