第02回　Dockerイメージの導入、各種コマンド等の学習

# はじめに
本文書を参照頂きありがとうございます。
この文書は社内勉強会に向けた文書である為、一部期待値と異なる表現、記載がある場合がありますので、ご利用になられる際はその辺りも加味して頂いてご利用下さい。

# Dockerイメージの導入（nginx）
[前回まで](https://qiita.com/takanobu_kawaguchi/items/f403d391720485b106cb)でDocker環境をRaspberry Piに構築し、HelloWorldイメージの実行まで実施しました。
今回はnginxのイメージを導入してみます。
参考URL：https://hub.docker.com/r/tobi312/rpi-nginx/
※nginxは最近人気のWebサーバです。（ https://ja.wikipedia.org/wiki/Nginx ）

```
pi@raspberrypi:~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              618e43431df9        5 months ago        1.64kB
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ docker pull tobi312/rpi-nginx
Using default tag: latest
latest: Pulling from tobi312/rpi-nginx
dc95218aa9a9: Pull complete 
08105d289242: Pull complete 
943cb8ac165f: Pull complete 
2bcf02afc443: Pull complete 
c6e1574200da: Pull complete 
d52d57d897d4: Pull complete 
9a065381e3e0: Pull complete 
Digest: sha256:8e71f57b18e3cb093d6b5a58b5c4c0ef463c5c47be5332d0af3ff042e474add5
Status: Downloaded newer image for tobi312/rpi-nginx:latest
pi@raspberrypi:~ $ 
pi@raspberrypi:~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tobi312/rpi-nginx   latest              7fb0435a7b74        5 weeks ago         168MB
hello-world         latest              618e43431df9        5 months ago        1.64kB
pi@raspberrypi:~ $ 
```

下記のコマンドでnginxを起動します。

```
pi@raspberrypi:~ $ docker run --name nginx -d -p 80:80 tobi312/rpi-nginx
63623a2ed45192063dd06022e03fbf3c066c85c781b8fe2285d48df3dd753286
```

http://IPアドレス
でnginxのスタートアップ画面が表示されました。
![スクリーンショット 2019-06-03 12.01.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187099/6136c611-13bc-4d7c-6ac4-97e56e57c032.png)

数秒、、、は言い過ぎですが、
数分でWebサーバの導入、起動が完了です。

# Dockerイメージの導入（PostgreSQL）
参考URL：https://hub.docker.com/r/tobi312/rpi-postgresql/

イメージを取得します。

```
pi@raspberrypi:~ $ docker pull tobi312/rpi-postgresql:9.6
9.6: Pulling from tobi312/rpi-postgresql
7da8358bc620: Pull complete 
40208d212647: Pull complete 
8d55d8b6ecff: Pull complete 
3620a34fc408: Pull complete 
b823367bf6c3: Pull complete 
eaad29dc0d6b: Pull complete 
932dfb4f2773: Pull complete 
1edf78336a12: Pull complete 
74f0bc52ab1c: Pull complete 
d37629a3d04e: Pull complete 
3189bef8ed49: Pull complete 
bc2336cbf38e: Pull complete 
e768b84089c2: Pull complete 
ebf4e3bf65e4: Pull complete 
ea1142ebf907: Pull complete 
09b0d86104a5: Pull complete 
Digest: sha256:038c592d4e7691bc4ed9fc84258b2c3e4c36816f63a4740a7c6c3a0a177ba654
Status: Downloaded newer image for tobi312/rpi-postgresql:9.6
```

稼働用のワークディレクトリを作成します。

```
pi@raspberrypi:~ $ mkdir -p /home/pi/.local/share/postgresql
```

イメージを起動します。

```
pi@raspberrypi:~ $ docker run --name pgsql -d -p 5432:5432 -v /home/pi/.local/share/postgresql:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres tobi312/rpi-postgresql:9.6
a9c0c8cb8595199f8cdbd671f5a0522862f36996068daee1c663815a34ce8cb2
```

正常に起動したようです。

```
pi@raspberrypi:~ $ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
a9c0c8cb8595        tobi312/rpi-postgresql:9.6   "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:5432->5432/tcp   pgsql
```

Raspberry Piのpsコマンドでもプロセスが確認できます。

```
pi@raspberrypi:~ $ ps -ef | grep postgres
999       1069  1052  0 08:15 ?        00:00:00 postgres
999       1234  1069  0 08:15 ?        00:00:00 postgres: checkpointer process  
999       1235  1069  0 08:15 ?        00:00:00 postgres: writer process  
999       1236  1069  0 08:15 ?        00:00:00 postgres: wal writer process  
999       1237  1069  0 08:15 ?        00:00:00 postgres: autovacuum launcher process  
999       1238  1069  0 08:15 ?        00:00:00 postgres: stats collector process  
pi        1321  1253  0 08:24 pts/1    00:00:00 grep --color=auto postgres
```

# その他のDockerイメージ
好きなものを取り寄せて起動してみましょう。
ここではCentOSを取得してみます。

```
pi@raspberrypi:~ $ docker pull centos:centos7
```

ここでrunしてみます。

```
pi@raspberrypi:~ $ docker run -it -d --name centos7 centos:centos7
```

・・・で、この後色々あって放置していました。
取得したのは大分前なので、現在の状態を確認します。

```
pi@raspberrypi:~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              centos7             9f38484d220f        5 months ago        202MB
```

居ました、現在は停止しています。

```
pi@raspberrypi:~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c33197a449f6        centos:centos7      "/sbin/init"        13 days ago         Exited (255) 11 days ago 
```

起動してみます。この時指定するのはCONTAINER ID。

```
pi@raspberrypi:~ $ docker start c33197a449f6
c33197a449f6
```

サクッと上がったので、状態を確認してみます。

```
pi@raspberrypi:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c33197a449f6        centos:centos7      "/sbin/init"        13 days ago         Up 3 seconds                            TEST
```

無事に起動していました。
続いて、起動したCentOSへログインしてみます。

```
# 起動したCentOSへログイン
pi@raspberrypi:~ $ docker exec -it c33197a449f6 bash
[root@c33197a449f6 /]# 
[root@c33197a449f6 /]# hostname
c33197a449f6
[root@c33197a449f6 /]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 
[root@c33197a449f6 /]# 
```

redhat-releaseファイルを確認して、立ち上がっているコンテナが間違いなくCentOSであることを確認しました。

# Dockerを操作するコマンド
Dockerを操作するコマンドは沢山あるのですが、以下の参考リンクと共にご紹介しておきます。
※ご参考：[Dokerコマンド一覧](https://qiita.com/nimusukeroku/items/72bc48a8569a954c7aa2)

|番号  |コマンド  |用途  |
|---|---|---|
|1  |pull  |Dockerイメージを取得する  |
|2  |run  |DockerイメージからDockerコンテナを作成する  |
|3  |exec  |Dockerコンテナ上のコマンドを実行する  |
|4  |push  |DockerイメージをDockerレジストリに送る  |
|5  |images  |Dockerホスト上のDockerイメージの一覧を表示する  |
|6  |build  |DockerイメージをDockerfileに基づいて作成する  |
|7  |start  |停止中のDockerコンテナを起動する  |
|8  |stop  |起動中のDockerコンテナを停止する  |
|9  |rm  |停止中のDockerコンテナを削除する  |
|10  |rmi  |Dockerホスト上のDockerイメージを削除する  |
|11  |kill  |起動中のDockerコンテナを強制停止する  |
|12  |ps  |Dcokerホスト上のDockerコンテナ一覧を表示する  |
|13  |login  |Dockerレジストリにログインする  |
|14  |logout  |Dockerレジストリからログアウトする  |
|15  |commit  |Dockerコンテナの変更状態から新しいDockerイメージを作成する  |
|16  |cp  |Dockerコンテナとローカルファイルシステムの間でファイル／ディレクトリコピーを行う  |
|17  |logs  |Dockerコンテナのログを取得する  |
|18  |save  |Dockerイメージの内容をtarアーカイブとして出力する  |
|19  |load  |tarアーカイブからDockerイメージを読み込む  |
|20  |tag  |既存のDockerイメージから新しいDockerイメージ名を作成する  |
|21  |history  |Dockerイメージの生成履歴を表示する  |

### ※Dockerコマンド応用編

```
    全コンテナ停止: docker stop $(docker ps -q)
    全コンテナ削除: docker rm $(docker ps -q -a)
    全イメージ削除: docker rmi $(docker images -q)
```

という感じです。
第02回、お疲れ様でした。