Docker Desktop ナシではじめるWindowsコンテナアプリ開発②

コンテナ開発を行う際によく用いられる Docker Desktop。
この Docker Desktop が2022年2月から有料化( https://www.docker.com/pricing/ )されて随分と経つのだけど、改めて Docker Desktop に頼らずコンテナ開発環境を構築し、その環境を利用して Windows コンテナアプリを作っていきたいと思う。


# 環境構築編
[前回](https://qiita.com/trtrbohz/items/0167d93e7bbb063ce25d)は本シリーズ１回目ということで環境構築を行った。
今回は構築したコンテナ環境でコンテナをどのように管理できるのか？というところを見ていく。


# 検証環境
* ホストOS : macOS Monterey (MacBook Pro) v12.6


# 1.コンテナ管理で何をするか？
Docker Desktop代替の環境構築を目指しているので、Docker Desktopと同じく以下の機能を確認していく。
ところで、Docker DesktopってコンテナやイメージをGUI上で容易に管理できるすごく秀逸なツール。
[ここ](https://docs.docker.jp/desktop/index.html#:~:text=Docker%20Desktop%20%E3%81%AF%E3%80%81CLI%20%E3%82%92,%E6%A9%9F%E8%83%BD%EF%BC%89%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)に記載してあるDocker Desktopの概要から以下の管理をマシン上から直接できるようだ。
・コンテナ
・アプリケーション
・イメージ


# 2.どんなツールでコンテナ管理を行うか？
Docker Desktopにはコンテナを管理できるよくできたグラフィカルユーザーインターフェース(GUI)がある。いつもコンテナを管理する際にコマンドを打つこと、コマンドラインインターフェース(CUI)で確認することが億劫なので、どんなコンテナが起動し停止しているか調べる時、もしくはコンテナやボリューム削除の際にはよく利用していた。
Docker Desktopの代替ということで代わりのツールでも同じコンテナ管理をすることができるツールを熱望する。
その際に見つけたコンテナ管理ツールとして、Visual Studio Code(VSCode)を挙げる。

## 3.1. VSCode インストール
インストール方法については各サイトにて解説・説明があるので大まかな実施内容を記載するが詳細については割愛する。
   
### 3.1.1. 次の[サイト](https://code.visualstudio.com/download)にアクセスし、各自の環境に合わせてリンクをクリック
### 3.1.2. 画面が遷移後自動的にインストーラがダウンロードされる
### 3.1.3. ダウンロードされたZipファイルを解凍し、アプリケーションフォルダに配置

## 3.2. Add-on 追加
以下のように、「Docker」「DevContainers」をインストールしておく。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/5a750afc-49a9-e47a-e31b-142450387579.png)

## 3.3. コンテナ管理機能確認
まず以下のようにコマンドを使ってnginxコンテナを立ち上げWeb Serverを起動 (ここはCUIを使ってる)
```
docker run -it --name test-nginx -d -p 8080:80 -v myNginxVolume:/mnt  nginx:1.23.3-alpine
```

### 3.2.1. アプリケーション管理

#### コンテナattach

* VSCode上で左縦帯にあるアイコンを選択すると、今稼働しているコンテナが簡単に表示される!
接続したいコンテナを選択し、右クリック＆表示されるメニューから「Attach to Container」or「Attach in New Window」をクリック!
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/a005c799-6c8a-69f1-05d5-542ab19dd81c.png)


* 対象コンテナへ自動的にサーバ機能を簡単にインストールしてくれる!
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/9a92226c-32dd-478b-36dd-a87634b09829.png)


* 対象コンテナへ簡単に接続できる!
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/227ad7a8-4f37-601b-aa15-7966de72c612.png)


* 簡単にコンテナ内の既存ファイルを開ける！
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/3e19a889-a46f-16e3-02df-05b4e4f9df85.png)


* 簡単にファイル作成できる！
適当なフォルダを選択し、右クリック＆「新しいファイル...」をクリック
![13.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/81d5fef4-1a58-5916-f0f1-e273b9766d9c.png)

* 簡単にフォルダ作成できる！
適当なフォルダを選択し、右クリック＆「新しいフォルダ...」をクリック
![15.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/240e8906-fb25-0994-2412-3bcaac1419d4.png)

* 簡単にコンテナで作ったWebサイトにアクセスできる！
従来はコマンドラインでコンテナがホストに対してリダイレクトしてくれているポートを調べてアクセスしていたが、VSCodeでは以下のように一発！
VSCode上で左縦帯にあるクジラマークのアイコンをクリック、対象コンテナを選択＆「Open in Browser」をクリック！
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/06b4c877-49d8-31a9-c3fc-b553222de82f.png)


* 簡単にコンテナ情報表示
対象コンテナを選択した状態でしばし待つ、すると、、、
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/955b3aa0-df59-8168-f720-d05d8eb813af.png)
コンテナの色々な情報を簡単に見ることができた！

* その他機能
コンテナ管理については、上記以外に以下の簡単機能があるが機能内容に関しては容易に想定できると考え割愛する。
・簡単「ログ閲覧」
・簡単「コンテナinspect機能」
・簡単「コンテナ停止機能」
・簡単「コンテナ再開機能」
・簡単「コンテナ削除機能」
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/55bf7cdb-20e0-5cea-71e0-1f416c749e12.png)


### 3.2.2. イメージ管理
* 「IMAGES」のタブを開くと、簡単に現在のイメージ一覧を簡単に閲覧できる!
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/eff20382-90cb-a0a7-4b0d-1a0f576f1bc8.png)

* その他機能
イメージ管理については、上記以外に以下の簡単機能があるが、機能内容に関しては容易に想定できると考え割愛する。
・簡単イメージ 監査
・簡単イメージ Pull
・簡単イメージ Push
・簡単イメージ Tag 付け機能
・簡単イメージ Remove 機能
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/127c19c8-31fc-6dfb-0352-d18099b945d3.png)


### 3.2.3. レジストリ
* 「REGISTRIES」のタブを開くと現在接続しているレジストリ一覧を簡単に閲覧できる！
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/9f6492d4-3877-d41d-d0f2-639045a538f6.png)


### 3.2.4. ネットワーク
* 「NETWORKS」のタブを開くと現在接続しているレジストリ一覧を簡単に閲覧できる！
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/121d1d0a-7c68-7baf-7490-5938f2c80e6f.png)


### 3.2.5. volume 管理
以下のコマンドによりボリューム作成
```
$ docker volume create --name myNginxVolume
```
* 「VOLUMES」のタブを開くと現在コンテナプラットフォームにあるボリューム一覧を簡単に閲覧できる！
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/2cf0c2fb-b6a7-268e-a1df-19e5afbe7bde.png)

### 3.2.6. コンテキスト管理
* 「CONTEXTS」のタブを開くと現在コンテナプラットフォームにあるコンテキスト一覧を簡単に閲覧できる！
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/25ebf5e8-b3e4-a6d5-ae16-c79e566d4dff.png)


Docker Desktopの代替を検討していたのだけど違った良さが見えてきた。
今後、コンテナ開発をする際には Docker on Lima + VSCode で行こうと思う。
Docker Desktopで行えることと同様のことが全でできるとは思わないが、同じような機能もしくは近しい機能は提供できていると考える。