Dockerで動くLibertyでテストしながらEclipseで開発

# 目的

ローカルにいろいろなバージョンのLibertyを導入したくないので、LibertyはDockerで動かしながらEclipseで開発をしたい。その環境を作る方法を書きます。

# DockerでLibertyを起動

Dockerやgitのインストールは省略します。
PATHにdocker コマンドが含まれているかを確認します。EclipseからPATH指定なく使えるようにします。
```cmd
C:\Users\k_oi>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;

C:\Users\k_oi>dir "c:\Program Files\Docker\Docker\resources\bin\docker.exe
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は B2CF-84F6 です

 c:\Program Files\Docker\Docker\resources\bin のディレクトリ

2022/02/13  22:53        62,494,072 docker.exe
               1 個のファイル          62,494,072 バイト
               0 個のディレクトリ  117,163,433,984 バイトの空き領域
```

設定されていなかった場合はシステムのプロパティで環境変数(N)... でPATH変数に docker.exe を含むPATHを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/5f829f20-7873-10a0-0d68-c285eafe2004.png)


git repository をクローンして、docker build 、contianerを開始します。　

```shell
$ git clone https://github.com/pdprof/servlet.git
Cloning into 'servlet'...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 32 (delta 0), reused 29 (delta 0), pack-reused 0
Unpacking objects: 100% (32/32), 6.52 KiB | 11.00 KiB/s, done.

$ cd servlet/servlet-docker
$ ./setup-docker.sh
...

$ docker run -d --name servlet -p 9080-9444:9080-9444 servlet
```


# Eclipse 導入

以下からインストーラーを落とします。

https://www.eclipse.org/downloads/

インストーラーを起動したら　Eclipse IDE for Enterprise Java and Web Developers で導入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/648c2f4a-8e00-6b5f-d71f-9dbe018665a1.png)

導入が終わったら Eclipseを起動して、Help > Eclipse Marketplace を選択します。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/1fe70202-45cb-2396-d4f5-33ba94806fec.png)

IBM Liberty Developer Tools 21.0.0.9 （その時の最新を選びます）を Install します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/aec69860-9810-412b-1122-aec6a7cdebcd.png)

WebSphere Application Server Liberty Docker Tools を忘れないでチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/57c044f4-c0f6-1f46-af8e-e6867329c589.png)

導入が終わったら再起動になります。


# Eclipseにプロジェクトインポート

git clone したディレクトリにある Dynamic Web Project: hello をインポートします。Eclipseで File > Import のメニューを選んで、General > Projects from Folder or Archive で Next にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/2c466e0e-fa26-3f25-f0ba-3369274ec071.png)

Import source に hello のディレクトリを選択して Folder の hello にチェックを入れます。Finish を押せば Import できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/8f2e50ba-2e74-ac2b-e999-a53dd669870c.png)


# Eclipseでサーバー追加

Serversビューで No servers are available. Click this link to create a new server.. をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/8ac62c2d-d71e-e9fe-9987-e0cff3427105.png)


Define a New Server で IBM > Liberty Server を選び server name: を入力します。ここでは defaultServer にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/a9010811-4b0b-e4c6-3b93-965799b9637d.png)

Libertyを　Install from an archive or a repository を選んで新規導入します。導入済みの場合は　existing installation で Path: を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/d138e0da-bdae-ca04-e705-1e1f6deab5f0.png)

Download するイメージを選択して導入します。コンパイルで必要なだけで実際に動かすのは docker上であるためそこまで重要ではありません。feature多めのパッケージを選んでおきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/273404ee-df9b-9efb-88bf-ad90d8542e4d.png)

ライセンスの Accept をして Serverの追加になったら

- Server in a Docker contianaer をクリック
- Container name: servlet （起動したもの）
- User name: wsadmin
- Password: passw0rd

を指定して　verify をクリックします。証明書を受け入れるかの画面では受け入れをして、問題なければ　Finish で完了にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/f12aab4b-3c3c-1c99-b781-6e485cc4c155.png)

container の再作成をするかを聞かれるので再作成をしておきます。docker ps で確認できるコンテナーに別のものが作成されます。


# hello プロジェクトのテスト

hello プロジェクトの Servlets > pdprof.hello.Hello を右クリックして、Run As > Run on Server で　サーバーを選んで Finish にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/c6cf61e3-86e8-b5b3-f648-891861c6cfc1.png)

hello プロジェクトは　デフォルトポートではなく 9081 になっているので "コンテキスト・ルートが見つかりません" がでたら

http://localhost:9081/hello/hello

にアクセスして動作を確認します。

# 参考

[開発者ツールを使用した Docker コンテナー内のワークベンチ Liberty サーバーの作成](https://www.ibm.com/docs/ja/was-liberty/base?topic=sul-creating-workbench-liberty-server-in-docker-container-by-using-developer-tools)