初めてのDocker for Mac

# はじめに
[Docker公式サイト](https://docs.docker.com/docker-for-mac/)を参考に、手元のMacにDockerをインストールして、コンテナを立ててみたいと思います。

# Dockerのインストール
[Docker for Macのインストールページ](https://docs.docker.com/docker-for-mac/install/)から[Docker Hub](https://hub.docker.com/editions/community/docker-ce-desktop-mac)に飛んで、Docker.dmgをダウンロードしましょう。
Docker Hubを初めて利用する場合はアカウント作成が必要になります。

Docker.dmgを実行するとDockerのインストールが行われます。
インストール完了後にDockerをApplicationsにコピーしましょう。
<img width="719" alt="スクリーンショット 2019-07-21 13.32.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214279/78816929-bff9-6e46-87be-d6af2a8f7d13.png">
DockerアプリをダブルクリックしてDockerを起動すると右上ステータスバーにDockerのアイコンが表示されるようになります。起動の際にパスワードを求められるので、適宜入力しましょう。
![whale-in-menu-bar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214279/024703cf-abaf-1c07-8222-1e90b6f7d144.png)
これでDockerのインストールが完了しました。
確認のため、ターミナルからDockerのバージョンを表示するコマンドを入力しましょう。インストールしたバージョンが表示されていれば成功です。

```
$ docker --version
Docker version 18.09.2, build 6247962
```

# よく使うDockerコマンドまとめ
上から順に試していくことでDockerイメージ・コンテナのライフサイクルを体験できるようにしています。
オプション等の詳細は[公式ドキュメント](https://docs.docker.com/engine/reference/commandline/docker/)参照。
## Dockerイメージの取得（pull）

```
$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]
```
例えばCentOS7のDockerイメージを取得したい場合はこのように入力します。

```
$ docker pull centos:7
7: Pulling from library/centos
8ba884070f61: Pull complete 
Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Status: Downloaded newer image for centos:7
```

## 取得したDockerイメージの一覧表示（images）

```
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
```
特にオプション等を指定せずに入力するとこんな感じで表示されます。

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   9f38484d220f        4 months ago        202MB
```

## コンテナ生成・起動（run）

```
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
```
先ほど取得したCentOS7のコンテナを起動する場合はこのように入力します。

```
$ docker run -it --name "CentOS" centos:7
[root@16cf99ab3bf6 usr]# 
```
`-it`コマンドで、コンテナ内に入っての操作を可能にしています。
`--name`コマンドで、Dockerコンテナの名前を定義しています。

## コンテナ内に入って操作（attach）

`-it`コマンドを指定して起動したので、コンテナ起動後にCentOS内に入っています。
例えば`ls`コマンドを打つと、ルートディレクトリ下のファイルが表示されます。

```
[root@16cf99ab3bf6 /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
```
コンテナ内から抜ける（デタッチする）場合は、`[CONTROL]+pq`を入力しましょう。

再度コンテナ内に入って操作をする場合は`attach`コマンドを使います。

```
$ docker attach [OPTIONS] CONTAINER
```
CentOSコンテナ内に入る場合には以下のように入力します。

```
$ docker attach CentOS
[root@16cf99ab3bf6 usr]# 
```
再度`[CONTROL]+pq`を入力してデタッチしましょう。

## コンテナ一覧の確認（ps）

```
$ docker ps [OPTIONS]
```
オプションで何もつけないと起動中のコンテナしか表示されないため、大体は`-a`オプションを付けて、停止中のコンテナも併せて表示させます。コンテナが起動していることは`STATUS`列が`Up`になっていることで確認できます。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
16cf99ab3bf6        centos:7            "/bin/bash"         11 minutes ago      Up 11 minutes                           CentOS
```

## コンテナの停止（stop）

```
$ docker stop [OPTIONS] CONTAINER [CONTAINER...]
```
CentOSコンテナを停止させる場合はこのように入力しましょう。

```
$ docker stop CentOS
CentOS
```
コンテナがちゃんと停止したか`ps`コマンドで確かめてみましょう。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
16cf99ab3bf6        centos:7            "/bin/bash"         29 minutes ago      Exited (137) About a minute ago                       CentOS
```
`STATUS`列が`Exited`になっていることが確認できると思います。

## コンテナの再起動（start）

```
$ docker start [OPTIONS] CONTAINER [CONTAINER...]
```
先程停止させたCentOSコンテナをもう一度起動させましょう。

```
$ docker start CentOS
CentOS
```
`ps`コマンドで、ちゃんと起動しているか確認しましょう。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
16cf99ab3bf6        centos:7            "/bin/bash"         34 minutes ago      Up About a minute                                  CentOS
```
起動していることが確認できたら、再度`stop`コマンドで停止させましょう。

```
$ docker stop CentOS
CentOS
```

## コンテナの削除（rm）

```
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
```
CentOSコンテナを削除しましょう。

```
$ docker rm CentOS
CentOS
```
`ps`コマンドで確認しても何も表示されなくなるはずです。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
```

## Dockerイメージの削除（rmi）

```
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
```
CentOSコンテナ作成元のDockerイメージを削除しましょう。

```
$ docker rmi centos:7
Untagged: centos:7
Untagged: centos@sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Deleted: sha256:9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1
Deleted: sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854
```
`images`コマンドで、Dockerイメージが削除されていることが確認できると思います。

```
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
```