Dockerコマンド一覧

## Docker全体の管理・操作

### バージョン確認

```bash
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true
```

### 実行環境確認

```bash
$ docker system info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 18.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.87-linuxkit-aufs
Operating System: Docker for Mac
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.952GiB
Name: linuxkit-025000000001
ID: UGDW:36LB:QTG2:3UWB:5Z7G:FJOJ:BM5C:VST6:DAZJ:MRQD:4EYY:QGHX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 24
 Goroutines: 43
 System Time: 2018-05-30T07:43:47.158285653Z
 EventsListeners: 2
HTTP Proxy: docker.for.mac.http.internal:3128
HTTPS Proxy: docker.for.mac.http.internal:3129
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
```

### ディスク利用状況

```bash
$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   1                   79.62MB             0B (0%)
Containers          1                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache
```

## イメージの管理

### イメージのダウンロード

Dockerコンテナを起動するためには、Dockerコンテナの元になるDockerイメージが必要です。

`docker image pull [オプション] イメージ名[:タグ名]`
`docker pull イメージ名`

```bash
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f2aa67a397c4: Pull complete 
3c091c23e29d: Pull complete 
4a99993b8636: Pull complete 
Digest: sha256:0fb320e2a1b1620b4905facb3447e3d84ad36da0b2c8aa8fe3a5a81d1187b884
Status: Downloaded newer image for nginx:latest
```

### ダウンロード済みイメージの確認

`docker image ls [オプション][レポジトリ名]`

|オプション|説明|
|:-----------------|:------------------|
|-all, -a|すべてのイメージを表示|
|--digests| ダイジェストを表示するかどうか|
|--no-trunc|結果をすべて表示する|
|--quiet, -q|DockerイメージIDのみ表示|

```bash
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        4 weeks ago         109MB
ubuntu              latest              452a96d81c30        4 weeks ago         79.6MB
```

|項目|説明|
|:-----------------|:------------------|
|REPOSITORY|イメージの名前|
|TAG|イメージタグ名|
|IMAGE ID|イメージID|
|CREATED|作成日|
|SIZE|イメージのサイズ|

### イメージの詳細確認

詳細情報がJSON形式で表示されます。

```bash
$ docker image inspect nginx
[
    {
        "Id": "sha256:ae513a47849c895a155ddfb868d6ba247f60240ec8495482eca74c4a2c13a881",
        ...
        "Created": "2018-04-30T13:55:45.019400581Z",
        ...
        "DockerVersion": "17.06.2-ce",
        ...
        "Architecture": "amd64",
        ...
    }
]

# キーを指定して値を取得する場合
$ docker image inspect --format="{{ .Os }}" nginx
linux
# . (ドット)を付けて階層を表現
$ docker image inspect --format="{{ .ContainerConfig.Hostname }}" nginx
0ef39071559e
```

### イメージへのタグ設定

```bash
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        4 weeks ago         109MB
$ docker image tag nginx kkkk/webserver:1.0
C02SY1XFGTFJ:advr ko-kamenashi$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kkkk/webserver      1.0                 ae513a47849c        4 weeks ago         109MB
nginx               latest              ae513a47849c        4 weeks ago         109MB
# タグを付けたイメージと元のイメージの[IMAGE ID]が同じである
```

### イメージの検索

`docker search [オプション] 検索キーワード`

|オプション|説明|
|:-----------------|:------------------|
|--no-trunc|結果をすべて表示する|
|--limit|n件の検索結果を表示する|
|--filter=stars=n|お気に入りの数（n以上）の指定|

```bash
$ docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        8564                [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1336                                    [OK]
...
```

### イメージの削除

`docker image rm [オプション] イメージ名 [イメージ名]`

|オプション|説明|
|:-----------------|:------------------|
|--force, -f|イメージを強制的に削除する|
|--no-prun|中間イメージを削除しない|

