Dockerコマンド チュートリアル

Dockerの基本的な操作方法を記載しておく。GUIツールを利用してみたが、やはりCLIのほうがうまく動作するためCLIでの操作を推奨する。Dockerを扱う上での必須理解項目は「イメージ」、「コンテナ」である。

1.基本的な操作
---

##イメージの検索
DockerHubからイメージをキーワード検索する。

```sh
  $ docker search centos
  NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
  centos                         The official build of CentOS.                   3500      [OK]       
  jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   77                   [OK]
```

##イメージの取得
イメージ名：タグ名を指定して取得する。タグ名を明記しない場合は「latest」が付与される。

```sh
  $ docker pull centos:latest
  latest: Pulling from library/centos
  d5e46245fe40: Pull complete 
  Digest:sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9
  Status: Downloaded newer image for centos:latest
```

##PC上に保存されているイメージを表示

```sh
  $ docker images
  REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
  centos                        latest              3bee3060bfc8        12 days ago         193 MB
```

## PC上に保存されているイメージを削除

```sh
  $ docker rmi 3bee3060bfc8
  Untagged: centos:latest
  Untagged: centos@sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9
  Deleted: sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d
  Deleted: sha256:dc1e2dcdc7b6ff86d785fa16cf97464d263d04346a191c57b5ca8a66b4155861
```

##イメージの起動
方法1はexitするとコンテナが終了してしまう。方法2はexitしてもコンテナが終了しない方法である。ただし、方法1の場合でも「Ctrl+p,Ctrl+q」によりコンテナから脱出かつコンテナは終了しない。

###方法1

```sh
  $ 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)
```

### 方法2

```sh
  $ docker run -itd centos:latest
  4a82a4ec72bf1b28b2abe84da1b4995c23cf4aa74f32364bb3e81d75db14dd45
```

##起動しているコンテナを確認する

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

##起動しているコンテナを停止させる

```sh
  $ docker stop 5c304f72c6d6
  5c304f72c6d6
```

##起動しているコンテナを再起動させる

```sh
  $ 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
```

##コンテナに接続する
5で紹介したイメージがコンテナの場合バージョン。
方法1はexitするとコンテナが終了してしまうため、「Ctrl+p,Ctrl+q」すること。方法2はexitしても終了しない。

###方法1

```sh

  $ docker attach 048697b53b77
```

###方法2

```sh

  $ 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
```

2.少し高度な操作
---
##ポートのマッピング

###基本

```sh

  $ docker run -d -p 8080:80 <image_name> -it /bin/bash
```

###IPアドレスも指定

```sh
  $ docker run -d -p 192.168.0.219:8080:80 <image_name>
```

##ボリュームのマッピング

```sh
  $ docker run -d -v /tmp/:/mnt/ <image_name>
```

##コンテナのイメージ化

```sh
  $ docker commit <Container ID> <image_name>:<tag>
```

##実用的なイメージの起動方法

```sh
  $ docker run -it -p 8000:8000 -v /tmp/006_log/01_arena/:/var/log/cowrie/ splunk:latest
```

##イメージのエクスポート

```sh
  $ docker save <image_name>:<tag_name> > <filename>
  $ docker save --output <filename> <image_name>:<tag_name>
  $ docker save -o <filename> <image_name>:<tag_name>
```

##イメージのインポート

```sh

  $ docker load < <filename>
  $ docker load --input <file_name>
```