初めに
最近 python や Vue.js の勉強ばかりで EC2 や docker を使っていなかったのでイメージ作成からコンテナ起動までの復習をしてみた。
EC2インスタンス起動
イメージは Amazon Linux2 を使用。
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
- test.sh
- Dockerfile
ビルドする。
$ docker build -t original_image .
マウント用に ディレクトリ 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
ビルド再実行。その後、何回かコンテナを起動してみる。
$ 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