Pythonの勉強をするため、Dockerにて開発環境の構築をした際の備忘録です。
Dockerで一度環境を構築さえしてしまえば、新たな勉強をしたい時。
コンテナを作成する際にインストールするライブラリを追記・編集したり、少し手直しをするだけで色々と使い回しが出来るので便利ですよね。是非あなたも有効活用して下さい。
最初に必要なコードを記載し、後にHello Worldを表示させるまでの手順を解説しています。
ディレクトリ構造
$ tree
.
├── Dockerfile
├── app
│ └── hello.py
├── compose.yaml
└── requirements.txt
1 directory, 4 filesDockerファイルなど重要なファイルはルート上に、Pythonのプログラムは分かりやすくするためにappフォルダに入れる構造にしました。
Dockerfile
# Pythonの公式イメージをベースにする
FROM python:3.8
# 必要なパッケージをインストールする
RUN apt-get update && apt-get install -y locales && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ=Asia/Tokyo
ENV TERM xterm
RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txtFROM python:3.8の数値にて入れたいPythonのバージョンを指定して下さい。
今回の例では3.8をインストールしています。
他のバージョンを指定する場合は、上のリンクから指定バージョンを確認しFROM python:3.13.0a2-alpine3.19などに書き換えて下さい。
また必要なライブラリはrequirements.txt内に全て記述するようにして、Dockerfileをなるべく編集しやすくしています。
compose.yaml
services:
python:
restart: always
build: .
container_name: python-app
volumes:
- ./app:/root/app
working_dir: /root/app
tty: true
- build
-
Dockerfileの場所を指定
- container_name
-
コンテナの名前を指定
- volumes
-
ローカルのディレクトリをコンテナ内のディレクトリに指定
- working_dir
-
コンテナ内の作業ディレクトリを指定
- tty
-
コンテナを常時起動するためのおまじない
buildの補足説明
今回Dockerfileの方にてPythonのバージョン指定をしていますので、compose.yamlの方はimage記述の代わりにbuild: .を記述しております。
もしDockerfileを使わずcompose.yaml単体でPythonの立ち上げを行いたい方は以下の記述でもコンテナを立ち上げることが出来ます。
imageのみでコンテナ作成
services:
python:
restart: always
# build: .
image: python: 3.8
container_name: python-app
volumes:
- ./app:/root/app
working_dir: /root/app
tty: trueappフォルダの補足説明
appフォルダにpyプログラムを今回入れていますがappフォルダを作らず全てルート上で管理したい場合はvolumes:の記述部分を.:/root/appにしても良いです。
しかしこれはDockerfileやcompose.yamlもコンテナ上にマウントされるので、やはりappフォルダを作り、個別にマウントする方がスマートでしょう。
ttyの補足説明
ttyの記述は以下の記事で解説していますので、気になる方はそちらを確認して下さい。

