Docker pull run push Dockerfile 簡単Webサイトをつくる(トレーニング資料)

Dockerのpull run push Dockerfileからのbuildなど、一通りの事を簡単なWebサイトを作ることを目的にやってみましょう。

環境：こちらで用意してあるクラウド上のVMアクセス情報は、別途メールで展開します。
　　　OS：Ubuntu18.04.2
　　　Docker:Docker-ce-18.09.5 ※[インストール方法](https://docs.docker.com/install/linux/docker-ce/ubuntu/)をご参照
　　　ユーザー：ubuntu　(sudo可）

事前に[DokerHub](https://hub.docker.com/)のアカウントを作成しておきましょう。

# 事前準備

```lang:コマンド：rootユーザーに切替
$ sudo su -
```

# インストールしたDocker情報を確認

## 1.Dockerのバージョンを確認

```lang:コマンド
# docker version
```

## 2.システム情報の確認

```lang:コマンド
# docker info
```

# Docker Hubからコンテナーイメージのpull

## 1.searchサブコマンドでレジストリーを検索

```lang:コマンド
# docker search nginx
NAME   DESCRIPTION　             STARS　  OFFICIAL
nginx  Official build of Nginx.　11281　  [OK]
```

※上記のnginxというイメージは、[DokerHubの](https://hub.docker.com/_/nginx?tab=description)から確認できます。

## 2.コンテナーイメージをダウンロード

```lang:コマンド
# docker image pull nginx
Using default tag: latest
latest: Pulling from library/nginx
27833a3ba0a5: Pull complete
ea005e36e544: Pull complete
d172c7f0578d: Pull complete
Digest: sha256:e71b1bf4281f25533cf15e6e5f9be4dac74d2328152edf7ecde23abc54e16c1c
Status: Downloaded newer image for nginx:latest
```
## 3.ダウンロードしたイメージを確認

```lang:コマンド
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              27a188018e18        7 days ago          109MB
```

# コンテナーの起動

## 1.コンテナーを起動

```lang:コマンド
# docker container run -it -d --name nginx01 nginx
81a8933e431158c3eaded6b33fa952e97024dedf9de4f56d157841afdcee0b8e
```
　-dオプションはバックグラウンドで実行

# 起動したコンテナーの確認

## 1.起動したコンテナーを確認

```lang:コマンド
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
81a8933e4311        nginx               "/bin/bash"         2 minutes ago       Up 2 minutes        80/tcp              nginx01
```
## 2.docker container execコマンド

```lang:コマンド:nginxのデフォルト画面の内容を確認してから、抜ける
# docker container exec -it nginx01 /bin/bash
[root@f2f7ecdecaf2 /]# cat /usr/share/nginx/html/index.html
[root@f2f7ecdecaf2 /]# exit
```

# コンテナーの起動、停止と削除

## 1.コンテナーを停止

```lang:コマンド
# docker container stop nginx01
```
## 2.停止したコンテナーを確認

```lang:コマンド
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
81a8933e4311        nginx               "/bin/bash"         10 minutes ago      Exited (0) About a minute ago                       nginx01
```
## 3.コンテナーを削除

```lang:コマンド
# docker container rm nginx01
nginx01
```
## 4.コンテナーを確認

```lang:コマンド
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

# コンテナーに外部からアクセス（ポートフォワード）

## 1.コンテナーを起動

```lang:コマンド
# docker container run -it -d -p 80:80 --name nginx01 nginx
3183b9cd317ad720e11e57e8dbafad4a183a31478cf251cfb7e9292998d2c737
```
　-pオプションで、外部からアクセスされるポート番号:コンテナ側のポート番号を指定 
　-dオプションはバックグラウンドで実行

# 起動したコンテナーの確認

## 1.起動したコンテナーを確認

```lang:コマンド
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
3183b9cd317a        nginx               "nginx -g 'daemon of…"   18 seconds ago      Up 17 seconds       0.0.0.0:80->80/tcp   nginx01
```

## 2.現時点のNginxの画面確認
ブラウザ上に、http://IPアドレス　にアクセスし、Nginxの管理画面が表示されることを確認します。
※Nginxの初期画面となっているはずです。


# Docker ボリュームについての簡単な動作確認
## 1.コンテナーを削除

```lang:コマンド
# docker container stop nginx01
# docker container rm nginx01
nginx01
```

## 2.コンテナーを起動

```lang:コマンド
# docker container run -it -d -p 80:80 -v /root/docker-volume:/usr/share/nginx/html --name nginx01 nginx
3183b9cd317ad720e11e57e8dbafad4a183a31478cf251cfb7e9292998d2c737
```
　-pオプションで、外部からアクセスされるポート番号:コンテナ側のポート番号を指定 
　-dオプションはバックグラウンドで実行
　-vオプションはコンテナーの一部データをDockerホストに永続化

## 3.現時点のNginxの画面確認
ブラウザ上に、http://IPアドレス　にアクセスし、Nginxの管理画面が表示されることを確認します。
※Docker Volume Test!　が表示されているはずです。

## 4.VolumeのMount元のファイル変更後の確認
```lang:コマンド
# vi /root/docker-volume/index.html
<h1>Docker Volume Test!</h1> の内容を<h1>Docker Volume Test Changed!</h1>に変更する
```
ブラウザ上に、http://IPアドレス　にアクセスし、Nginxの管理画面が表示されることを確認します。
※Docker Volume Test Changed!　が表示されているはずです。

# DockerfileからWebサイトをつくる

## 1.コンテナーを削除

```lang:コマンド
# docker container stop nginx01
# docker container rm nginx01
nginx01
```
## 2.Dockerビルド用の内容物を確認

```lang:コマンド
# cat /root/docker-file/Dockerfile
# cat /root/docker-file/index.html
```

## 3.Dockerビルドを実行

```lang:コマンド
# docker image build -t DockerHubアカウント名/nginx02:1.0 /root/docker-file
・
・
Successfully built 0c4e45b86bcd
```

## 4.Dockerイメージを実行

```lang:コマンド
# docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
DockerHubアカウント名/nginx02   1.0                 fd85c23c4735        2 minutes ago       109MB
```

## 5.コンテナーを起動

```lang:コマンド
# docker container run -itd -p 80:80 --name nginx02 DockerHubアカウント名/nginx02:1.0
3ce407416874308af370951ecf56c77b53e2aa405ba20aae51593fd3a0e2e108
```

# コンテナーイメージをDocker Hubにpush

## 1.Docker Hubにログイン

```lang:コマンド
# docker login
Username:
Password:
Login Succeeded
```

## 2.Docker Hubにコンテナーイメージをpush

```lang:コマンド
# docker image push DockerHubアカウント名/nginx02:1.0
Do you really want to push to public registry? [y/n]: y
The push refers to repository [docker.io/DockerHubアカウント名/nginx02]
・
・
1.0: digest: sha256:6c3ff81d5f449b10b56a1bb941578db9ada4b40065f8f08f55f5d58a4b1c85e4 size: 1155
```
## 3.リポジトリーを確認
https://cloud.docker.com/にアクセスし、自分のDockerHubアカウント配下にnginx02:1.0が入っていることを確認します。

# コンテナーイメージを再ダウンロード

最後に全てのイメージと停止コンテナを削除して、pushしたのコンテナーイメージをダウンロードして起動してみましょう。

## 1.停止コンテナの一括削除

```lang:コマンド
# docker container stop $(docker container ls -q)
# docker container rm $(docker container ls -a -q)
# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```
## 2.イメージの一括削除

```lang:コマンド
# docker image rm $(docker image ls -a -q)
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
```

## 3.nginx02のコンテナーイメージをダウンロード

```lang:コマンド
# docker image pull -a DockerHubアカウント名/nginx02
```

## 4.コンテナーを起動

```lang:コマンド
# docker container run -itd -p 80:80 --name nginx02 DockerHubアカウント名/nginx02:1.0
```

## 5.ブラウザ確認
ブラウザ上に、http://IPアドレス　にアクセスし、Nginxの管理画面が表示されることを確認します。
※ Docker build Test!　が表示されているはずです。


参考：https://qiita.com/cyberblack28/items/e3fb956f584094341c62