LoginSignup
5
2

More than 1 year has passed since last update.

DockerとPythonで環境構築

Last updated at Posted at 2022-12-10

はじめに

今回はDockerを使ってPythonの環境を作っていきます。
以前現場でGo言語をDockerで使ったことがあるのですが、その時凄い便利だなと思ったので
今回はPythonの環境をDockerで作っていきます。

環境

macOS Ventura 13.0.1
Docker Desktop for Mac
Docker version 20.10.21
Docker Compose version v2.13.0
VS code

ゴール

今回のゴールはdockerコンテナをbuildして"Hello World"を出力することです。

構成

ディレクトリ構成です。

.
├── Dockerfile
├── docker-compose.yml
├── .env
└── backend
    └── app.py

Docker Desktopのインストール

ご自身の環境に合ったものをインストールして下さい。

スクリーンショット 2022-12-09 23.30.00.png

作業ディレクトリの作成

Dockerfileやdocker-compose.ymlを作成する作業ディレクトリを作成します。

mkdir docker_python && cd docker_python

次に作業ディレクトリでPythonのコードを配置するディレクトリを作成します。
今回はbackendという名前で作成します。

mkdir backend

これでディレクトリの準備は完了しましたのでコードを書いていきます。

Dockerfileの作成

dockerコンテナをbuildするDockerfileを作成します。

Dockerfile
FROM python:3.9.10

RUN mkdir -p /root/backend
WORKDIR /root/backend

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

1行目でPythonのバージョンを指定しています。
WORKDIRはpythonのコードを置く作業場としてコンテナ上に/root/backendディレクトリを作成し、指定します。
これによって以降のRUNはWORKDIRで実行されます。

環境変数の設定

pythonのコードを配置するパスの環境変数を設定します。
.envファイルを作成し、下記のコードを入力します。

BACKEND_PATH=./backend

.envファイルは特殊なファイルで、設定した環境変数はDockerfileや、これから作成するdocker-compose.ymlなどから参照することができます。
パスを環境変数として外出しにすることによって汎用性を持たせています。

docker-compose.ymlの作成

docker-composeコマンドを使う時の設定ファイルです。

docker-compose.yml
version: '3.9'
services:
  python3:
    restart: always
    build: .
    container_name: 'python'
    working_dir: '/root/backend'
    tty: true
    volumes:
      - ${BACKEND_PATH}:/root/backend
  • build
    buildでDockerfileの場所を指定しています。今回はカレントディレクトリを表しています。

  • container_name
    container_name には任意のコンテナ名を指定してください。
    後ほど使用するコンテナ実行コマンド docker -exec -it {コンテナ名} のコンテナ名となります。

  • working_dir
    working_dirはDockerfileのWORKDIRと同じ階層を指定します。コンテナ内のコマンドを実行した時のデフォルト階層になります。

  • volumes
    volumesにはローカルのbackendディレクトリを/root/backendにマウントする記述を書いています。マウントするとローカルのbackend配下のファイルがコンテナから参照されるようになります。

コンテナをビルドします

コンテナをビルドする時は下記のコマンドです。

docker-compose build
docker_python % docker-compose build
[+] Building 7.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 32B                                                                         0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/python:3.9.10                                            7.2s
 => [auth] library/python:pull token for registry-1.docker.io                                               0.0s
 => [1/5] FROM docker.io/library/python:3.9.10@sha256:3aae21920963df3205fba69826cc07fcf2fad91f9e062add9217  0.0s
 => CACHED [2/5] RUN mkdir -p /root/backend                                                                 0.0s
 => CACHED [3/5] WORKDIR /root/backend                                                                      0.0s
 => CACHED [4/5] RUN pip install --upgrade pip                                                              0.0s
 => CACHED [5/5] RUN pip install --upgrade setuptools                                                       0.0s
 => exporting to image                                                                                      0.0s
 => => exporting layers                                                                                     0.0s
 => => writing image sha256:f7bcfd7c1350206351a0fa429539f2b8a50dc5464e89f35b1bed222d46e06d1b                0.0s
 => => naming to docker.io/library/docker_python-python3                                                    0.0s

上記のようなログが出力されれば、docker-compose build 完了です。

コンテナの起動

コンテナの起動は下記コマンドです。

docker-compose up -d

docker-compose upでコンテナを起動します。
後ろの-dオプションはバックグラウンドで起動するという意味です。

docker_python % docker-compose up -d
[+] Running 2/2
 ⠿ Network docker_python_default  Created                                                                   0.1s
 ⠿ Container python3              Started                                                                   0.4s

Pythonの実行

コンテナでpythonのプログラムを実行しましょう。
backendディレクトリにapp.pyというファイルを作成します。
今回は"Hello World"と出力します。

app.py
print("Hello World")

下記コマンドでプログラムを実行します。

docker exec -it python3 python app.py

実行結果がこちら

docker_python % docker exec -it python3 python app.py
Hello World

"Hello World"と出力されていますね。

コンテナの終了

下記のコマンドでコンテナを終了します。

docker-compose down

最後に

今回はDockerでPythonの環境構築を行いました。
AWS Lambdaでdockerコンテナが利用できるので、ローカルのコンテナをそのままAWS Lambdaにのせれますし使いこなせた方がいいかなって個人的に思っています。
今後はフロント部分の追加もしながら、DockerとPythonを使ってCRUDアプリだったり色々機能を増やしていきたいと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2