LoginSignup
12

More than 3 years have passed since last update.

Dockerコンテナ内のFlaskサーバにアクセス(Python)

Last updated at Posted at 2018-10-06

概要

PythonのライブラリFlaskを用いてミニマルなサーバをたて、それをDockerコンテナ上で動かし、ローカルのパソコンからアクセスする方法について説明します。

私自身Dockerについて勉強中のため、かなり初心者向けの内容になっております。

準備するもの

以下のようなディレクトリを用意します。
数字が振られているファイルについては、後ほど中身を説明します。

/docker-python
┣ Dockerfile (1)
┗ web
    ┣ main.py (2)
    ┗ templates
        ┗ index.html (3)

(1) Dockerfile

FROM centos:7

#IUSリポジトリを追加
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
#Python3.5をインストール
RUN yum install -y python35u python35u-libs python35u-devel python35u-pip
#Pythonのライブラリrequestsをpip
RUN python3.5 -m pip install requests
#PythonのライブラリFlaskをpip
RUN python3.5 -m pip install flask

COPY web /var/www/html/web/

#コンテナ起動時にFlaskサーバを立ち上げ
CMD ["python3.5", "/var/www/html/web/main.py"]

Pythonと必要ライブラリをインストールし、実行時にサーバを立ち上げる設定をしています。

(2)main.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def show_page():
    return render_template('index.html', msg='Hello, ', additional_msg="from Python")

app.run(host='0.0.0.0',port=5000,debug=True)

全ての要求("/")に対して、index.htmlのページを返します。

注意が必要なのは、最終行のhost='0.0.0.0'の部分です。
最初私はこの部分を適当な番号を指定していたのですが、どうやら0.0.0.0でなければ外部からのアクセスができないようなので、必ずこの番号にする必要があります。

(3)index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Hello from Python</title>
        <style>
            #firstMsg{
                font-size: 30px;
                font-family:Impact;
                color:blue
            }
            #secondMsg{
                font-size: 30px;
                font-family:Impact;
                color:yellow
            }
        </style>
    </head>
    <body bgcolor="black">
        <p id="firstMsg">
            {{msg}}
        </p>
        <p id="secondMsg">
            {{additional_msg}}
        </p>
    </body>
</html>

main.pyで{msg}{additional_msg}に値が埋め込まれます。

Dockerコマンド

上のフォルダが作成できたら、Dockerのコマンドを打っていきます。

イメージの作成

Dockerfileのある場所にcdして、

docker build . -t docker-python -q

のコマンドを打ってDockerイメージの作成をします。

.でカレントディレクトリにあるDockerfileを指定して、-tオプションで名前をつけて、-qオプションでログを抑制しています。

Successfully tagged docker-python:latestのメッセージが出たら、

docker images

コマンドを打ち、イメージが作成されたことを確認します。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-python       latest              8febc583700e        27 minutes ago      529MB

上記のように出れば、うまく作成できています。

コンテナの立ち上げ

作成したイメージを基に、コンテナを立ち上げます。

docker run -it -p 5000:5000 docker-python

Dockerfileに、起動時にはFlaskサーバを立ち上げるように記述したため、以下のような出力がされると思います。

 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

これでサーバが立ち上がりました。

実行

パソコンのブラウザから、http://localhost:5000/を叩くと、以下のような画面が出てきます。
Screen Shot 2018-10-06 at 15.11.37.png

非常に地味ですが、サーバを立ち上げることができました。

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
12