dockerの基本的な操作コマンド

# docker インストール
CentOS7にdockerをインストールする。
## インストール
yumでインストール

```
yum install docker
```
## 自動起動設定とサービス起動
サービスが起動することを確認する。また、自動起動するようにしておく。

```
systemctl enable docker
systemctl start docker
systemctl status docker
```

## バージョン確認
dockerのバージョンを確認できる。

```
docker version
```

## docker情報の確認
システム情報を確認できる。

```
docker info
```

# docker hubにログイン
あらかじめ、[docker hub](https://cloud.docker.com/)にアカウント登録しておく。

```
docker login
```
「Login Succeeded」を表示された成功。

# ログアウト
docker hubからログアウトする。

```
docker logout
```

# docker hub(イメージ)の操作
docker hub上へイメージをPull、Pushする。
公開設定されているイメージであれば他人のものも使用できる。

## イメージを検索
今回はcentosのイメージを検索する。
あくまで検索キーワードなので、docker hubのユーザ名とかでも検索できる。

```
docker search centos
```

「docker.io/centos」が公式のイメージらしい。

```
# docker search centos
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   5682      [OK]
```

## イメージをPull
見つけた公式のイメージをダウンロードする。

```
docker pull -a docker.io/centos
```

## イメージの確認
Pullしたイメージを確認する。
イメージ名を指定することも可能。

```
docker images
docker images docker.io/centos
```

## イメージの削除
確認したイメージから削除したいイメージの「IMAGE ID」と「REPOSITORY」を指定する。

```
docker rmi (IMAGE ID) (REPOSITORY)
```

### イメージを全削除
イメージをすべて削除したい場合に使う。

```
docker rmi `docker images -a -q`
```

### タグ無しのイメージを削除
```
docker rmi $(docker images | grep '<none>' | awk '{print$3}')
```

## イメージ名の変更
IMAGE ID XXXXXをイメージ名を「USER/cetos7:base」へ変更する。
「USER」部分は自分のユーザ名にする。

```
docker tag XXXXX USER/cetos7:base
```
> docker tag (IMAGE ID) (REPOSITORY:TAG)
>> 「:TAG」を省略すると、latestになる。

## docker hubへイメージを保存
イメージ名を変更したイメージを自分のdocker hubへPushする。

```
docker push USER/cetos7:base
```
> docker push (REPOSITORY:TAG)

### Pushしたイメージの確認
ブラウザからdocker hubへログインし、イメージがPushされていることを確認する。
デフォルト動作(?)だとPushしたイメージは非公開設定になっていたので、docker search コマンドだと見つけられなかった。

# コンテナの操作コマンド
Pullしたイメージをコンテナとして起動して動かしてみる。

## コンテナ起動
イメージからコンテナを起動する。

```
docker run -itd --name test01 USER/centos7:base /bin/bash
```
> docker run -itd --name (コンテナ名) (REPOSITORY:TAG) /bin/bash 
>> 「--name」は起動するコンテナ名を任意で指定する。

### ポート転送を設定してコンテナ起動
イメージからコンテナを起動し名前を付けて接続し、ホスト8080番ポートをコンテナ80番へ転送するように起動する。

```
docker run -itd -p 8000:80 --name test02 USER/centos7:base /bin/bash
```
> docker run -itd -p (ホストポート):(コンテナポート) --name (コンテナ名) (REPOSITORY:TAG) /bin/bash

#### バックグラウンドでの起動について
「-d」をつけることでバックグラウンドでもコンテナが起動している状態になる。
***「-d」無しで起動すると、コンテナ起動直後にコンテナにログインし、exitすると停止する。***

## コンテナ確認
コンテナ一覧を確認する。

```
docker ps -a
```

### 実行例
STATUSがUpになり、コンテナが起動していることが確認できる。
また、test02のコンテナはポート転送が設定されていることも確認できる。
※CONTAINER IDとIMAGEのユーザ名はマスキング。

```
# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                  NAMES
XXXXXXXXXXXX        XXXXXX/centos7:base   "/bin/bash"         10 seconds ago      Up 9 seconds        0.0.0.0:8000->80/tcp   test02
XXXXXXXXXXXX        XXXXXX/centos7:base   "/bin/bash"         19 seconds ago      Up 18 seconds                              test01
```

## コンテナ起動・停止
コンテナを指定して、起動・停止する。

```
docker stop test01
docker start test01
```
> docker stop (CONTAINER ID)もしくは(NAME)

対象のコンテナを複数指定することも可能。

``` 
docker stop test01 test02
``` 

## コンテナ接続
起動したコンテナに接続する

```
docker attach test01
```
> docker attach (コンテナ名)

### コンテナ切断
**exitするとコンテナが終了してしまう。そのため、コンテナを終了せずに抜ける場合は「Ctrl+p,Ctrl+q」**
#### exitで終了させない場合
以下のコマンドで接続すればexitしても終了しない。

```
docker exec -it CONTAINER /bin/bash
```

## コンテナを保存
コンテナをイメージとして保存する。
REPOSITORY名は変えずにTAGで管理しておくと良いかも。

```
docker commit test01 USER/centos7:new
```
> docker commit (対象のコンテナ名) (REPOSITORY:TAG)

## コンテナ削除
作成したコンテナを削除する。
削除するコンテナはあらかじめ停止させること。

```
docker rm test01
```
> docker rm (CONTAINER ID)もしくは(NAME)

対象のコンテナを複数指定することも可能。

``` 
docker rm test01 test02
``` 

### 停止コンテナの一括削除
停止しているコンテナを一括で削除できる。

```
docker rm `docker ps -a -q`
```