Dockerでdigilibを動かしたい（画像差し替えまで）

#2021-01-20追記
[Docker Toolboxはサポート切れ](https://docs.docker.com/docker-for-windows/docker-toolbox/)、セットでインストールされたOracle VM VirtualBoxもバージョンが古すぎて[（追記時点では6.1.14が最新のところ、5.2だった）](https://www.oracle.com/jp/virtualization/technologies/vm/downloads/virtualbox-downloads.html)Windows Updateにあたってアンインストールを提案されてしまい、本記事で構築した環境は、ばっさり削除しました。
[Docker DesktopもWindows Homeにインストールできるようになったよう](https://docs.docker.com/docker-for-windows/install-windows-home/)なので、この記事で積み残していた事項については結局全く試せていなかったのですが、また改めて環境構築からやり直します。
この際、全く別のIIIFビューワ試してみようかな……。

#はじめに
2020年末のFlash Playerサポート切れに伴い、Flash Playerによる画像ビューワ各種の提供継続はあまりよろしくない状態になってしまう。
昨今の流れ的にはIIIF対応が望ましいので、機関リポジトリのファームがIIIF対応したときにデータ移行するのが理想ではあるのだけど、とりあえず手元環境でもIIIF環境構築を試してみよう、というのが発端。
ローカル環境とはいえサーバ触るのも何年ぶり、という状態だったのと、Tiled Tiffファイルが手元にないので

- Windows 10 Homeでさくっと試せそうな方法
- JPEGでも問題ないIIIF画像サーバ

を調べてみたところ、Docker+digilibが一番手っ取り早そうという理由でこの組み合わせにしてみた次第。
基本的には、自分の備忘のために

- 参考記事
- 自分の環境でうまくいかなかったところ等

についてをまとめた記事です。
各種参考記事を公開してくださっている方々へ、多大な感謝を。

#Dockerのインストール
インストールにあたって、こちらの記事を参考にさせていただきました。
[Windows10 HomeでDocker環境を導入する](https://qiita.com/zeffy1014/items/dda78f4ab0449989dfe1)

###環境
Windows 10 Home 64bit
CPU: Intel(R) Celeron(R) N4100 CPU @ 1.10GHz
RAM: 8.00GB
※アドミン権限ユーザで実行

###参考にした記事と異なった点
VirtualBoxにデフォルトでチェックが入っていた。
が、その後の画面は参考記事と同様に、「Install VirtualBox with NDIS5 driver[default NDIS6]」もチェック無しで進んでみた。
インストール後、digilib起動時点では不具合なし。
→Kitematic(Alpha) が起動できないことに気づいた。もしかしてここのチェック入れてれば問題なかった系だったりするか……？

###メモ
スクショ撮り損ねたけど、VirtualBoxについてはハードウェアインストール可否のメッセージが出てきた。[インストール手順](https://docs.docker.com/toolbox/toolbox_install_windows/)にも

> Press Next to accept all the defaults and then Install.
> 
> Accept all the installer defaults. The installer takes a few minutes to install all the components:

とあるので、OKした。

#digilibのインストール・起動
[Docker使用時のインストール方法](https://robcast.github.io/digilib/digilib-docker.html)を参考に、

```
docker run --rm -p 8080:8080 robcast/digilib
```

を叩く……のだが、べらぼうに時間がかかり（というのは実は勘違いだったのだが）、実は初回は一旦ターミナルを強制終了してしまっていた。
ターミナルを再起動して再度叩くも、まだ終わっていない扱いになっていたので、プロセスのIDを確認して落とし、再度試す。
（→参考：[【Docker】port is already allocatedエラーを解決したい](https://teratail.com/questions/212664)）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41735/30a858a9-17a3-cfb7-b7a4-83ac61767ea4.png)
こっから動かなくなり、うーん、と思いつつブラウザで
https://localhost:8080/digilib/digilib.html
を開くも、


> このサイトにアクセスできません
> 
> localhost で接続が拒否されました。
> 次をお試しください
> 
> 接続を確認する
> プロキシとファイアウォールを確認する
> ERR_CONNECTION_REFUSED

と表示されてしまう。
うーん、と思ってもう少し調べてみたところ、この記事にたどり着いて、「あ、そうか！」となる。考えてみれば仮想環境は初体験なんだった。
[Docker入門日誌-その2- Webサーバ立ち上げ編](https://techracho.bpsinc.jp/ebi/2017_05_24/40406)

> ここで思い出してほしいんですけど、Windows の場合は Docker を動かしているのは Windows ではなくDocker Machine で作った VirtualBox上のDockerホスト なのです。
> つまり、localhost じゃなくて Dockerホストにアクセスしに行かないといけないんですね。

と、いうわけで一旦立ち上げなおして、

```
docker-machine ls
```

でURLを再確認。ついでにポートも念のため確認。
![digilib-URL確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41735/3b6a1da6-1cdd-cff3-61d1-8403cf71527e.png)

参考記事と同じホストアドレスだったのはたまたまなのか、デフォルト設定なのか。
それはさておき、

```
https://localhost:8080/digilib/digilib.html
```

を、

```
https://192.168.99.100:8080/digilib/digilib.html
```

にすると、

> このサイトは安全に接続できません
> 
> 192.168.99.100から無効な応答が送信されました。

と表示されてしまうので、

```
http://192.168.99.100:8080/digilib/digilib.html
```

に書き換えたところ、無事に起動されました。あーよかった。
![digilib起動画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41735/276dd99b-787c-d668-bbe6-8052ce278153.png)

#digilibで手持ち画像を表示

###初回試行時（エラー続きで諦めた）
ここからは、こちらの記事を参考に……したかったのだけど、Dockerでやってしまったので、そのまま参考にすることもできず。
[IIIFのための画像サーバ導入記（JPEGのままで/Tomcat編）](https://digitalnagasaki.hatenablog.com/entry/2016/10/16/195109)


公式の説明（[To use your own images in the directory /your/image/path on your host system:](https://robcast.github.io/digilib/digilib-docker.html)）を試してみるも、エラーメッセージの連続。

ちょっとここで一旦中断。

```
http://192.168.99.100:8080/digilib/server/dlConfig.jsp
```

にアクセスして、

```
basedir-list	/usr/local/tomcat/webapps/digilib/sample-images/
```

を確認。もしかしてdigilib起動してる状態だと追加できないという話？　と思って一旦落として、ターミナル再起動したうえで

```
$ docker run --rm \
> -p 8080:8080 \
> --name digilib \
> -e BASEDIR_LIST="/var/lib/images" \
> -v /c/Users/Public/Pictures/da:/var/lib/images \
> robcast digilib
```

してみたのだけど、

```
Unable to find image 'robcast:latest' locally
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: pull access denied for robcast, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
```

と出てしまい、やはりうまくいかず。ぐええ。


###2回目試行時（初回から約2週間後, 成功）

前回諦めたとき、基本中の基本のエラーメッセージ検索をしていなかったな？　と思ったので、まずはそこから。

- [docker エラーまとめ](https://qiita.com/aki319809/items/feeb31d1eef3e428a8da)
- [解決！dockerでイメージをpullしたらdocker: Error response from daemon: pull access denied for repository does not exist or may require ‘docker login’](https://programing-school.work/docker-image-pull-error-login/)

を拝見してから改めて本家サイトを見返してみたところ、最終行が

```
> robcast/digilib
```

になっていて、一方、自分が書いていたのは「/」が欠けていた……。
ということに気づき、正しい綴りで書いた結果、エラーなしで無事に表示できるようになりました。やったー！　一晩寝かせるの大事！（白目

最終的なコード（次回の私のために）：

```
$ docker run --rm \
> -p 8080:8080 \
> --name digilib \
> -e BASEDIR_LIST="/var/lib/images" \
> -v /c/Users/Public/Pictures/da:/var/lib/images \
> robcast/digilib
```


画面はこんな感じで：
![Docker Toolbox→digilibインスコ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41735/6d0be03a-4256-99c6-c6cb-f036f051ecae.png)
画像の出典：[洛中洛外図屏風(模本) - 国立博物館所蔵品統合検索システム/ColBase (https://colbase.nich.go.jp/collection_items/tnm/A-2876)](https://colbase.nich.go.jp/collection_items/tnm/A-2876)


で、エラーメッセージには 'docker login' とあったけど、ただのスペルミスのせいだったということで解決してしまったので、いまのところDocker Hubのユーザアカウントは作っていない。
もう少し色々やってみて、あった方が便利そうだったら作るかな？


###メモ

画像3枚突っ込んであって、

- 001.jpg: 534KB
- 002.jpg: 611KB
- 003.jpg: 1.12 MB ※スクショはこれ

なのに、3枚目よりも2枚目の方が読み込みに時間がかかる感じするのがちょっと気になるっちゃ気になるけど、あまり気にしない。ことにする。


#次にやること
とりあえずで始めてしまったので、ローカル環境でプレゼンテーションAPI周りまで試すことができるのか、ということを実はきちんと調べないままに始めてしまっていたという……。
そもそものIIIFの仕組みもきちんと理解しきれていないところがあるので、

1. IIIFの仕組みの確認
2. ローカル環境で試せそうならプレゼンテーションAPI周りまで試す

かな……？

という感じで、終わります。