dockerチートシート

参考：<a href="https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E6%95%99%E7%A7%91%E6%9B%B8-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96-%E9%98%BF%E4%BD%90-%E5%BF%97%E4%BF%9D/dp/479814102X">プログラマのためのDocker教科書 インフラの基礎知識&amp;コードによる環境構築の自動化 : 阿佐 志保(著), 山田 祥寛(監修)  </a>

# Dockerの情報確認
## Dockerのバージョン確認 (docker version)
```
$ docker version
```

## Dockerの実行環境確認 (docker info)
コンテナの数、イメージの数、ストレージドライバの種類、OS、Dockerホスト名などが確認できる。

```
$ docker info
```

# イメージに関する操作
## イメージのダウンロード (docker pull)
```
$ docker pull [オプション] イメージ名[:タグ名]
```

CentOSのバージョン7のイメージをダウンロード

```
$ docker pull centos:7
```

CentOSのすべてのタグのイメージ

```
$ docker pull -a centos
```

## 取得したイメージの一覧表示 (docker images)
```
$ docker images [オプション] [リポジトリ名]
```

## イメージの詳細確認 (docker inspect)
```
$ docker inspect [オプション] コンテナ識別子またはイメージ識別子 [コンテナ識別子またはイメージ識別子]
```

イメージID、作成日、Dockerのバージョン、イメージの作成者、CPUのアーキテクチャなどがJSON形式で表示される。

centosイメージの詳細を確認

```
$ docker inspect centos
```

centosイメージのOSの値を取得

```
$ docker inspect --format="{{ .Os}}" centos
```

centosイメージのContainerConfigのImageの値を取得

```
$ docker inspect --format="{{ .ContainerConfig.Image }}" centos
```

## イメージのタグ設定 (docker tag)
```
$ docker tag <元REPOSITORY:TAG> <新REPOSITORY:TAG>
```

httpd:2.4というイメージにユーザ名userがtest:1.0というタグをつける場合

```
$ docker tag httpd:2.4 user/test:1.0
```

## Docker Hub上のイメージの検索 (docker search)
```
$ docker search [オプション] 検索キーワード
```

お気に入り件数STARSの件数が、30件以上のcentosイメージだけを検索

```
$ docker search --stars=30 centos
```

## イメージの削除 (docker rmi)
イメージ名にはREPOSITORYまたはIMAGE IDを指定する。複数のイメージを同時削除の場合はスペース区切り

```
$ docker rmi [オプション] イメージ名 [イメージ名]
```

## Docker Hubへのログイン (docker login)
```
$ docker login [オプション] [サーバ名]
```

コマンド後、ユーザ名、パスワード、メールアドレスを入力し、ログインできる。

```
$ docker login
Username: <登録したユーザ名＞
Password: <登録したパスワード>
Email: <登録したメールアドレス>
Login Succeeded
```

## イメージのアップロード (docker push)
```
$ docker push イメージ名[:タグ名]
```
*事前にDocker Hubにログインしておくこと


## Docker Hubからのログアウト (docker logout)
```
$ docker logout [サーバ名]
```

# コンテナに関する操作

## コンテナの生成&起動 (docker run)
```
$ docker run [オプション] イメージ名[:タグ名] [引数]
```

centosイメージをもとにしてtest1という名前でコンテナを生成&起動、コンテナ内で/bin/calコマンドを実行。

