S3イベントをトリガーにFargateでタスクを実行する(全体)をするため、Dockerの基礎知識(前編)ではDockerを使うための環境構築まで行った。
今回はDockerを利用するための基本機能を最低限記載する。
※理解しやすいようになるべく順番に記載する。
docker run
dockerイメージを起動するコマンド。
例)
docker run hello-world
このコマンドでは以下の処理を行っている。
1.hello-world用のDockerイメージをレジストリから取得
2.Dockerイメージからコンテナを作成
3.コンテナを起動し、 hello-worldというアプリケーションコードを実行する。
※コンテナは実行環境を指す。
※Dockerイメージは雛形のようなものコンテナ本体ではない。
docker image build
dockerイメージを作成するコマンド。
実行するアプリコードとDockerfileを用意し、コマンドを実行する事によりDockerイメージを作成できる。
例)
docker image build -t sample/pythonpg:latest .
-t sample/pythonpg:latest は、タグ名:latest、イメージ名: sample/pythonpg でカレントディレクトリの構成でdockerイメージを作成する。
カレントディレクトリは以下のような構成を作成。
PYTHON-DOCKERフォルダの中に、Dockerfile、pythonの実行コード、シェルを配置。
#minocondaのベースイメージを指定
FROM continuumio/miniconda3
#printarg.pyを ./にコピーする
COPY printarg.py ./
COPY printarg.sh ./
# 作成したいPythonのバージョンでConda仮想環境を作成
#conda環境を切り替えてchemodelにインストールする
#dockerの仕様上、別のレイヤーでコマンドが実行されるため. /root/.bashrcを追加。
#これを追加しないとconda activate chemodelが上手く動かない
RUN . /root/.bashrc && \
conda update -n base -c defaults conda && \
conda create -n chemodel python==3.8 && \
conda activate chemodel && \
conda install -c rdkit -c conda-forge rdkit --override-channels
#pythonをコンテナが起動するときに実行する。
#コマンドは複数行書いて動かないため、シェルを呼び出す
CMD ["sh", "./printarg.sh"]
from rdkit import Chem
print("処理を実行しました")
#!/bin/bash
. /root/.bashrc
conda activate chemodel
python printarg.py
docker image ls
imageを一覧表示する。(「docker image build」で作成したイメージも確認できる。)
例)
docker container run
dockerコンテナの作成と起動を行う。
また、引数を追加することにより起動後に追加や変更動作も指定できる。
例)
docker container run --name pythonpg sample/pythonpg:latest
dockerコンテナの作成と起動を行う。
–name pythonpgは起動する際につける起動するコンテナ名を「pythonpg」と指定するという意味。
sample/pythonpg:latest はイメージ名とタグ名を指している。
以下、実行結果。
docker container run -it --name pythonpg sample/pythonpg:latest
コンテナ起動とともに、コンテナにログインする。
docker container run pythonpg python printarg.py
コンテナを起動し、引数の「python printarg.py」コマンドを実行する。
※今回の場合は、「printarg.sh」があるため、引数で指定した分も加えて起動時に 「python printarg.py」 が合計2回実行される事になる。
docker container rm コンテナ名
作成したコンテナを削除する。
>docker container rm pythonpg
まとめ
コンテナイメージの作成、コンテナ起動、コンテナの中のプログラムを実行する所までできた。
condaを利用していたため、色々ハマった点はあったため、その点についてはこちらのサイトでまとめる。
次回は、登録できたDokcerイメージを利用して、ECSで起動してみる。
コメント