Dockerコマンドの基礎

# はじめに
Dockerについて今更ながら勉強をはじめました。
今回は基本的なコマンドについてまとめます。

# 実行環境
```
$ docker --version
Docker version 17.03.1-ce, build c6d412e
```

# 基本的なコマンド
## イメージを取得
```
$ docker pull centos:latest
latest: Pulling from library/centos
d5e46245fe40: Pull complete 
Digest:sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9
Status: Downloaded newer image for centos:latest
```

## PC上に保存されているイメージのリストを表示
```
$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
centos                        latest              3bee3060bfc8        12 days ago         193 MB
```

## PC上に保存されているイメージを削除
```
$ docker rmi 3bee3060bfc8
Untagged: centos:latest
Untagged: centos@sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9
Deleted: sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d
Deleted: sha256:dc1e2dcdc7b6ff86d785fa16cf97464d263d04346a191c57b5ca8a66b4155861
```

## イメージの起動
### 方法1
```
$ docker run -it centos:latest /bin/bash
[root@2fe147e75dc9 /]# uname -a
Linux 2fe147e75dc9 4.9.27-moby #1 SMP Thu May 11 04:01:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@2fe147e75dc9 /]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core)
```
> 【注意】exitしてしまうとコンテナが終了してしまう


### 方法2
```
$ docker run -itd centos:latest
4a82a4ec72bf1b28b2abe84da1b4995c23cf4aa74f32364bb3e81d75db14dd45
```

## 起動しているコンテナを確認する
```
$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5c304f72c6d6        centos:latest       "/bin/bash"         3 minutes ago       Up 3 minutes                            nifty_khorana
```

## 起動しているコンテナを停止させる
```
$ docker stop 5c304f72c6d6
5c304f72c6d6
```

## 起動しているコンテナを再起動させる
```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
048697b53b77        centos:latest       "/bin/bash"         19 seconds ago      Up 16 seconds                           lucid_franklin

$ docker restart 048697b53b77
048697b53b77

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
048697b53b77        centos:latest       "/bin/bash"         About a minute ago   Up 9 seconds                            lucid_franklin
```

## コンテナに接続する
### 方法1
```
$ docker attach 048697b53b77
```
>【注意】exitしてしまうとコンテナが終了してしまうため、コンテナを終了せずに抜けるには「Ctrl + p, Ctrl + q」を押す

### 方法2
```
$ docker exec -it 82f647b208ea /bin/bash
[root@82f647b208ea /]# exit
exit

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
82f647b208ea        centos:latest       "/bin/bash"         30 seconds ago      Up 28 seconds                           nifty_wright
``` 

# ハンズオン（体系的なコマンドの学習）
<ol><li>イメージを取得する

```
$ docker pull centos:latest
 ```
<li>イメージの存在を確認する

```
$ docker images
```

<li>イメージを起動する

```
$ docker run -itd centos:latest /bin/bash
```

<li>コンテナを確認する

```
$ docker ps
```
<li>コンテナに接続し、バージョンを確認する

```
$ docker exec -it [CONTAINER ID] /bin/bash
cat /etc/redhat-release
exit
```

<li>コンテナを確認する

```
$ docker ps
```

<li>コンテナにもう一度接続し、適当なファイルを作成する

```
$ docker attach [CONTAINER ID]
touch test
```

<li>もう一度コンテナを確認してみる

```
$ docker ps
```

>【問題】なぜコンテナが表示されないのか？
>>exitした際、コンテナが停止したため。
    
<li>停止したコンテナも含めて確認してみる

```
$ docker ps -a
```

<li>コンテナを起動する

```
$ docker start [CONTAINER ID]
```

<li>コンテナに接続する

```
$ docker exec -it [CONTAINER ID] /bin/bash
```

<li>先程作成したファイルが存在するか確認し、コンテナを停止する

```
ls test
exit
```

<li>イメージを削除する

```
$ docker rmi [IMAGE ID]
```
>【問題】なぜエラーが返ってくるのか？
>>コンテナを削除しないと根底となるイメージが削除できないため

<li>コンテナを削除する

```
$ docker ps -a

$ docker rm [CONTAINER ID]
```

<li>イメージを削除する

```
$ docker rmi [IMAGE ID]
```