Windows10でDocker（Docker Desktop）を使う

# 概要
WindowsでDockerを使おうとしたわけですが、最後に使ってから2年以上経過していたので、現在のDockerを把握した上で、「自己整理」しながら再開してみます。

https://qiita.com/TAKANEKOMACHI/items/a890fc4f3a132828f62b

# 前提条件
+ Windows10 64bit
+ Docker Desktop

# ここ数年のDockerの動向を整理する

https://www.docker.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/b4136144-d3b0-99dc-a2a8-c31de26170eb.png)

かなりページ構成も変わってて、以前通った定食屋に久しぶりに行ったらネクタイ着用してないといけなくなったみたいな感じです。

## Docker Desktopの有償化？
Windowsで使っていたDocker Desktopが、一定の条件を満たしてしまうと無償では使えなくなったようです。
個人で使っているので、依然セーフということですが、企業で使う場合は要注意。

https://www.itmedia.co.jp/news/articles/2201/31/news096.html

## 個人で使うならPersonal
サブスク状態でライセンスがあるので、個人で使うなら「Personal」でまずは十分かなと・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/a644454b-075f-681c-877b-918cde5d821a.png)

## Docker Desktopはどこ？
Dockerへのサインインを要求されますが、どのサブスクでもDocker Desktopは使えるので、サインインしなくてもDLできそうですが・・・

「Developers」-「Getting started」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/efb4a146-c7aa-e7b0-412a-192cf7124846.png)

ありましたね・・・
こっから、Docker DesktopのインストーラをDLします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/5c63074d-3536-1f47-7163-a1272f109cf4.png)

## Docker Desktopのインストール
DLした「Docker Desktop Installer.exe」を実行します。
意外にインストール時間は長いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/6bf3311e-0b9f-0854-7e17-00575ec89298.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c1956bed-05dd-c5ea-3773-ada0297184de.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/04062caa-c004-85e5-a97f-a346dae08add.png)
PCが再起動します。

## Docker Desktopを起動する
デスクトップにDocker Desktopのアイコンが追加されるので、起動してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/b5bc5d84-3841-5854-b36e-fba55943b789.png)
同意事項が表示されるので「I accept the terms」にチェックを入れて「Accept」ボタンをクリックします。
（ちなみに、この同意事項は、前述の「条件によって有償化されるぞ」の件です。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/d212adec-fe9b-b699-9a69-6d8031b3685d.png)
Docker Desktopが起動した・・・・・と思ったら、何かメッセージが表示されます。
私はIntel系ですが、AMD系は対応が違うようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/a6f40431-e3f4-f00d-36e5-ff211eb744d5.png)
表示されているURLへアクセスして、対応したら「Restart」ボタンを押してね。とのこと。

飛んだ先は、「Linuxカーネル更新プログラム パッケージをダウンロードする」ということなので、「x64マシン用WSL2 Linuxカーネル更新プログラム パッケージ」をクリックして、DLされる「wsl_update_x64.msi」を実行してインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c402ddd9-2cea-5497-ebbf-18a9aa0d2a43.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c201ef42-5144-0b65-bde0-3c8644b7c704.png)
「Next」ボタンを押して・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/bfc6607a-2e98-8b1f-3c4c-a9c8afe9ac9a.png)
終了です。
「Finish」ボタンを押して、先ほどの「Restart」を押します。

無事、Docker Desktopが起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/d381620f-7843-05c7-ac3c-1c63060a56d5.png)
「Start」を押すとチュートリアルに進みます。
不要な人は「Skip Tutorial」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/562fd52c-ec9b-670e-04e3-64effe71b536.png)

多少、見覚え感のある画面になりました。
（でも、数年前の状態とは全く違う・・・）

## Docker Desktopの起動を確認する
アプリ自体が起動している以外に、Dockerの起動を確認する場所があります

システムトレイにDockerがあるので、そこを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/e5402331-f0e0-bd8f-ceff-4090d45a494b.png)

