Docker Desktopをインストールして、動作確認する

# 目的　
* DockerをMacにインストールして、コンテナ仮想環境を構築する

# 環境
* Hardware
    * MacBook Pro (2018 13-inch Four Thunderbolt3 Ports)
    * 2.7GHz QuadCore Intel core i7
    * 8 GB 2133 MHz LPDDR3
* Software
    * macOS Monterey ver12.2

# Dockerのインストール
* Dockerインストールファイルを[公式サイト](https://www.docker.com/products/docker-desktop)からダウンロードする
    * プロセッサの種類によって実行ファイルが違うので、それぞれご自身の環境に合わせて選んでください。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/df3ce13b-48da-8088-741d-e495738941ac.png)
* インストールが完了したら、Dockerアイコンをダブルクリックして起動しましょう。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/eb0dcea6-fbe2-ef9f-eb0e-2ac386dbfbff.png)
* Dockerアイコンが表示されていればインストール成功です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/21fc017f-940c-920c-cf43-e9680a2a5c6a.png)

# 動作確認
* ターミナルを開いて動作を確認します。「Hello from Docker!」と表示されれば成功です。
* Docker Hubからhello-worldというDockerイメージのlatest版をダウンロード、コンテナ生成、コンテナ実行までの一連の処理を、runコマンドが行なっています。

```:ターミナルコマンド
$ docker run hello-world
```

```:結果
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```

# Docker公式イメージを実行してみる
Docker公式のDockerイメージdocker/whalesayを実行してクジラに喋らせてみる

```:ターミナルコマンド
$ docker run docker/whalesay cowsay I love you.
```

```:結果
 _____________ 
< I love you. >
 ------------- 
    \
     \
      \     
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/            
        \    \        __/             
          \____\______/   
```

# Dockerイメージを管理する
## Dockerイメージの一覧を表示する

```:ターミナルコマンド
$ docker images
```

```:結果
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
hello-world                    latest    feb5d9fea6a5   4 months ago    13.3kB
docker/whalesay                latest    6b362a9f73eb   6 years ago     247MB
```

## イメージにエイリアスをつける

```:ターミナルコマンド
$ docker tag hello-world first-hello
```
```:結果
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
first-hello                    latest    feb5d9fea6a5   4 months ago    13.3kB
hello-world                    latest    feb5d9fea6a5   4 months ago    13.3kB
docker/whalesay                latest    6b362a9f73eb   6 years ago     247MB
```
オリジナルと同じイメージIDが付与されているのが確認できます。

## イメージにタグをつける

```:ターミナルコマンド
$ docker tag hello-world first-hello:ver1.0
```
```:結果
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
first-hello                    latest    feb5d9fea6a5   4 months ago    13.3kB
first-hello                    ver1.0    feb5d9fea6a5   4 months ago    13.3kB
hello-world                    latest    feb5d9fea6a5   4 months ago    13.3kB
docker/whalesay                latest    6b362a9f73eb   6 years ago     247MB
```
TAGに指定したver1.0のイメージが作成されているのが確認できます。

## イメージを削除する

```:コマンド
$ docker rmi hello-world
```
```:結果
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
first-hello                    latest    feb5d9fea6a5   4 months ago    13.3kB
first-hello                    ver1.0    feb5d9fea6a5   4 months ago    13.3kB
docker/whalesay                latest    6b362a9f73eb   6 years ago     247MB
```
latestのイメージが削除されたのが確認できます。

# Dockerイメージをカスタマイズしてみる
Docker Hub上にあるイメージをもとに、オリジナルのDockerイメージを作成します。
Dockerイメージは、レイヤーの概念によってコマンドが積み重なった構成になっています。1つのコマンドが1つのレイヤーに相当します。

## 適当なフォルダを作成し、Dockerfileを作成する
例えば、fortunesコマンドをインストールして、クジラに英語格言を喋らせるようなイメージを作成してみる。

```:Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update
RUM apt-get install -y fortunes
CMD /usr/games/fortune | cowsay
```

# Dockerfileからイメージをビルドする
```:ターミナルコマンド
$ docker build -t whale-custom .
```

```:結果
[+] Building 29.8s (7/7) FINISHED                                                                   
 => [internal] load build definition from Dockerfile                                           0.0s
 => => transferring dockerfile: 156B                                                           0.0s
 => [internal] load .dockerignore                                                              0.0s
 => => transferring context: 2B                                                                0.0s
 => [internal] load metadata for docker.io/docker/whalesay:latest                              0.0s
 => CACHED [1/3] FROM docker.io/docker/whalesay:latest                                         0.0s
 => [2/3] RUN apt-get -y update                                                               19.1s
 => [3/3] RUN apt-get install -y fortunes                                                     10.4s
 => exporting to image                                                                         0.2s 
 => => exporting layers                                                                        0.1s 
 => => writing image sha256:ecb783bedb93b82581f65200f53ac23ae08ce7a3fe110778e7f54f89cba87832   0.0s 
 => => naming to docker.io/library/whale-custom                                                0.0s 
                                                                                                    
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
```

## ローカルに保存されているDockerイメージを確認する
```:ターミナルコマンド
$ docker images
```

```：結果
REPOSITORY                     TAG       IMAGE ID       CREATED          SIZE
whale-custom                   latest    6310654daf21   10 seconds ago   278MB
first-hello                    latest    feb5d9fea6a5   4 months ago     13.3kB
first-hello                    ver1.0    feb5d9fea6a5   4 months ago     13.3kB
hello-world                    ver1.0    feb5d9fea6a5   4 months ago     13.3kB
docker/whalesay                latest    6b362a9f73eb   6 years ago      247MB
```

## 作成したイメージからコンテナを実行する

```:ターミナルコマンド
$ docker run whale-custom
```

```:結果
 _________________________________________ 
/ Who wants to remember that              \
| escape-x-alt-control-left shift-b puts  |
| you into super-edit-debug-compile mode? |
|                                         |
| -- Discussion on the intuitiveness of   |
\ commands, especially Emacs              /
 ----------------------------------------- 
    \
     \
      \     
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/            
        \    \        __/             
          \____\______/   
```

クジラが英語格言を喋るイメージが作成できたことを確認できた。