はじめに
Windows10
Docker Desktop
Dockerについて
そもそものDockerについて、またインストール方法は以下の記事で紹介しています。
はじめに プログラミングを行う際に実行環境を構築する必要がありますが、普段利用しているローカルPCに直接インストールしてしまっては、トライアンドエラーを繰り返すうちに不要なアプリケーションが積み重なり動作が不安定にな[…]
はじめに Windows環境でLinuxのコマンドが利用できるWSL2についてインストールおよび利用方法を説明します。 Linuxコマンドが使えるようになると、様々なプログラミング言語や開発に利用できますので非常に[…]
docker-composeの簡単な例
最初にdocker-composeを用いて1コンテナを構成してみようと思います。
以前、作成したnumpyを使って簡単な数学の解を求めるpythonプログラムを実行する環境を構築します。
フォルダ構成
今回の例では以下のようなファイル構成となっています。
py_test/
|-- docker-compose.yml
|-- Dockerfile
|-- requirements.txt
`-- src/
`-- calc.py
Dockerfileを作成する
まずはDockerfileの中身を記述していきます。まずは記述内容として以下となります。
FROM python:3.9.8
RUN apt update -y && apt upgrade -y && apt autoremove -y
RUN apt install -y vim
# タイムゾーン変更
ENV TZ=Asia/Tokyo
WORKDIR /root/src
ADD requirements.txt /root/src
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install -r requirements.txt
今回はpythonのイメージから実行環境をPullしています。
pythonのソースコードを配置するためのディレクトリとして/root/srcを用意しています。
requirements.txt でnumpyをインストールしています。
numpy==1.23.4
docker-compose.ymlを作成する
docker-compose コマンドを使った時の設定ファイルである docker-compose.yml
を作成します。
こちらに各コンテナの構成情報を記載していきます。
version: "3"
services:
python3:
restart: always
build: .
container_name: "python3"
working_dir: "/root/src"
tty: true
volumes:
- ./src:/root/src
versionは、docker-compose.ymlのファイルフォーマットのバージョンを表しています。とりあえず現時点では3が安定して利用できるようです。
serviceは、コンテナの単位です。次の行でpython3を指定していますが、これがserviceの名前になります。そのため、例えばWEBサーバー、DBサーバーが必要な場合は、それぞれservicesの下に名前を付けて記載します。この名前はコンテナ間で連携する際に利用することができます。
restart: alwaysはホストOSやDockerデーモンが起動したときにコンテナを自動的に起動してくれるようになります。PC起動時や再起動したときにコンテナを起動する必要がある場合は指定しましょう。
build: .はDockerfileの参照場所を指定します。今回はdocker-compose.ymlと同じ階層に配置しているので、.となります。
container_nameは起動するコンテナの名前を指定することができます。この後コンテナでコマンドを実行する際に利用します。
working_dirはDockerfileのWORKDIRと同じ階層を指定しています。コンテナでコマンドを実行した際のデフォルトのディレクトリとなります。
ttyはTrueにすることでコンテナ起動した後に継続して起動し続けることができます。docker runで-itというオプションを指定したと思いますが、この-tオプションのことです。
volumesはローカルPCとコンテナ間でフォルダ共有ができるようになります。今回はローカルPCのsrcフォルダをコンテナ内の/root/srcにマウントしています。
イメージをbuildする
それでは、作成したdocker-compose.ymlからイメージをbuildして作成していきます。
PowerShellでdocker-compose.ymlが保存されている階層に移動し、以下のコマンドを実行する。
docker-compose build
Dockerのイメージが作成されたことが確認できます。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python-python3 latest 1b64577149af 42 minutes ago 1.24GB
コンテナの起動
次にdocker-composeで作成したイメージからコンテナを起動します。
docker-compose up -d
docker-compose upでコンテナの起動ができます。ただしこの状態で起動するとフォアグランドで起動するため、PowerShellでの操作ができなくなってしまいます。
そこで-dオプションをつけることでバックグラウンドで起動することができます。
起動したコンテナの状態を確認するには、以下のコマンドを実行します。
docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
python3 "python3" python3 running
STATUSがrunningとなっているので、起動していることが確認できます。
コンテナ内のコマンド実行
起動したコンテナ内のコマンドを実行するには以下のように行います。
docker exec -it python3 pwd
/root/src
docker exec -itに対象のコンテナ名を指定し、最後に実行したいコマンドを入力します。
今回の場合は、pwdコマンドなので、カレントディレクトリの場所が表示されています。/root/srcはworking_dirで指定したディレクトリですので正しい結果が返ってきているのが確認できます。
最後のコマンド部分をbashコマンドに変更することで、対象コンテナのプロンプトに変わりコマンド操作が可能となります。
docker exec -it python3 bash
root@b6abc7d867f5:~/src#
pythonコマンドを実行する
pythonプログラムコードを実行します。ローカルPCの./srcフォルダに以下のpythonプログラムコードcalc.pyを配置します。
import numpy as np #numpyパッケージを利用することの宣言
print("root2 : " + str(np.sqrt(2))) #ルート2
print("e : " + str(np.e)) #自然対数e
print("pi : " + str(np.pi)) #円周率
print("log2 : " + str(np.log(2))) #log2
calc = np.roots([1,2,-8]) #2次方程式
print("X^2+2X-8 : " + str(calc))
次に、依存パッケージであるnumpyがインストールされているか確認します。
pip list
Package Version
---------- -------
numpy 1.23.4
pip 22.3
setuptools 65.5.0
wheel 0.37.0
numpyが存在しているので、requirements.txtからインストールされていることが確認できます。
pythonプログラムコードも問題なく実行できることが確認できます。
python calc.py
root2 : 1.4142135623730951
e : 2.718281828459045
pi : 3.141592653589793
log2 : 0.6931471805599453
X^2+2X-8 : [-4. 2.]
コンテナの停止
docker-composeで起動したコンテナを停止するには以下のコマンドを実行します。
docker-compose stop
コンテナ一覧を確認すると停止していることが確認できます。
docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
python3 "python3" python3 exited (137)
イメージ・コンテナの削除
最後に作成したイメージ、コンテナの削除方法です。
以下のコマンドを実行するとコンテナを終了します。
docker-compose down
コンテナ一覧を確認すると削除されていることが確認できます。
docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
しかし、イメージについては削除されません。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python-python3 latest 1b64577149af About an hour ago 1.24GB
イメージも削除したい場合は、–rmi allオプションをつけると削除が可能です。
docker-compose down --rmi all
まとめ
はじめに 前回、docker-composeを使って、環境構築および構成情報をファイルとして作成しコンテナ起動までを行いました。 [sitecard subtitle=関連記事 url=https://mi-suk[…]
出版社:技術評論社
出版社:日経BP
出版社:インプレス