アップデートがある（「!」が表示されてる）ようですね。
アイコンを右クリックすると、システムメニューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/69a8f3be-b1fc-1a3a-d120-22cea0de5c9c.png)

アプリ自体を終了させても、実はバックグラウンドで起動しているので「Dockerを完全に終了する」には、このシステムトレイから「Quit Docker Desktop」を実行しないと停止しません。

## Docker Desktopを更新する
「Updateがある」とアイコンで表示されていたので「Download update...」を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/79c3d2f1-23db-3c5b-bb83-d711f62bc0f8.png)

そうすると、上記のようにUpdateのメニューが表示されるので「Download update」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/e17712f9-818a-73d9-c622-64f3224760a1.png)

「Download update」ボタンが「Update and restart」に変わるので、再度ボタンを押します。

Docker Desktopが再起動されて更新が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/47dfc981-6ba6-524f-537f-2cc293a94e21.png)
右下のバージョン番号が「v4.9.1」になってますね。

## Docker Desktopから操作してみる
まずは、Homeメニューから「Ubuntu」の「Run」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/154f5c73-a785-c258-3527-593cf8c3a452.png)

そうすると、下記のようにDockerの「ubuntu:latest」が取得されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/694cef59-4c87-b402-38b9-a88d0d72f813.png)

しばらくするとDownloadが済んだよ。と表示され、Ubuntuが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/27d48801-f73d-622a-0e45-11c6862b2357.png)

起動すると、下記のような状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c550cae7-c9c3-9070-a34d-53234e2091cd.png)

そうしたら、Terminalを開きます。（下記のTerminalボタンをクリック）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/1aa1fb2d-2c2b-3e16-c64e-e0bf1b947252.png)

そうすると、TerminalにDockerで起動したUbuntuへログインした状態で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/5ded5a95-f0ce-e733-f88a-b30c606d00ce.png)

なんか操作してみると、動いていますね・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/8e8a6991-439b-6c74-bac8-7e3603514199.png)

DockerのUbuntuをDownloadして起動したことによって、Imageが作られるので、Docker DesktopのImagesメニューを見てみると、起動したubuntuが存在していることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/48d8ceac-d1c5-20ef-26a6-17fac3feb053.png)

続いて、Containersメニューに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/a37f9b2b-3e2d-1b4a-ceb3-bed061820708.png)

Containersメニューに戻ると、先ほどの画面と違う表示になりますが、下記をクリックすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/d81b878c-9f2a-6652-f65c-be985da80684.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/fd45eef3-697e-c3c3-7011-9bd79e0c304a.png)

下記をクリックすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/efeee0c2-efef-7950-3ebe-5494e4a1524c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/fdb03795-d50c-f66e-ec1f-58d58a24a10e.png)

となります。

それでは、起動しているUbuntuのコンテナを停止してみます。（停止ボタンを押します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/d72be093-f9ff-a383-f011-887862ec03ca.png)

停止すると、下記のような状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/56102900-5828-05a7-d7c4-c466c180b856.png)

もう一度、同じコンテナを起動したいなら「再生ボタン」、このコンテナを廃棄したいならゴミ箱ボタンを押すことになります。

では、コンテナを「廃棄」しましょう。（ゴミ箱ボタンをクリック）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/8a3b8513-5a93-8012-98df-f3cb0de23fb9.png)

永久になくなるぜ！と警告が出ますが、そのまま継続します。
Containersメニューには、コンテナがなくなったので初期状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c80348a6-76d7-f16b-2905-cc5e7a6eb8ed.png)

## ImageとContainerの話
前項でUbuntuのコンテナを消しました。
そこで、Docker Desktopの「Images」メニューを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/19c95cfe-72bf-4748-96ce-e781c2cbd755.png)

はい、なんかまだUbuntuが居ますね。
消したはずなのに・・・・と思った人は、ここでしっかり理解しないとダメですね。

イメージしやすいように、下記のようなことを考えてみます。

