前回:VMのgitlabをコンテナへ(ついでにバージョンアップ 12.0.3→13.2.4)(ついでにdocker-compose)
これはそろそろDockerを使えるようになりたい筆者の試行錯誤の軌跡です。
DBとownCloudをVMからDockerコンテナへ移行
前回は、VMのgitlabをDockerコンテナに移行しました。
今回は、VMサーバー群のアプリケーションのうち、postgreSQLとownCloudをDockerコンテナに移行して、Resourceを閉じます。
コンテナの構成
docker-compose.ymlは以下のようにしました。
db:
image: postgres:9.6.19
environment:
POSTGRES_USER: psql
POSTGRES_PASSWORD: xxxx
volumes:
- /home/fclef/docker/server/db/data:/var/lib/postgresql/data
- /home/fclef/docker/server/db/init:/docker-entrypoint-initdb.d
- /home/fclef/docker/server/db/backup:/tmp/backup
ports:
- 5432:5432
owncloud:
image: owncloud:latest
restart: always
volumes:
- /home/fclef/docker/server/owncloud:/var/www/html
ports:
- 51080:80
PostgreSQLのイメージをlatest
に指定すると、owncloudの初期化でエラーが出ました。
PostgreSQLを9.6以前のバージョンにする必要があるようです。
参考:Install fails on pg 10.5
PostgreSQLのバックアップとリストア
参考:PostgreSQLのbackup, restore方法まとめ
バックアップ
バックアップしたいデータベース名を指定して実行します。
$ pg_dump <database> > <buckup file>
リストア
リストアもコマンドは簡単です。
psql <database> < <buckup file>
ただし、リストア前にデータベースを作成しておく必要があります。
そこで、バックアップファイルに対応するデータベースを作成してリストアするシェルスクリプトを作成しました。
files=`ls -1 /tmp/backup/*`
for file in ${files[*]}; do
database=`echo ${file} | sed -r 's@.*/(.*).backup.sql@\1@g'`
echo "init ${database}."
psql -c "create database ${database};"
psql ${database} < ${file}
done
このスクリプトを/docker-entrypoint-initdb.d
にマウントします。
このディレクトリ下にある.sql
ファイル及び.sh
ファイルはコンテナ起動時に実行してくれます。
ファイル名の先頭に数字を付けておくと、数字順に実行してくれます。
ownCloudのセットアップ
nginxのコンテナからowncloudのコンテナへのリバースプロキシを設定してアクセスすると、
初期セットアップの画面が開きます。
※スクショし忘れたので拾い画です。
ログインID,パスワード設定枠の下にある「ストレージとデータベース」というラベルをクリックするとデータベースの詳細設定ができるので、
PostgreSQLを選択して各種項目を入力します。
最下部のDBのホスト情報については、PostgreSQLコンテナのサービス名とポート番号を入力すればOKです。
上記ymlファイルなら、"db:5432"と入力します。
ownCloudのアップロード上限設定
初期設定では、1ファイルあたり数百MBまでしかアップロードできません。
ownCloudコンテナ側はすでに大きいファイルを受け入れる設定がされているので、リバースプロキシ側で制限を緩めてあげるだけです。
client_max_body_size 10G; # これを追記
ownCloudのバックアップとリストア
ownCloudのバックアップとリストアの方法は調べてもよくわかりませんでした。
少ししかアップロードしているファイルがなかったので、データディレクトリのファイルを直接コピーしてアップロードしました。
正攻法を知っている方がいらっしゃったら教えていただけると幸いです。
大きく詰まることなく、調べながらでも数時間で終えることができました。
VMセットアップに比べると劇的スピードです。。
Dockerすげぇと今日も思ったのでした。
次回:DockerでGhost