基本的なDockerコマンド一覧（コンテナ操作、イメージ操作）

# Dockerとは
Dockerは、コンテナ型仮想環境を作成、実行、管理するためのプラットフォームで、Docker自体はGo言語で記述されています。（Docker公式ホームページは[こちら](https://www.docker.com/)）
異なる環境(PCやサーバ)で簡単に同じ仮想環境を構築できるので、共同開発する際に重宝されます。
また、DockerコンテナをそのままAWSやGCPへデプロイすることも可能で、とても容易に開発環境・本番環境を構築することができます。

Dockerのインストールは、以前投稿した[Docker Desktopをインストールして、動作確認する](https://qiita.com/raptony110/items/3a7cb9b6d030d227ff47)を参考にしてください。

# Dockerコマンド
基本的なコマンドとその役割を説明します。
最新のDocker推奨コマンドは変更の可能性があるので、公式ドキュメントを確認してください。
## Dockerコンテナの操作
### DockerイメージからDockerコンテナを作成して起動する
ローカルにイメージがなければ、DockerHubからイメージをダウンロードして、コンテナを生成します。
```
$ docker run [イメージ名]
$ docker run alpine     #ex.
```
docker runコマンドは、3つのコマンド（docker pull,docker create,docker start）をまとめて実行するコマンドで便利です。
つづいて、よく使うdocker runコマンドのオプションについて見ていきましょう。

#### [--name]オプション
--nameオプションを利用すると起動するコンテナに名前をつけることができます。
ちなみに、イメージの後ろに:(コロン)をつけると、Dockerイメージのタグを指定することができます。
```
$ docker run --name [コンテナ名] [イメージ名]:[タグ名]
$ docker run --name nginx nginx:latest     #ex.
```
#### [-d]オプション
-d(--detach)オプションを利用すると、コンテナをデタッチモードで起動することができます。コンテナプロセスを標準入力コンソールからデタッチできるので、別のターミナルを起動することなくコマンド入力を継続できます。
```
$ docker run -d --name [コンテナ名] [イメージ名]:[タグ名]
$ docker run -d --name nginx nginx:latest     #ex.
```
#### [-i][-t]オプション
-i(--interactive)オプションを利用すると、コンテナプロセスの標準入力を継続することができます。
-t(--tty)オプションを利用すると、コンテナプロセスに擬似的にTTYを割り当てることができます。フォアグランドプロセスがコンテナ上で動作しない場合に使用するオプションですが、-iと組み合わせて利用されるケースが多いです。
特に、コンテナプロセスが標準入出力を対象とする場合は-itオプションをつけて、ソケットを受け取る場合はオプションを外します。
```
$ docker run -d -it --name [コンテナ名] [イメージ名]:[タグ名]
$ docker run -d -it --name nginx nginx:latest     #ex.
```
#### [-h]オプション
-h(--hostname)オプションを利用すると、コンテナのホスト名を指定することができます。
```
$ docker run -d -it --name [コンテナ名] -h [ホスト名] [イメージ名]:[タグ名]
$ docker run -d -it --name nginx -h ap1 nginx:latest     #ex.
```
#### [--ip]オプション
--ipオプションを利用すると、コンテナのipアドレスを指定することができます。
```
$ docker run -d -it --name [コンテナ名] --ip [ipアドレス] [イメージ名]:[タグ名]
$ docker run -d -it --name nginx -ip 192.168.11.150 ap1 nginx:latest     #ex.
```
#### [-p]オプション
-p(--port)オプションを利用すると、ホストのポート番号と、コンテナのポート番号をマッピングすることができます。
```
$ docker run -d -it --name nginx -p [ホスト側のポート番号]:[コンテナ側のポート番号] [イメージ名]
$ docker run -d -it --name nginx -p 8080:80 nginx
```
#### [-w]オプション
-w(--workdir)オプションを利用すると、コンテナプロセスのワークディレクトリを指定することができます。
```
$ docker run -d -it --name nginx -w [ディレクトリパス] [イメージ名]
$ docker run -d -it --name nginx -w /docker-test nginx
```
### Dockerコンテナを停止する
```
$ docker stop [コンテナ名]
$ docker stop nginx     #ex.
```
### 実行中のDockerコンテナの一覧を表示する
```
$ docker ps
```
#### [-a]オプション
-aオプションを利用すると、停止中のコンテナも含めてすべてのコンテナを表示することができます。
```
$ docker ps　-a
```
### Dockerコンテナを削除する
```
$ docker rm [コンテナ名]
$ docker rm nginx     #ex.
```
### Dockerコンテナを停止状態で作成するにはcreateコマンドを利用します。
```
$docker create -d -it --name nginx-test -p 8080:80 nginx:latest     #ex.
```
## Dockerイメージの操作
### DockerfileからDockerイメージを作成する
-tオプションはイメージ名（タグ）を指定するオプションです。
最後のピリオドはビルドコンテキストです。どのディレクトリの内容をDockerイメージに含めるのか指定することができます。よって、ビルドコンテキストには不要なファイルを配置しないようにしましょう。
```
$ docker build -t [イメージ名] .
```
### Dockerイメージの一覧を表示する
```
$ docker images
```
### Dockerイメージにエイリアスをつけて管理する
```
$ docker tag [イメージ名] [エイリアス名]
$ docker tag nginx my_nginx     #ex.
```
### Dockerイメージにタグをつける
```
$ docker tag [イメージ名] [エイリアス名]:[タグ名]
$ docker tag nginx my_nginx:ver2     #ex.
```
### Dockerイメージの詳細情報を表示する
```
$ docker inspect [イメージ名]
```
### Dockerイメージを削除する
```
$ docker rmi [イメージ名]
```
#### [-f]オプション
すでに削除するイメージを元にしたコンテナが存在する場合に、強制的に削除する場合に使用する
```
$ docker rmi -f [イメージ名]
```

# まとめ
Dockerイメージ、Dockerコンテナに関するコマンドについて記載しました。各コマンドでは今回記載したもの以外にもたくさんのオプションがありますので、--helpオプションで確認してみてください。