Docker入門

Dockerの開発環境をローカル環境に構築する手順や、 Docker を使ったプログラムの記述方法や実行までをサンプルを使いながら順に学習していきます。

flaskサーバーをDockerで建てる【Docker,Flask,Dockerfile,Python】

本サイトについて

目的:本サイトではDockerによる環境構築方法を学びます。

  • やること:

    1. Dockerのインストール(事前準備推奨)
    2. Dockerfile作成(ソースコードをダウンロードでもいいが、手作業で書いた方が理解が進みます。)
    3. pythonコード作成
    4. buildコマンドの実行と解説
    5. runコマンドの実行と解説
    6. flaskサーバーの動作確認
  • やらないこと:

    1. Docker Enginについての詳しい解説
    2. pythonの詳しい解説
  • 対象者:簡単なlinuxコマンドを扱えることを前提とします。

  • 優先する内容:

    • スピード
    • 手を動かす
  • 優先しない内容:
    • 講義
    • 理屈

本イベントでは参考書籍として、オライリー書籍出版のDocker入門を用いてます。

注意点

使用するPCはWindowsでもMacでもLinuxでも構いません

Docker for Desktopを使用しますので、事前にダウンロードをお願いいたします。

今回行うのは、ソースコードのcloneからpythonのhelloworldまで実施いたします。

Dockerのインストール

Dockerのインストールは以下のサイトを参考が参考になると思います。

DockerでのpythonによるHello world

ソースコードを手っ取り早く取得したい人

以下のGithubからソースコードを取得してください。

Github:https://github.com/kawadasatoshi/PythonImages

または、gitコマンドでcloneしてもいいです。

git clone https://github.com/kawadasatoshi/PythonImages.git

Dockerfileの作成

まずはDockerfileという名前でファイルを作成し、次のコードを入力しましょう。

# python version number:3.9.16
FROM python:3.9.16

# code ... directory for python codes.
WORKDIR /code

# copy localcode to container image.
COPY ./code /code

# upgrade pip command
RUN pip install --upgrade pip 

# install python lib 
RUN pip install -r requirements.txt

CMD ["python", "index.py"]

codeディレクトリを作成し、ソースコードを配置

codeという名前のディレクトリをDockerfileと同じ場所に作りましょう。

そして、この中にソースコードを入れていきます。

今回はcodeの中にmain.pyというpythonコードを作ります。

内容は以下のとおりです。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
  return "<h1>Hello, Flask!</h1>"

if __name__ == "__main__":
  app.run(host="0.0.0.0", port=80, debug=True)

こちらのコードでは、htmlのh1タグで"hello Flask!"と出力するコードとなってます。

requirements.txtも作成

次に、requirements.txtを作成します。

このファイルは、インストールするpythonのライブラリーを指定します。

実際にDockerfileを見ると、RUN pip install -r requirements.txtrequirements.txtを指定して、pythonのライブラリーをインストールしていることがわかると思います。

今回はPythonでWebサービスを作るために必要なFlaskサービスを追記します。

Flask

buildコマンド実行

ここまでできたら、buildコマンドでDockerfileからイメージファイルを作成します。

docker image build -t flask .
  • docker image buildでは、dockerイメージをビルドし、コンテナを作成する基本的なコマンド

  • -tフラグで、flaskという名前をつけています。

runコマンド実行し、Flaskサーバーを起動する

先ほど作成した、flaskイメージコンテナをrunします。

docker run -it -p 80:80 -v ./code:/code flask bash
  • docker runは、dockerコンテナを実行するコマンドです。

  • -itフラグは、コンテナ内部とやりとりするためのコマンドで、bashコマンドと組み合わせることで、ssh接続されたかのように、コンテナ内部からLinuxコマンドを実行することができます。

  • -pフラグは、ローカルPCのポート番号と、コンテナ内部のポート番号を繋げるためのコマンドです。

コンテナに入った後は、python main.pyを実行してサーバーを起動しましょう。

次のリンクからwebサイトに入れたら成功です。

http://localhost