```bash
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kkkk/webserver      1.0                 ae513a47849c        4 weeks ago         109MB
nginx               latest              ae513a47849c        4 weeks ago         109MB
$ docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:0fb320e2a1b1620b4905facb3447e3d84ad36da0b2c8aa8fe3a5a81d1187b884
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kkkk/webserver      1.0                 ae513a47849c        4 weeks ago         109MB
```

### 未使用のイメージを削除

`docker image prune [オプション]`

|オプション|説明|
|:-----------------|:------------------|
|--all, -a|使用していないイメージをすべて削除|
|--force, -f|イメージを強制的に削除する|

### Docker Hubへのログイン

`docker login [オプション][サーバー]`

|オプション|説明|
|:-----------------|:------------------|
|--password, -p|パスワード|
|--username, -u|ユーザー名|

```bash
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username : 
Password: 
Login Succeeded
```

### イメージのアップロード

`docker image push イメージ名 [:タグ名]`

Docker Hubにアップロードするイメージは

`<Docker Hub ユーザー名>/イメージ名:[タグ名]`

にする

```bash
$ docker image push kkdk/webserver:1.0
The push refers to repository [docker.io/kkdk/webserver]
7ab428981537: Pushed 
82b81d779f83: Pushed 
d626a8ad97a1: Pushed 
1.0: digest: sha256:e4f0474a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d90 size: 948
```

### Docker Hubからのログアウト

`docker logout [サーバー名]`

## コンテナの管理

### コンテナ生成/起動

`docker container run [オプション] イメージ名[:タグ名] [引数]`

|オプション|説明|
|:-----------------|:------------------|
|--attach, -a|標準入力（STDIN）/標準出力（STDOUT）/標準エラー出力（STDERR）にアタッチする|
|--cidfile|コンテナIDをファイルに出力する|
|--detach, -d|コンテナを生成し、バックグラウンドで実行する|
|--interactive, -i|コンテナの標準入力を開く|
|--tty, -t|端末デバイスを使う|
|--restart|コンテナ内で実行するコマンドの終了ステータスによってコンテナを自動的に再起動する|

#### イメージ無しの場合

```bash
$ docker container run ubuntu:latest /bin/echo 'Hello, world!'
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
a48c500ed24e: Pull complete 
1e1de00ff7e1: Pull complete 
0330ca45a200: Pull complete 
471db38bcfbf: Pull complete 
0b4aba487617: Pull complete 
Digest: sha256:c8c275751219dadad8fa56b3ac41ca6cb22219ff117ca98fe82b42f24e1ba64e
Status: Downloaded newer image for ubuntu:latest
Hello, world!
```

#### イメージをダウンロード済みの場合

```bash
$ docker container run --name webserver -d -p 80:80 nginx
bf92dbbd8dede5101834a35c12563afbd1d9ff83fe2960856b25dd4190ca4228
```

#### コンテナの対話的実行

`docker container run -it --name "test1" centos /bin/cal`
 ①^^^^^^^^^^^^^^^^^^^ ②^^ ③^^^^^^^^^^^^  ④^^^^^ ⑤^^^^^^^
①コンテナを作成／実行
②コンソールに結果を出すオプション
③コンテナ名
④イメージ名
⑤コンテナで実行するコマンド

#### bashの実行

```bash
$ docker container run -it --name "test2" centos /bin/bash
[root@0e51a5681f1b /]# 
```

### コンテナのバックグラウンド実行

`docker container run [実行オプション] イメージ名[:タグ名] [引数]`

|オプション|説明|
|:-----------------|:------------------|
|--detach, -d|バックグラウンドで実行する|
|--user, -u|ユーザー名を指定|
|--restart=[no, on-failure, on-failure:回数n, always, unless-stopped]|コマンドの実行結果によって再起動を行うオプション|
||no 再起動しない/on-failure 終了ステータスが0でないときに再起動する/on-failure:回数n 終了ステータスが0でないときにn回再起動する/always 常に再起動する/unless-stopped 直近のコンテナが停止状態でなければ常に再起動する|
|--rm|コマンド実行完了後にコンテナを自動で削除|

