DockerでPythonの開発環境の構築をしてHello Worldを出力するまでの手順とコードやファイルを解説

Pythonの勉強をするため、Dockerにて開発環境の構築をした際の備忘録です。

Dockerで一度環境を構築さえしてしまえば、新たな勉強をしたい時。

コンテナを作成する際にインストールするライブラリを追記・編集したり、少し手直しをするだけで色々と使い回しが出来るので便利ですよね。是非あなたも有効活用して下さい。

最初に必要なコードを記載し、後にHello Worldを表示させるまでの手順を解説しています。

目次

ディレクトリ構造

$ tree
.
├── Dockerfile
├── app
│   └── hello.py
├── compose.yaml
└── requirements.txt

1 directory, 4 files

Dockerファイルなど重要なファイルはルート上に、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.txt

FROM 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: true

appフォルダの補足説明

appフォルダにpyプログラムを今回入れていますがappフォルダを作らず全てルート上で管理したい場合はvolumes:の記述部分を.:/root/appにしても良いです。

しかしこれはDockerfilecompose.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 --build

Dockerfileのあるディレクトリにて上記のコマンドを叩いてみましょう。

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 ls
user@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 bash

コンテナ名のpythonでもし接続できない場合はpython3やpython-appなどに変えて確認して下さい。接続したいコンテナ名を適切に指定さえ出来ていれば問題なくコンテナに接続できます。

user@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のバージョン確認
python --version

Dockerfileで指定した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実行
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の設定を変更し無い限り、付ける必要ありません。

もし設定ファイルを変更した場合は、再度--buildを付けてコンテナを作り直して下さい。

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の勉強に少しでも集中できれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。

reCAPTCHAの認証時間が切れたため、ページを再読み込みしてください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次