NextcloudをDockerで構築する手順


# はじめに
[NextCloud](https://nextcloud.com/)というツールを一度利用してみたいと思ったので、ローカルのDocker環境でNextCloudを起動してみようと思います。

# 利用方法
Dockerをインストール済みのPCで作業を進めます。

## 必要なファイルの作成

Dockerプロジェクト用のフォルダを作成します。
（今回は、`NextCloud-Docker`というフォルダを作成しました。）
作成したフォルダに下記の`compose.yml`と`.env` ファイルを作成します。
Windows Desctop Dockerの場合文字コードと改行コードに注意（UTF-8, LFの指定がおすすめ）

```docker:compose.ymlファイル

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${ENV_MYSQL_ROOT_PASSWORD}  # .envファイルに環境変数を設定
      - MYSQL_PASSWORD=${ENV_MYSQL_PASSWORD}  # .envファイルに環境変数を設定
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
```

```bash:.envファイル
# docker-compose内で利用する環境変数をここで設定します。
# 下記2つの環境変数に、適当な文字列を設定してください。

ENV_MYSQL_ROOT_PASSWORD=root
ENV_MYSQL_PASSWORD =root
```

## Docker Composeコマンドで環境を構築し起動する。

下記のコマンドを実行します。

```bash:実行コマンド
docker-compose up -d
```

ログの最後に`Done`と表示されたら、下記のコマンドでコンテナの稼働状況を確認します。

```bash:コンテナ確認コマンド
docker-compose ps
```

```bash:psコマンド実行結果
         Name                       Command               State          Ports        
--------------------------------------------------------------------------------------
NAME              IMAGE       COMMAND                   SERVICE   CREATED          STATUS          PORTS
nextcloud-app-1   nextcloud   "/entrypoint.sh apac…"   app       27 minutes ago   Up 27 minutes   0.0.0.0:8080->80/tcp
nextcloud-db-1    mariadb     "docker-entrypoint.s…"   db        27 minutes ago   Up 27 minutes   3306/tcp           
```

## 動作確認

nextcloudはローカルホストの8080でリッスンされているので、ブラウザから[http://localhost:8080](http://localhost:8080)にアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843683/6c5a94bf-3878-847d-4781-34647f49e3b5.png)

## 管理者アカウントの設定
上部の`管理者アカウントを作成してください`の部分にユーザー名とパスワードを入力します。

# 後片付け
下記のコマンドでコンテナを停止し削除します。

```bash:コンテナ全削除コマンド
docker-compose down --rmi all --volumes
```

`--rmi all --volumes`を指定する事で、
・コンテナ止める
・ネットワーク削除する
・ボリューム削除する
・イメージ削除する
を同時に行います。


```bash:全削除コマンド実行結果
Removing nextcloud-docker_app_1 ... done
Removing nextcloud-docker_db_1  ... done
Removing network nextcloud-docker_default
Removing volume nextcloud-docker_nextcloud
Removing volume nextcloud-docker_db
Removing image mariadb
Removing image nextcloud
```

## ボリュームの確認方法
下記コマンドでボリュームの一覧を確認する事ができる。
`docker volume ls`
実行結果内に「カレントフォルダ名_コンテナ名」のボリュームが存在する事が確認できます。
各ボリュームの詳細情報を確認するためには下記のコマンドを実行します。

`docker volume inspect nextcloud-docker_db`
`docker volume inspect nextcloud-docker_nextcloud`


## ボリュームのマウント状況の確認

下記コマンドでコンテナの情報をtextファイルに出力
`docker inspect nextcloud-docker_app_1 > inspect_nextcloud-docker_app_1.txt`
`docker inspect nextcloud-docker_db_1 > inspect_nextcloud-docker_db_1.txt`
mountと表示されている部分にボリュームの情報が表示されている。

## ネットワークの確認方法
下記のコマンドを実行してDocker上のネットワーク一覧を表示します。
`docker network list`
ネットワーク名を指定していない場合、「カレントフォルダ名_default」という名前のネットワークで設定されています。
詳細な情報を確認したい場合はinspectコマンドを利用します。

`docker network inspect nextcloud-docker_default`

## イメージの情報確認
`docker-compose images`で情報を表示します。
docker上の全てのイメージを確認するためには下記のコマンドを実行します。
`docker images`

# 参考ページ
[Dockerのnextcloudページ](https://hub.docker.com/_/nextcloud)