Docker で LAMP 環境を作ろう　第 5 回

## ここまで使ったコマンドまとめ

この連載では、現在 Xampp を使って構築されている開発環境を Docker 環境に移築することを目標に、Docker Desktop の導入から、複数のコンテナに（ポート指定ではなく）URL でアクセスするテストを行ってきました。
今回は、今まで使ったコマンドをいったんまとめておきます。
詳しくは [Docker-Docks-ja Docker コマンド](https://docs.docker.jp/engine/reference/commandline/) 参照してください。
# docker build
```
$ docker build --tag bulletinboard:1.0 .
```
サンプルの掲示板を作るときに使ったコマンドです。
1. --tag bulletinboard:1.0 は、name:tag 形式でイメージの名前とオプションのタグを指定します
2. 最後の「.」はイメージを構築するのに必要なファイル（Dockerfile, それ以外のファイル = context）が置かれた場所で、今回の例では Dockerfile などがあるディレクトリに移動して実行してからコマンド実行しているので「.」になっています。

さて、docker build といえば、Dockerfile も避けては通れないところ。なのですが、頼みの綱の
[Docker-Docks-ja Dockerfile リファレンス](https://docs.docker.jp/engine/reference/builder.html)
を見ても、どう書けばいいのかさっぱりわかりません。
これはもう少し修行を積んでから再アタックする必要がありそうです。
# docker run
```
$ docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
```
1. --publish 8000:8080 これは以前も書いたけど、localhost:8000 へのリクエストを起動したコンテナの 8080 番へ渡す、という指定
2. --detach はコンテナをバックグラウンドで実行。起動に成功するとコンテナ ID を表示して終了する。起動後、シェルでアクセスしたときなどは -it 
3. --name bb はコンテナに bb という名前を付ける
4. bulletinboard:1.0 は起動するイメージを name:tag 形式で指定

これでコンテナの起動はできました。起動したコンテナの確認は終了は ps, kill を使います。
# docker ps, docker kill, docker start
```
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS        PORTS                                NAMES
f4e8523b239f   bulletinboard:1.1   "docker-entrypoint.s…"   3 hours ago    Up 3 hours    0.0.0.0:8001->8080/tcp               bb1
400310f54ff6   bulletinboard:1.0   "docker-entrypoint.s…"   5 hours ago    Up 5 hours    0.0.0.0:8000->8080/tcp               bb
$ docker kill 400
400
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED        STATUS        PORTS                                NAMES
f4e8523b239f   bulletinboard:1.1   "docker-entrypoint.s…"   3 hours ago    Up 3 hours    0.0.0.0:8001->8080/tcp               bb1
6d224cd173a5   vm_mysql            "docker-entrypoint.s…"   44 hours ago   Up 44 hours   33060/tcp, 0.0.0.0:13306->3306/tcp   vm_mysql_1
```
docker ps -a とすれば、起動していないコンテナも表示されます。
ps で終了したいコンテナの ID を取得して kill で ID を指定。
ID はすべて書く必要はなく、上の例なら docker kill 4 だけでも OK 。

では kill したコンテナを再起動したときは？　もう一度 run コマンドを実行すると

```
$ docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
docker: Error response from daemon: Conflict. The container name "/bb" is already in use by container "400310f54ff66965cabb56d0e1cd65414f076b83b08edf1ee8ab7f4615ec934a". 
You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
```
同じ名前は使えない、と怒られます。
docker run は「create(コンテナの作成)」＋「start(コンテナの実行)」なので、一度 run で作ったものは start で起動できます。

```
$ docker start bb
```
bb は 4 (コンテナ ID 数文字)でも大丈夫。

# docker exec
連載記事中には出てきてませんが、実際に使うことの多いコマンド。
起動中のコンテナに入るのに使います

```
$ docker exec -it 400 bash
root@400310f54ff6:/usr/src/app# ls -al
total 116
drwxr-xr-x  1 root root  4096 Dec 30 00:35 .
drwxr-xr-x  1 root root  4096 Dec 30 00:35 ..
-rwxr-xr-x  1 root root    22 Mar  8  2021 .gitignore
-rwxr-xr-x  1 root root   127 Mar  8  2021 Dockerfile
-rwxr-xr-x  1 root root  1131 Mar  8  2021 LICENSE
-rwxr-xr-x  1 root root  1239 Mar  8  2021 app.js
drwxr-xr-x  2 root root  4096 Dec 30 00:35 backend
drwxr-xr-x  3 root root  4096 Sep 19 08:04 fonts
-rwxr-xr-x  1 root root  1826 Mar  8  2021 index.html
drwxr-xr-x 91 root root  4096 Dec 30 00:35 node_modules
-rw-r--r--  1 root root 57138 Dec 30 00:35 package-lock.json
-rwxr-xr-x  1 root root   572 Mar  8  2021 package.json
-rwxr-xr-x  1 root root   888 Mar  8  2021 readme.md
-rwxr-xr-x  1 root root  1071 Mar  8  2021 server.js
-rwxr-xr-x  1 root root  1227 Mar  8  2021 site.css
root@400310f54ff6:/usr/src/app# exit
exit
```
今回で導入編は完了。
次回以降では、docker-compose を使って実際に LAMP 環境を構築していきます。


## 参考URL

[とほほのDocker入門](https://www.tohoho-web.com/docker/)
90年代から続く、技術系老舗サイト。 杜甫々さんは何歳なんだろう。お世話になってます。

[Docker で LAMP 環境を作ろう　第 1 回](https://qiita.com/shindomasayuki/items/4a7fea6dad00e0be84bc)
[Docker で LAMP 環境を作ろう　第 2 回](https://qiita.com/shindomasayuki/items/a786c43dc506bdbc4c13)
[Docker で LAMP 環境を作ろう　第 3 回](https://qiita.com/shindomasayuki/items/b99b13625558df12cb72)