LXDで動かしていたサーバ群をdocker環境に移し替えているのですが今回はdokuwikiを移植しました。
dokuwikiはディレクトリを抜いてコピればデータリストアは完了なのでお手軽さも相まって気に入ってます。
公式のイメージはなかったのですが自作もなんだしbitnamiのコンテナがあったのでこれを使います。
コンテナデプロイ
docker hubを参考にcomposeファイルを落としてきてカスタマイズします。
443番は落として82番で上げることにしました。
masashi@lab-docker1:~/dokuwiki$ cat docker-compose.yml version: '3.3' services: dokuwiki: image: docker.io/bitnami/dokuwiki:20230404 ports: - '82:8080' # - '443:8443' volumes: - 'dokuwiki_data:/bitnami/dokuwiki' volumes: dokuwiki_data: driver: local
swarmで動かそうとしたらエラーを吐いたのでバージョンを3に上げてます。
masashi@lab-docker1:~/dokuwiki$ docker stack deploy -c docker-compose.yml dokuwiki unsupported Compose file version: 2
masashi@lab-docker1:~/dokuwiki$ docker stack deploy -c docker-compose.yml dokuwiki
Creating network dokuwiki_default
Creating service dokuwiki_dokuwiki
立ち上がりました。
masashi@lab-docker1:~/dokuwiki$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS mkssjuq5nwyw dokuwiki_dokuwiki replicated 1/1 bitnami/dokuwiki:20230404 *:82->8080/tcp plup1b33qmjy firefly_app replicated 1/1 fireflyiii/core:latest *:80->8080/tcp u0009w7ryo30 firefly_db replicated 1/1 mariadb:latest luna6ms9v7bi pi-hole_pihole replicated 1/1 pihole/pihole:latest *:53->53/tcp, *:81->80/tcp, *:53->53/udp fyijaxnx2903 portainer_agent global 2/2 portainer/agent:2.18.2 ddrxmnjz9is4 portainer_portainer replicated 1/1 portainer/portainer-ce:2.18.2 *:8000->8000/tcp, *:9000->9000/tcp, *:9443->9443/tcp
masashi@lab-docker1:~/dokuwiki$ docker service ps dokuwiki_dokuwiki ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS o9eru7ihz52d dokuwiki_dokuwiki.1 bitnami/dokuwiki:20230404 lab-docker2 Running Running 2 minutes ago
docker系のプロセスもOKですね。
画面も見えてます。
データ移植
データコピーはswarmのmanagerノードからは出来ないようなのでコンテナが稼働しているサーバ直でコピーします。
scpでデータは転送済み。
markdown記法のプラグインも使っていたのでこれも入れます。
masashi@lab-docker2:~/dokuwiki$ ls
data.tar dokuwiki-plugin-markdowku-master.tar
展開してコピー。
masashi@lab-docker2:~/dokuwiki$ docker cp dokuwiki-plugin-markdowku-master e3e30bcac2a3:/bitnami/dokuwiki/lib/plugins/markdowku Successfully copied 65kB to e3e30bcac2a3:/bitnami/dokuwiki/lib/plugins/markdowku masashi@lab-docker2:~/dokuwiki$ docker cp data e3e30bcac2a3:/bitnami/dokuwiki/ Successfully copied 5.37MB to e3e30bcac2a3:/bitnami/dokuwiki/
コピーOKです。
アクセスすると…
あら、なんかエラーが出てます。 アクセスかwrite出来ないよって言ってる。
転送元のパーミッションを見ます。
masashi@lab-docker2:~/dokuwiki$ ls -l data total 100 drwxrwxr-x 2 masashi masashi 4096 Jan 27 05:53 attic drwxrwxr-x 18 masashi masashi 4096 Jan 5 14:36 cache drwxrwxr-x 12 masashi masashi 4096 Feb 6 2021 data ...
その他ユーザのwriteがないと動かないのか。
masashi@lab-docker2:~/dokuwiki$ sudo chmod -R 777 data
masashi@lab-docker2:~/dokuwiki$ ls -l data total 100 drwxrwxrwx 2 masashi masashi 4096 Jan 27 05:53 attic drwxrwxrwx 18 masashi masashi 4096 Jan 5 14:36 cache drwxrwxrwx 12 masashi masashi 4096 Feb 6 2021 data ...
再度データコピー。
プラグインのディレクトリ名変更してます。
(この間に切り分けで数回コンテナを作り直してます)
masashi@lab-docker2:~/dokuwiki$ docker cp markdowku 9f916b88135b:/bitnami/dokuwiki/lib/plugins/ Successfully copied 65kB to 9f916b88135b:/bitnami/dokuwiki/lib/plugins/ masashi@lab-docker2:~/dokuwiki$ docker cp data 9f916b88135b:/bitnami/dokuwiki/ Successfully copied 5.37MB to 9f916b88135b:/bitnami/dokuwiki/
アクセス。
OKですね。移植完了です。
markdownプラグインはリアルタイムでは反映されなくて一回編集を挟まないと反映しないようです。
レイアウトも直ってOK!
labは外からもアクセスできるので見放題、更新し放題です。
もっとページ増やしたいですね。
まとめ
今回の作業ですが、
labのdocker swarm環境は一応本番扱いにしているので別筐体のdockerスタンドアロン環境で検証してました。
その時はデータコピーした後一発で表示できたのでlabへのデプロイもすんなりいくと思ったらパーミッション問題でこけて少し時間食ってしまいました。
docker環境の違いなのかどうかが分からず切り分けに時間がかかりました。
またbitnamiのコンテナはrootユーザが無効になっているので中に入っての切り分けができずこちらも苦労しました。
(コンテナのセキュリティとしてはこの姿があるべきの様ですが)
ホスト側で何とかして切り分けるという経験ができたのは良かったです。
記事に書き起こしたらなんてことなく、見たらすぐわかるじゃんwとなるかもしれませんが作業中はなんで動かないんだ…となってました。
検証機からlabへデータファイルをscp(オプションなし)したときにパーミッションが変わってしまったっぽい。
まずは環境は同じにしとかないと不要な切り分けポイントが出来てしまいますね。(仕事ではちゃんとやってるのに)