はじめに
UdemyでDockerの学習を進めている最中で、途中経過をアウトプットしたいと考えています。
今回は、
pythonが実行できるコンテナをdocker-composeを使って起動したいと思います。
また、ファイルシステムを共有して、pythonファイルやcsvデータをホストPCでも管理出来るようにします。
環境
- Windows10
- Docker version 24.0.6
各ファイル
以下の3つのファイルを同じフォルダ階層に作成します。
Dockerfile
今回はpythonのベースイメージを使用し、requirements.txtから必要なライブラリをインストールします。
FROM python:3
RUN apt-get update
WORKDIR /work
COPY requirements.txt ./
RUN pip install -r requirements.txt
CMD ["/bin/bash"]
requirements.txt
とりあえずnumpyとpandasをインストール
numpy
pandas
docker-compose.yml
docker-compose.ymlは以下のときに使います。
- docker runコマンドが長くなるとき
- 複数のコンテナをまとめて起動するとき
構成は以下の通りです
- 今からDocker composeを書きます宣言
- service1
- service1のパラメータ
- service2のパラメータ
- service2
- service2のパラメータ
- service2のパラメータ
- service1
以下のdockerコマンドをdocker-compose.ymlに書きます。
docker build .
docker run -it -v .:/work [イメージ]
version: '3'
services:
work-python:
build: .
volumes:
- '.:/work'
tty: true
stdin_open: true
ファイルシステムの共有
volumes:
- '.:/work'
docker run -it
の-it
の部分がこれ↓
tty: true
stdin_open: true
main.py
import pandas as pd
df = pd.read_csv('train.csv')
print(df)
train.csv
Docker composeを使ってコンテナを起動
作業フォルダには以下のようになっています。
root/
├Dockerfile
├requirements.txt
├docker-compose.yml
├train.csv
└main.py
rootディレクトリに移動し、docker-compose up -d
を実行します。
今回はバックグラウンドで動かしておきたいため、デタッチドモード-d
を引数に指定します。
docker-compose up -d
docker-compse exec [service] bash
でコンテナに入る
docker-compose exec work-python bash
lsコマンドの結果でファイルシステムが共有されていることを確認できました。
root@626584394f9f:/work# ls
Dockerfile docker-compose.yml main.py requirements.txt train.csv
main.pyを実行できることも確認します。
root@626584394f9f:/work# python main.py
id Age Gender T_Bil D_Bil ALP ALT_GPT AST_GOT TP Alb AG_ratio disease
0 0 60 Male 2.9 1.3 170.9 42.1 37.1 5.5 2.9 1.01 1
1 1 28 Female 0.7 0.1 158.8 26.0 23.9 6.4 3.7 1.36 0
2 2 60 Male 23.1 12.5 962.0 53.0 40.9 6.8 3.3 0.96 1
3 3 20 Male 1.0 0.5 415.9 33.9 39.0 7.0 3.8 1.31 0
4 4 44 Female 0.6 0.3 152.9 40.9 42.0 4.5 2.1 1.04 0
.. ... ... ... ... ... ... ... ... ... ... ... ...
886 886 31 Male 0.7 0.3 164.2 30.0 29.0 6.2 3.0 1.07 0
887 887 57 Female 1.0 0.3 130.1 23.9 25.0 6.9 4.1 1.28 1
888 888 54 Female 23.5 12.7 574.0 43.1 47.0 7.2 3.4 0.84 1
889 889 24 Male 1.2 0.4 130.0 23.2 42.0 8.1 3.9 0.87 1
890 890 57 Male 1.9 0.8 270.8 40.8 50.0 6.0 2.8 0.94 0
[891 rows x 12 columns]
dockerコマンドとdocker-composeコマンド
dockerコマンド | docker-composeコマンド |
---|---|
docker build [build context] | docker-compose build |
docker run [image] | docker-compose up |
docker ps | docker-compose ps |
docker exec [container] | docker-compose exec [service] |
便利コマンド
buildしてrun
docker-compose up --build
stopしてrm
docker-compose down
これだけだとコマンドからしかpythonが実行できないのですが、pycharmやvscodeから実行出来るように出来るともっと便利です。