requirements.txt
scrapy==2.4.1
selenium==3.141.0
scrapy-selenium==0.0.7
parsel==1.7.0
shubこのファイルはコンテナを立ち上げる際、一緒にインストールしたいライブラリを記述しています。
特定のバージョンを指定したい場合は上記のようにバージョンも併せて記載すれば大丈夫です。
もしバージョン指定をしていない場合は最新バージョンが勝手にインストールされます。
hello.py
print("Hello World")Hello Worldと表示する記述をします。ここは特に解説する必要はないですね。
Dockerイメージ作成、コンテナビルド、コンテナ起動
docker compose up -d --buildDockerfileのあるディレクトリにて上記のコマンドを叩いてみましょう。
user@pc:~/python/python$ docker compose up -d --build
[+] Building 6.3s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3.8 0.0s
=> [1/4] FROM docker.io/library/python:3.8 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 120B 0.0s
=> CACHED [2/4] RUN apt-get update && apt-get install -y locales && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 0.0s
=> [3/4] COPY requirements.txt ./ 0.1s
=> [4/4] RUN pip install --no-cache-dir -r requirements.txt 5.3s
=> exporting to image 0.5s
=> => exporting layers 0.2s
=> => writing image sha256:3f2b6fff09ce13829db046b3995dc2e761d17154a71a6ecbd1fe29cbcdb47a9b 0.0s
=> => naming to docker.io/library/python-python 0.0s
[+] Running 2/2
⠿ Network python_default Created 0.1s
⠿ Container python-app Started 1.2s無事コンテナが立ち上がると上記の様に表示されます。
作られたイメージとコンテナの確認
docker image ls実際に作られたDockerイメージの確認をしてみます。
上記のコマンドを打つと、現在自分の環境で利用できるイメージのリストが取得できます。
user@pc:~/python/python$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
python-python latest 3f2b6fff09ce 8 seconds ago 1.29GBコンテナのリスト取得
docker container lsuser@pc:~/python/python$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cb94c2c8ff0 python-python "python3" 5 minutes ago Up 5 minutes python-appコンテナへの接続
無事コンテナが作成されているのが確認できましたので、コンテナ内に接続しPythonの開発環境が整っているのか確認(コンテナ中の環境に入ってコマンドが打てるか、Pythonのバージョン確認、必要なライブラリが入っているかの確認)をしてみましょう。
docker compose exec python bashuser@pc:~/python/python$ docker compose exec python bash
root@6cb94c2c8ff0:~/app#無事コンテナ内にアクセスできました。
root@6cb94c2c8ff0:~/app#を見るにcompose.yamlにて指定したworking_dir: /root/appにより、コンテナ内のroot/appにちゃんと接続出来ているのが確認できます。
次はPythonがちゃんとインストールされているかバージョン確認をしてみましょう。
Pythonのバージョン確認
python --versionDockerfileで指定したPythonのバージョンがちゃんとインストールされているのが確認できました。
root@6cb94c2c8ff0:~/app# python --version
Python 3.8.18次はrequirements.txtにてインストールしたライブラリがちゃんと入っているか確認してみましょう。
ライブラリの確認
python -m pip listリストを出力すると沢山のライブラリ名が表示されます。
root@6cb94c2c8ff0:~/app# python -m pip list
Package Version
------------------------- ------------
anyio 4.2.0
argon2-cffi 23.1.0
argon2-cffi-bindings 21.2.0
arrow 1.3.0
astroid 2.5.8
async-lru 2.0.4
attrs 23.2.0
...目的のライブラリを探すのが大変な場合は、インストールしたライブラリのコマンドを直接叩いて確認でも構いません。
scrapy今回の例ではscrapyを確認しています。
無事scrapyが指定したバージョンでインストールされているのが確認できました。
root@6cb94c2c8ff0:~/app# scrapy
Scrapy 2.4.1 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
commands
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command次はローカルのappフォルダとコンテナ先のappフォルダが同期されているのか確認してみましょう。
appフォルダの同期確認
lsディレクトリ内を確認してみるとローカルのappと同期されており、ちゃんとhello.pyが確認できました。
root@6cb94c2c8ff0:~/app# ls
hello.pyさて次は今回の目標である、Hello Worldを表示してみましょう。
Hello Worldを表示してみる
接続したコンテナ内にhello.pyがあるのが確認できましたので、これを走らせてみましょう。
python hello.py上記のコマンドにて無事Hello Worldが確認できました。
root@6cb94c2c8ff0:~/app# python hello.py
Hello WorldこれにてPythonの開発環境(構築)は問題ないと確認できました。
後はコンテナの削除や再起動など、後の簡単な作業を確認してみましょう。
コンテナ内から切断
exit上記コマンドで無事コンテナ内から脱出できました。
root@6cb94c2c8ff0:~/app# exit
exit
user@pc:~/python/python$ 次はコンテナを削除してみましょう。
コンテナの削除
常にコンテナを立ち上げているとPCのメモリなどを圧迫するため、必要ない時やプログラミングを終える時はコンテナを削除しておきましょう。
docker compose downちゃんと削除出来れば以下の様にRemovedと出ます。
user@pc:~/python/python$ docker compose down
[+] Running 2/2
⠿ Container python-app Removed 11.0s
⠿ Network python_default Removed 0.4sコンテナの再起動
再度コンテナを立ち上げたい時は以下のコマンドで簡単に立ち上がります。
docker compose up -d初めてコンテナを作成する時は--buildコマンドを付けていましたが、二回目以降はDockerfileの設定を変更し無い限り、付ける必要ありません。
user@pc:~/python/python$ docker compose up -d
[+] Running 2/2
⠿ Network python_default Created 0.1s
⠿ Container python-app Started 1.1sあとがき

DockerにてPythonの開発環境を作る説明でした。
覚えてしまえば簡単なのですが、Dockerって何?という状況だと色々と記述方法を調べて、それが正しいのか、確認も含めて大変なんですよね。
一度しっかりと起動できるファイルを作成できてしまえば、後は肉付けや修正をしていけば使い回しが簡単に出来るので、Pythonの勉強と併せてDockerの勉強もしていきたいですね。
今回のDockerにてPythonの開発環境が完成しましたので、Pythonの勉強に少しでも集中できれば幸いです。


コメント