Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる

## はじめに

Docker勉強メモ
- [Docker勉強メモ① DockerインストールからHelloWorld](https://qiita.com/zgw426/items/c0687bdfd3c58eaaac33)
- [Docker勉強メモ② Dockerイメージ作ってみる](https://qiita.com/zgw426/items/b480ae298e1f92cf1418)
- [Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる](https://qiita.com/zgw426/items/bea786da9128af30937f) **←ココ**
- [Docker勉強メモ④ コンテナ間通信](https://qiita.com/zgw426/items/bb42f6bd17707de354b9)
- [Docker勉強メモ⑤ ネットワーク通信](https://qiita.com/zgw426/items/9a76f48edb6f7e34dffe)


## やること

Dockerファイルを作ってDockerイメージを作成する

参考
[Docker入門（第四回）～Dockerfileについて～](https://knowledge.sakura.ad.jp/15253/)


手順概要
　centosのDockerイメージをDockerHubから取得
　tomcatのtar.gzをコピーしたcentosDockeイメージを作成( -> tomcat:7)
　tomcat:7 を使いDockerイメージを作るDockerfileを作る
　DockerfileでDockerイメージをビルド
　ビルドしたDokcerイメージでコンテナ起動


おさらい

centos7 (ami-045f38c93733dd48d)にDockerインストール

```console:ホスト
$ sudo yum-config-manager --enable Extra
$ sudo yum install container-selinux
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ ll /etc/yum.repos.d/
$ sudo yum install docker-ce
$ sudo yum list installed | grep docker-ce
$ sudo systemctl start docker
$ sudo systemctl status docker
```

## centosのDockerイメージをpull

```console:ホスト
$ docker pull centos:7
$ mkdir -p /root/tomcat-container/logs
$ docker run -it -d -p 18080:8080 -v /root/tomcat-container/logs:/share/logs --name tomcat centos:7
```



## 1.準備

#### 1-1.Dockerファイルを作る

Dockerfileを作成する

nanoを使いたのでインストール

```
yum install nano
```

Dockerfileを作る

```
mkdir cent-tomcat
cd cent-tomcat
touch Dockerfile
sudo nano Dockerfile
```

Dockerfileの中身

```dockerfile:Dockerfile

FROM centos:7
RUN yum install -y java
ADD files/apache-tomcat-9.0.31.tar.gz /opt/
CMD [ "/opt/apache-tomcat-9.0.31/bin/catalina.sh", "run" ]
```

#### 1-2.apacheファイルを用意する

Dockerファイルと同じ階層に `files` フォルダを作成し、apacheファイルを格納する

ファイル構造はこーなる

```console:ホスト
[centos@ip-172-31-0-62 cent-tomcat]$ tree
.
├── Dockerfile
└── files
    └── apache-tomcat-9.0.31.tar.gz
```

## 2.Dockerファイルを私用して、Dockerイメージ作成


```
$ cd <Dockerfileが存在するディレクトリ>
$ docker build -t tomcat:1 .
$ docker images
```

Dockerイメージが作成されていれば成功


```
[centos@ip-172-31-5-50 cent-tomact]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              1                   1a24f3cd25e8        17 seconds ago      502MB
centos              7                   5e35e350aded        3 months ago        203MB
```

ベースにしたcentosのイメージも作成された

※余談※
ベースにしたcentosのDockerイメージだけ削除はできない。依存関係があるんだ、へぇー

```
[centos@ip-172-31-5-50 cent-tomact]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
tomcat              1                   44f9a4e385f1        About a minute ago   502MB
centos              7                   5e35e350aded        3 months ago         203MB
[centos@ip-172-31-5-50 cent-tomact]$ sudo docker rmi 5e35e350aded
Error response from daemon: conflict: unable to delete 5e35e350aded (cannot be forced) - image has dependent child images
```



## コンテナ起動する

```console:ホスト
$ docker run -it -d --name tomcat-1 -p 18083:8080 tomcat:1
```

```console:ホスト
[centos@ip-172-31-0-62 cent-tomcat]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                     NAMES
e9814858bec8        tomcat:1            "/opt/apache-tomcat-…"   7 seconds ago       Up 6 seconds                     0.0.0.0:18083->8080/tcp   tomcat-1
94d9fd8f516a        centos:7            "/bin/bash"              2 hours ago         Exited (137) About an hour ago                             tomcat
```

```console:ホスト
$ docker exec -it tomat-1 bash
```

ホストで以下のサイトが開けば成功

http://localhost:18083/