docker 復習 イメージ作成～コンテナ起動

# 初めに
最近 python や Vue.js の勉強ばかりで EC2 や docker を使っていなかったのでイメージ作成からコンテナ起動までの復習をしてみた。

# EC2インスタンス起動
イメージは Amazon Linux2 を使用。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/99537ce8-121b-f4cb-4e98-21d0895d9362.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/01f52a93-0f02-57de-ee58-e2bc23e7b78c.png)

# docker コマンドをインストール

公式ドキュメントをそのままコピペしてインストール。

```
$ sudo yum update -y
$ sudo amazon-linux-extras install docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
```

# ビルド～コンテナ起動

EC2インスタンスログイン後、`~/my_dir` で Dockerfile まで作成。

```
$ mkdir my_dir
$ cd my_dir
$ vi enigma.py
$ vi test.sh
$ vi Dockerfile
```

- enigma.py

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/430f8db6-46c3-6dad-3f1d-8efbb5b87915.png)

- test.sh

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ca4e78d7-918d-2dc9-5138-eacb50a320d9.png)

- Dockerfile

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/42ee960b-d3c4-7c85-e92d-98b0a2e55b9f.png)

ビルドする。

```
$ docker build -t original_image .
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/bd75adc2-5279-2008-27ad-d122d563c51c.png)

マウント用に ディレクトリ `mnt_dir` を作成し、ファイルを移動する。 

```
mkdir mnt_dir
$ ls
Dockerfile  enigma.py  mnt_dir  test.sh
```



```
$ mv `ls | grep -v 'Docker' | grep -v 'mnt'` ./mnt_dir/
$ ls ./mnt_dir/
enigma.py  test.sh
```

docker 起動。

```
$ docker run -it -v `pwd`/mnt_dir:/mnt original_image /bin/bash
```

マウントできていることを確認。

```
root@67ac0dab37f2:/# ls /mnt/
enigma.py  test.sh
```

python ファイル実行。

```
root@67ac0dab37f2:/# python3 /mnt/enigma.py | tee /mnt/output.txt
FRZXI JFDRX. XV SYXU LV BZEXX. SJXO AG NLDE KEN.
HELLO WORLD. MY NAME IS ALICE. NICE TO MEET YOU.
root@67ac0dab37f2:/# cat /mnt/output.txt
FRZXI JFDRX. XV SYXU LV BZEXX. SJXO AG NLDE KEN.
HELLO WORLD. MY NAME IS ALICE. NICE TO MEET YOU.
```

`Ctrl` + `P` + `Q` で起動した状態を保ちつつコンテナを抜ける。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
67ac0dab37f2        original_image      "/bin/bash"         3 minutes ago       Up 3 minutes                            recursing_wozniak
```

python 実行も問題なし。

```
$ cat ./mnt_dir/output.txt
FRZXI JFDRX. XV SYXU LV BZEXX. SJXO AG NLDE KEN.
HELLO WORLD. MY NAME IS ALICE. NICE TO MEET YOU.
```

# コンテナ実行時にシェル実行

Dockerfile に `CMD` を追加する。

```
$ vi ./mnt_dir/test.sh 
$ vi Dockerfile
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/cd768c6f-5f31-b93f-7a27-1aa0f85e5a77.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6555761f-f284-edc4-1b4f-b32da9b68f83.png)

ビルド再実行。その後、何回かコンテナを起動してみる。

```
$ docker build -t original_image .
$ docker run -v `pwd`/mnt_dir:/mnt original_image
$ docker run -v `pwd`/mnt_dir:/mnt original_image
$ docker run -v `pwd`/mnt_dir:/mnt original_image
$ docker run -v `pwd`/mnt_dir:/mnt original_image
```

シェルが実行されていることを確認。

```
$ ls ./mnt_dir/
enigma.py                       mnt_file_20210116-05:25:01.txt  mnt_file_20210116-05:29:38.txt  test.sh
mnt_file_20210116-05:24:47.txt  mnt_file_20210116-05:25:47.txt  output.txt
```