### コンテナのネットワーク設定

`docker container run [ネットワークオプション] イメージ名[:タグ名] [引数]`

|オプション|説明|
|:-----------------|:------------------|
|--add-host=[ホスト名:IPアドレス]|コンテナの/etc/hostsにホスト名とIPアドレスを定義する|
|--dns=[IPアドレス]|コンテナ用のDNSサーバーのIPアドレス指定|
|--expose|指定したレンジのポート番号を割り当てる|
|--mac-address=[MACアドレス]|コンテナのMACアドレスを指定する|
|--net=[bridge | none | container:<name | id> | host | NETWORK]|コンテナのネットワークを指定する|
||bridge ブリッジ接続（デフォルト）を使う / none ネットワークに接続しない / container:[ name or id ] 他のコンテナのネットワークを使う / host コンテナがホストOSのネットワークを使う / NEWWORK ユーザー定義ネットワークを使う|
|--hostname, -h|コンテナ自身のホスト名を指定する|
|--publish, -p[ホストのポート番号]:[コンテナのポート番号]|ホストとコンテナのポートマッピング|
|--publish-all, -P|ホストの任意のポートをコンテナに割り当てる|

#### コンテナのポートマッピング

`docker container run -d -p 8080:80 nginx`

#### コンテナのDNSサーバー指定

`docker container run -d --dns 192.168.1.1 nginx`

#### MACアドレスの指定

`docker container run -d --mac-address="92:d0:c6:0a:29:33" centos`

#### ホスト名とIPアドレス定義

`docker container run -it --add-host test.com:192.168.1.1 centos`

### リソースを指定してコンテナを生成／実行

`docker container run [リソースオプション] イメージ名 [: タグ名] [引数]`


|オプション|説明|
|:-----------------|:------------------|
|--cpu-shares, -c|CPUの使用の配分（比率）|
|--memory, -m|使用するメモリを制限して実行する（単位はb, k, m, gのいずれか）|
|--volume~[ホストのディレクトリ]:[コンテナのディレクトリ], -v|ホストとコンテナのディレクトリを共有|

#### CPU時間の相対割合とメモリの使用量を指定

`docker container run --cpu-shares=512 --memory=1g centos`

#### ホストOSとコンテナ内のディレクトリの共有

`docker container run -v /Users/asa/webap:/user/share/nginx/html nginx`

### コンテナを生成／起動する環境を指定

`docker container run [環境設定オプション]　イメージ名[:タグ名] [引数]`

|オプション|説明|
|:-----------------|:------------------|
|--env=[環境変数], -e|環境変数を設定する|
|--env-file=[ファイル名]|環境変数をファイルから設定する|
|--read-only=[true or false]|コンテナのファイルシステムを読み込み専用にする|
|--workdir=[パス], -w|コンテナの作業ディレクトリを指定する|
|-u, --user=[ユーザー名]|ユーザー名またはUIDを指定する|

#### 環境変数の設定

`docker container run -it -e foo=bar centos /bin/bash`

#### 環境変数の一括設定

```bash
$ cat env_list
hoge=fuga
foo=bar

$ docker container run -it --env-file=env_list centos /bin/bash

[root@asdf8dfn]# set
BASH=/bin/bash
...
hoge=fuga
foo=bar
```

#### 作業ディレクトリの設定

```bash
$ docker container run -it -w=/tensorflow centos /bin/bash

[root@asdf8dfn]# pwd
/tensorflow
```

### 稼働コンテナの一覧表示

`docker container ls [オプション]`

