【Python】DockerでPython環境構築(windows)
開発環境:
- windows 11
- Vscode 1.87.2
- Docker 26.1.1
- Docker-compose 2.27.0
- python
1.Vscodeのダウンロード
1-1. 以下のVscodeのダウンロードサイトへ移動し、Windows
をクリックしダウンロードする。
2.Docker-Desktopのインストール
2-1. 以下のサイトでDocker Desktop for Windows -x86_64
をクリックする。
Docker-Desktopに含まれるもの
-
Docker Engine:
Docker image
をもとにアプリケーションを実行するための環境を整える(コンテナ化する)ためのアプリケーション。1つのDockerコンテナを作成する。 -
Docker CLI クライアント:
Dockerコマンド(run
やbuild
を実行するためのコマンドラインツール。 -
Docker Compose:
複数のDockerコンテナを操作および管理するためのアプリケーション。Dockerコンテナが複数存在する環境でも操作がしやすくなる。docker-compose.yaml
という名前のファイル(指示書)に、各コンテナに対する設定をあらかじめ定義しておく。 -
Notary:
コンテナイメージに暗号化署名を付与するためのツール。 -
Kubernetes (K8s):
コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を自動化します。Kubernetesは、多くのコンテナを一貫して管理し、複雑な分散システムを効率的に運用するための強力なツール。 -
Credential Helper:
docker login の認証状態をいい感じに管理してくれるもの。
インストールされたかを確認する方法
docker -v または docker version
docker-compose -v または docker-compose version
3.プロジェクトフォルダの作成
3-1. 以下のコマンドを実行し、プロジェクトフォルダを作成する。
mkdir test-python-project
3-2. 対象のディレクトリに移動する。
cd test-python-project
4.VScodeでフォルダを開く
4-1. 作成したプロジェクトフォルダをVScodeで開く。(作成者を信頼しますをクリックする)
code .
5.Dockerfileを作成
5-1. 手動またはコマンドでVScodeにDockerfile
を作成する。
New-Item dockerfile
5-2. 先ほど作成したDockerfile
に以下のコードを貼り付ける。
# ベースイメージとして公式のPythonイメージを使用
FROM python:3
# 作業ディレクトリを設定
WORKDIR /app
# 必要なライブラリをインストールするためのrequirements.txtをコピー
COPY requirements.txt .
# ライブラリのインストール
RUN apt-get update && apt-get install -y \
libpq-dev \
&& pip install --upgrade pip \
&& pip install -r requirements.txt
# プロジェクトファイルをコンテナにコピー
COPY . .
# ポート8000を開放
EXPOSE 8000
# Django開発サーバーを起動
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
ビルド(build)とは
ソースコード上に問題がないか解析した上で、問題がなければ機械語に翻訳し、それぞれのファイルを組み合わせること。
Dockerfileの構成要素
-
FROM:
ベースイメージを指定します。この場合、Pythonのイメージを使用しています。 -
WORKDIR:
作業ディレクトリを設定します。ここで指定したディレクトリがコンテナ内での作業ディレクトリとなります。 -
RUN:
コマンドを実行します。ここでは、pipのアップグレードと依存関係のインストールを行っています。 -
COPY:
ファイルやディレクトリをホストマシンからコンテナにコピーします。 -
CMD:
コンテナが実行されたときに実行されるデフォルトのコマンドを指定します。
6.requirements.txtファイルの作成
6-1.手動またはコマンドでプロジェクトディレクトリ内にrequirements.txt
を作成。
New-Item requirements.txt
6-2. 以下のコードをファイル内にコピーして貼り付ける。
Django>=3.0,<4.0
psycopg2-binary>=2.8
7.docker-compose.ymlファイルの作成
7-1. 手動またはコマンドでdocker-compose.yml
を作成する。
New-Item docker-compose.yml
7-2. 以下のコードを貼り付ける。
services:
web:
# ディレクトリ(.)にあるDockerfileを使用してコンテナイメージをビルドする
build: .
# コンテナが起動されたときに実行されるデフォルトのコマンド
command: python manage.py runserver 0.0.0.0:8000
# ボリュームの設定を行うために記述する
volumes:
- .:/app
# host_port:container_portという表現で、これにより、コンテナ内のアプリケーションが外部からアクセス可能となる
ports:
- "8000:8000"
# 依存しているサービスが起動している場合にのみ起動(下記はDBが起動してwebが起動という意味)
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
ports:
- "5432:5432"
docker-compose.ymlファイルの中身について詳しく知りたい場合
8.Dockerコンテナのビルド
8-1. 以下のコマンドを実行し、Dockerコンテナをビルドする。
docker-compose build
実行結果
> docker-compose build
[+] Building 0.0s (0/0) docker:default
2024/06/14 21:59:31 http2: server: error reading preface from client //./pipe/docke[+] Building 101.3s (13/13) FINISHED docker:default
=> [web internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 637B 0.0s
=> [web internal] load metadata for docker.io/library/python:3 3.5s
=> [web auth] library/python:pull token for registry-1.docker.io 0.0s
=> [web internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.0s
=> [web 1/7] FROM docker.io/library/python:3@sha256:4584ea46d313a10e849eb7 50.4s
=> [web 2/7] WORKDIR /app 5.6s
=> [web 3/7] COPY requirements.txt . 0.3s
=> [web 4/7] RUN apt-get update 13.7s
=> [web 5/7] RUN pip install --upgrade pip 4.8s
=> [web 6/7] RUN pip install -r requirements.txt 20.5s
=> [web 7/7] COPY . . 0.3s
=> [web] exporting to image 1.4s
=> => exporting layers 1.3s
=> => writing image sha256:dfc0e89e5b8d8922b9127af037e54472fd78847bd36a5875 0.0s
=> => naming to docker.io/library/test-python-web 0.0s
8-2. Docker desktop
にてコンテナが立ちあがったことを確認する。
9.プロジェクトフォルダの作成と編集
9-1. 以下のコマンドを実行し、Djangoプロジェクトを作成する。
docker-compose run web django-admin startproject myproject .
出力結果
9-2. プロジェクトが作成されたことを確認する。
9-3. myproject/settings.py
ファイルを開き、データベース設定を以下のように変更する。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'db',
'PORT': '5432',
}
}
9-4. マイグレーションの実行
docker-compose run web python manage.py migrate
出力結果
docker-compose run web python manage.py migrate
[+] Creating 1/0
✔ Container test-python-db-1 Running 0.0s
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
10.アプリケーションフォルダの作成と編集
docker-compose run web django-admin startapp <app_name>
myproject/
manage.py
reha_navi/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
myapp/ # 新しく作成されたアプリケーション
__init__.py
admin.py
apps.py
models.py
views.py
migrations/
12.プロジェクトフォルダの編集
INSTALLED_APPS = [
...
'myapp', # 新しいアプリケーションを追加する
]
13.コンテナの起動とブラウザ表示確認
10-1. 以下のコマンドを実行し、コンテナを起動する。
docker-compose up
出力結果
> docker-compose up
[+] Running 2/2
✔ Container test-python-db-1 Running 0.0s
✔ Container test-python-web-1 Created 1.3s
Attaching to db-1, web-1
web-1 | Watching for file changes with StatReloader
web-1 | [14/Jun/2024 13:26:40] "GET / HTTP/1.1" 200 10697
web-1 | [14/Jun/2024 13:26:40] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
web-1 | [14/Jun/2024 13:26:40] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
web-1 | [14/Jun/2024 13:26:40] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
web-1 | [14/Jun/2024 13:26:40] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
web-1 | Not Found: /favicon.ico
web-1 | [14/Jun/2024 13:26:41] "GET /favicon.ico HTTP/1.1" 404 2113
v View in Docker Desktop w Enable Watch
10-2. ブラウザhttp://localhost:8000/
にアクセスし、ブラウザの表示を確認する。
14.ローカルの環境設定
11-1. 手動またはコマンドで.env
を作成する。
New-Item .env
11-2. 以下のように設定ファイルを貼り付ける。
DJANGO_SECRET_KEY=your-secret-key
DEBUG=1
POSTGRES_DB=test_platform
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
15..gitignoreファイルの作成
15-1. 手動またはコマンドで.gitignore
を作成する。
New-Item .gitignore
15-2.以下の内容を追記する。
.env
16.REDEME.mdファイルの作成
16-1. 手動またはコマンドで``を作成する。
New-Item REDEME.md
参考
Discussion