```
$ docker run -it --name "test1" centos /bin/cal
```
>-it : コンソールに結果を出す。(-i : コンテナの標準入力を開く、 -t : tty(端末デバイス)を使う
--name "test1" : コンテナにtest1という名前を付ける。省略するとランダムな名前が自動設定される。


<b>コンテナのバッググラウンド実行 (-d)</b>
centosもとにしてコンテナを生成&起動、コンテナ内でlocalhostに対してpingをバッググラウンドで実行。

```
$ docker run -d centos /bin/ping localhost
```
> 対話的にコマンドを実行した場合コンテナIDが表示される。
> docker logs -t <コンテナID>     によってコンテナのログを確認できる
> pingコマンド実行後もコンテナは残る。自動的に削除する場合は--rmオプションを指定する。

<b>コンテナのネットワーク設定 (-p, --dns, --mac-address, --add-host)</b>
①コンテナのポート番号80をホストOSのポート番号をマッピングする場合(-p)
②DNSサーバを指定する場合 (--dns)
③MACアドレスを指定する場合 (--mac-address)
④ホスト名とIPアドレスを指定する場合 (--add-host)

```
$ docker run -d -p 8080:80 httpd              ----①
$ docker run --dns=192.168.1.1 httpd              ----②
$ docker run -it --mac-address="92:d0:c6:0a:29:33" centos              ----③
$ docker run -it --add-host=test.com:192.168.1.1 centos              ----④
```

<b>リソースを指定してコンテナを生成&実行 (--cpu-shares, --memory)</b>
CPUやメモリなどのリソースを指定する

```
$ docker run --cpu-shares=512 --memory=512m centos
```
> --cpu-shares：CPUの使用の配分を指定 (全体で1024なので例の場合50%)
> --memory：使用するメモリの上限（単位はb,k,m,g)

<b>ディレクトリの共有 (-v)</b>

```
$ docker run -v /c/Users/asa/WebPage:/var/www/html httpd
```
> ホストの/c/Users/asa/WebPageをコンテナの/var/www/htmlと共有し実行

<b>コンテナの環境変数を設定して実行(-e)</b>

```
$ docker run -it -e foo=bar centos /bin/bash
```
<b>コンテナの環境変数をファイルで設定して実行(--env-file)</b>

```
$ docker run -it --env-file=env_list centos /bin/bash
```
> [env_listの内容]
>  hoge=fuga
>  foo=bar

<b>作業ディレクトリを指定して実行(-w)</b>

```
$ docker run -it -w=/tmp/work centos /bin/bash
```
## 稼働コンテナの一覧表示 (docker ps)
```
$ docker ps [オプション]
```

## コンテナの稼働確認 (docker stats)
```
$ docker stats [コンテナ識別子]
```

apacheとnginxという名前のコンテナの稼働状況を確認

```
$ docker stats apache nginx
```

## コンテナの起動 (docker start)
```
$ docker start [オプション] コンテナ識別子 [コンテナ識別子]
```
## コンテナの停止 (docker stop)
```
$ docker stop [オプション] コンテナ識別子 [コンテナ識別子]
```

## コンテナの再起動 (docker restart)
```
$ docker restart [オプション] コンテナ識別子 [コンテナ識別子]
```

## コンテナの削除 (docker rm)
```
$ docker rm [オプション] コンテナ識別子 [コンテナ識別子]
```

## コンテナの中断,再開 (docker pause, docker unpause)
```
$ docker pause コンテナ識別子 [コンテナ識別子]
```

## 稼働コンテナへの接続 (docker attach)
```
$ docker attach コンテナ名
```

## 稼働コンテナでプロセス実行 (docker exec)
```
$ docker exec [オプション] コンテナ識別子　実行するコマンド [引数] 
```

## 稼働コンテナのプロセス確認　(docker top)
```
$ docker top コンテナ名
```

## 稼働コンテナのポート転送確認 (docker port)
```
$ docker port コンテナ名
```

## コンテナの名前変更 (docker rename)
```
$ docker rename 現在のコンテナ名 新しいコンテナ名
```

## ホストとコンテナ間でファイルをコピー (docker cp)
```
$ docker cp コンテナ識別子:コンテナ内のファイルパス ホストのディレクトリパス
$ docker cp ホストのファイル コンテナ識別子:コンテナ内のファイルパス
```

## コンテナ操作の差分確認 (docker diff)
```
$ docker diff コンテナ識別子
```

## コンテナからイメージ作成 (docker commit)
```
$ docker commit [オプション] コンテナ識別子 [イメージ名[:タグ名]]
```

## コンテナをtarファイル出力  (docker export)
```
$ docker export コンテナ識別子
```

## tarファイルからイメージ作成 (docker import)
```
$ docker import ファイルまたはURL - [イメージ名[:タグ名]]
```

## イメージの保存 (docker save)
```
$ docker save [オプション] 保存ファイル名 [イメージ名]
```

## イメージの読み込み (docker load)
```
$ docker load [オプション]
```

-----
随時追加中