|オプション|説明|
|:-----------------|:------------------|
|--all, -a|起動中／停止中も含めてすべてのコンテナを表示する|
|--filter, -f|表示するコンテナのフィルタリング|
||.ID コンテナID / .Image イメージID / .Command 実行コマンド / .CreatedAt コンテナが作成された時間 / .RunningFor コンテナの稼働時間 / .Ports 公開ポート / .Status コンテナの状態 / .Size コンテナのディスクサイズ / .Names コンテナ名 / .Mounts ボリュームマウント / .Networks ネットワーク名|
|--format|表示フォーマットを指定|
|--last, -n|最後に起動されてからn件のコンテナのみ表示|
|--latest, -l|最後に起動されたコンテナのみ表示|
|--no-trunc|情報を省略しないで表示する|
|--quiet, -q|コンテナIDのみ表示|
|--size, -s|ファイルサイズの表示|

```bash
$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
0e51a5681f1b        centos              "/bin/bash"              6 hours ago         Exited (0) 6 hours ago                       test2
85eea26917be        centos              "/bin/cal"               3 days ago          Exited (0) 3 days ago                        test1
bf92dbbd8ded        nginx               "nginx -g 'daemon of…"   5 days ago          Exited (0) 5 days ago                        webserver
c8827e917923        ubuntu:latest       "/bin/echo 'Hello, w…"   5 days ago          Exited (0) 5 days ago                        clever_fermat
```

|項目|説明|
|:-----------------|:------------------|
|CONTAINER ID|コンテナID|
|IMAGE|コンテナのもとになっているイメージ|
|COMMAND|コンテナ内で実行されているコマンド|
|CREATED|コンテナ作成からの経過|
|STATUS|コンテナの状態（restarting/running/paused/exited）|
|PORTS|割り当てられたポート|
|NAMES|コンテナの名前|

### コンテナの稼働確認

`docker container stats [コンテナ識別子]`

```bash
$ docker container stats webserver

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
bf92dbbd8ded        webserver           0.00%               1.922MiB / 1.952GiB   0.10%               2.83kB / 2.27kB     0B / 0B             2
```

|項目|説明|
|:-----------------|:------------------|
|CONTAINER ID|コンテナ識別子|
|NAME|コンテナ名|
|CPU %|CPU使用率|
|MEM USAGE/LIMIT|メモリ使用量／コンテナで使用できるメモリ制限|
|MEM %|メモリ使用率|
|NET I/O|ネットワークI／O|
|BLOCK I/O|ブロックI／O|
|PIDS|PID（Windowsコンテナ除く）|


### コンテナの起動

`docker container start [オプション] コンテナ識別子 [コンテナ識別子]`

|オプション|説明|
|:-----------------|:------------------|
|--attach, -a|標準出力／標準エラー出力を開く|
|--interactive, -i|コンテナの標準入力を開く|

```bash
$ docker container start webserver
webserver
```

### コンテナの停止

`docker container stop [オプション] コンテナ識別子 [コンテナ識別子]`

|オプション|説明|
|:-----------------|:------------------|
|--time, -t|コンテナの停止時間を指定する（デフォルトは10秒）|

```bash
$ docker container stop webserver
webserver
```

※強制的にコンテナを停止するときは、docker container kill コマンドを使います

### コンテナの再起動

`docker container restart [オプション] コンテナ識別子 [コンテナ識別子]`

|オプション|説明|
|:-----------------|:------------------|
|--time, -t|コンテナの再起動時間を指定する（デフォルトは10秒）|

### コンテナの削除

`docker container rm [オプション] [コンテナ識別子] [コンテナ識別子]`

|オプション|説明|
|:-----------------|:------------------|
|--force, -f|起動中のコンテナを強制的に削除する|
|--volumes, -v|割り当てたボリュームを削除する|

```bash
$ docker container rm webserver
webserver
```

※停止中の全コンテナを削除するには、docker container prune コマンドを使用

### コンテナの中断／再開

#### 中断

`docker container pause コンテナ識別子`

#### 再開

`docker container unpause コンテナ識別子`

### サーバーの状態を確認

```bash
$ docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
bf92dbbd8ded        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   webserver
```