ログを確認する
連載第1回では、慣例としてログはdocker logsで確認できると説明しました。NextCloudのイメージも例外ではありません。まず、docker psでコンテナのIDを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aeefd14462b4 nextcloud "/entrypoint.sh apac…" 56 minutes ago Up 56 minutes 0.0.0.0:8080->80/tcp unruffled_haibt
このコンテナID(この例では「aeef…」)に対して、docker logsすれば、ログを確認できます。
$ docker logs Initializing nextcloud 20.0.3.2 ... Initializing finished New nextcloud instance Installing with SQLite database starting nextcloud installation Nextcloud was successfully installed AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Wed Dec 16 15:23:31.184043 2020] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.13 configured -- resuming normal operations …略…
環境を自動設定する
さて、このようにしてdocker runしたときは、「管理者のユーザー名」「管理者のパスワード」などが聞かれますが、起動時に、デフォルトの値を指定することもできます。これはドキュメントの「Auto configuration via environment variables」の項に書かれており、「SQLite」「MySQL/MariaDB」「PostreSQL」の別を設定し、さらに管理者のユーザー名と管理者のパスワードをNEXTCLOUD_ADMIN_USERとNEXTCLOUD_ADMIN_PASSWORDという環境変数で指定すれば実現できます。
環境変数を指定するには、docker runするときに「-eオプション」を使います。例えばデータベースにSQLiteを使い、そのデータベース名をnextclouddbとし、管理者ユーザー名をadmin、管理者パスワードをmypasswordにするなら、次のようにして起動します。
$ docker run -d -p 8080:80 -v /home/data:/var/www/html -e NEXTCLOUD_ADMIN_USER=admin -e NEXTCLOUD_ADMIN_PASSWORD=mypassword -e SQLITE_DATABASE=nextclouddb nextcloud
このように起動すると、初期設定をするため、しばらく時間がかかりますが(その間、ブラウザーからの接続確認できません。筆者の環境では数分かかりました)、その後ブラウザーでアクセスすると、次のように初期設定が完了し、ユーザー名やパスワードを入力できる状態から始まります。
起動完了したかどうかは、docker logsでログを確認することでわかります。ログに「Nextcloud was successfully installed」と表示されれば、初期化が完了し、アクセス可能な状態です。
外部データベースを利用する方法について
NextCloudイメージは、既定では、内蔵のSQLiteを利用します。これはパフォーマンスがよくないので、実用的に使うのであれば、MySQLもしくはPostgreSQLのデータベースを別途用意して、そこにデータを保存することが推奨されています。
MySQLもしくはPostgreSQLを使うには、NextCloudとは別に、MySQLやPostgreSQLを用意しておき、そこにアクセスするためのアカウントを初期設定時に設定します(もしくはdocker runする際に、-eオプションを使って、環境変数として指定することも可能です)。MySQLやPostgreSQLは、実機にインストールしたものを使うこともできますし、MySQLやPostgreSQLのコンテナを利用することもできます。ここでは、その方法は説明しませんが、次回以降の連載のなかで紹介する「WordPressを利用する方法」を参考にしてください(WordPressのコンテナは、別に用意したMySQLと接続する必要があります)。
まとめ
今回は、Dockerイメージを使って実用的なサーバーを構築する最初の例として、NextCloudを取り上げました。NextCloudは、docker runするだけなので簡単です。ポイントは次の通りです。
- ポート番号を-pで指定する
- 永続化すべき場所を-vで指定する
- ログはdocker logsで確認できる
- 動作オプションを-eで指定する
何を指定すべきかはドキュメントに記載されているので、それを参考にします。例えばNextCloudの場合、-eで指定できるオプションとして、ほかにもメールサーバーを指定する環境変数などがあります。
どのDockerイメージも、簡単なものであれば使い方はほぼ同じです。Docker Hubで興味あるイメージを見つけたら、ぜひいろいろと試してみてください。