### 作ろうとするもの（あくまでイメージとして捉えてください）
1)まずは、Ubuntuから「Ubuntu 22.04（Latest）」をDLします
https://jp.ubuntu.com/
2)DLしたUbuntuをPCにインストールして、Apache2.4をインストールします
```bash:bash
$ sudo apt-get update 
$ sudo apt-get install -y apache2
```
3)自作したHTMLを入れます
4)動作確認します

### Dockerだと
まずは、DLするUbuntuが「Image」に該当します
続いて、Apacheをインストールするのと、自作したHTMLを入れる先が「Container」になります。
「Image」を使って、Apacheを入れたContainerや、Nginxを入れたContainerなど用途はいろいろです。

プログラマーの人だと、ImageがClass。ContainerがInstanceというところでしょうか。

### さらにもう一歩
ところで、前述の「Apacheをインストール」のをContainerを作ってから毎回やるのは面倒ですよね？
そういう時には、
１）Dockerfileという手があります
　→これは、Ubuntu:LatestをDLしてきて、Apacheを入れて、XXの設定をして・・・・というのをスクリプトで記述しておくと、ローカル上で管理されるImageはすでに「自作したHTMLを入れる」直前までを済ませることができます。
２）そもそもApacheのDockerイメージを取得する
　→これは、Dockerの仕組みを把握してないと「？」という感じですね。
　　理解の補助としては、DLしてくる時点でApacheまで入っているという状況だと思ってください。（実際はレイヤーなど理解が必要です）

# Dockerコマンドで柔軟に操作する
さて、Docker Desktopをインストールしている状況で、GUIでの操作ばかり記述していたので、GUIからしか操作できないのか？
というと、実はDockerはCUIでの操作の方が多いです。

早速、コマンドプロンプトかPowerShellを起動して「docker」と入力して実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/02ff6231-bbc7-ca59-1fae-c31dff39790c.png)

なんかデロデロと出ましたね。
Docker Desktopをインストールしたことで、コマンドも使えるようになっています。

ここまでで、「Ubuntu:latest」のImageを取得して、一旦Containerを作って起動したが「Container」は破棄した。となっている状況です。

そこで「docker images」と入力してみます。
```powershell:powershell
PS C:\> docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    27941809078c   10 days ago   77.8MB
PS C:\>
```

ローカルにあるImageのリストが表示されました。

それでは、これを起動（Containerを作る）してみましょう。
```powershell:powershell
PS C:\> docker run -it ubuntu
root@1872dc90c743:/#
```

DockerのGUI側を見てみると、Container側に表示されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/07ef17b5-93c6-0701-2acd-0cbbc8d0491b.png)

ちなみに、「docker run -it ubuntu」ですが、「run」は「起動」なので割愛。「ubuntu」は使用するImageです。
では「-it」は何か？
「-」はオプションです。「t」は「tty」つまり「Terminal」です。これがないとアカン。
そして「i」は「interactive」つまり「入力待ち」です。
このオプションによって、Containerを起動したら「root@1872dc90c743:/#」といったようにTerminalが表示されて入力できる状態になってます。

Containerを終了させてみましょう。
```powershell:powershell
root@1872dc90c743:/# exit
exit
PS C:\>
```

GUI側も停止した状態になってますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/f36d18db-4b6a-3839-dff7-81929e2e81fb.png)

それでは、最後にContainerを削除しましょう。
削除するにはContanerのID（もしくは名前）が分からないといけません。

まずはContainerの一覧を表示します。
```powershell:powershell
PS C:\> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS                       PORTS     NAMES
1872dc90c743   ubuntu    "bash"    13 minutes ago   Exited (127) 4 minutes ago             tender_poincare
```

続いて、ContainerIDを指定して削除します。
```powershell:powershell
PS C:\> docker rm 1872dc90c743
1872dc90c743
```

確認してみます。
```powershell:powershell
PS C:\> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\>
```

GUI側も、消えてますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222251/c46bbe59-c0ad-0544-cfc6-4a66c10cace4.png)


長くなったので、ここまで。
次回は、DockerfileやDocker-Composeを「自己整理」してみよう。

https://qiita.com/TAKANEKOMACHI/items/15eca19efebeefa87660