Dockerの使い方を学ぶために、Flaskの簡易WebアプリケーションをDockerコンテナで立ち上げてみました。
*環境
- MacOS
- Python 3.7
- Flask 1.0.2
*参考
*Dockerファイルの作成
任意のディレクトリにDockerfile
という名前のファイルを作成します。<Dockerfile>
FROM python:3.7
WORKDIR /app
COPY . /app
RUN pip install Flask
CMD ["python", "app.py"]
-
FROM
ベースとなるイメージを指定します。1行目に書く必要があります。
-
WORKDIR
Dockerの作業ディレクトリを指定します。Docker起動時にログインした先のディレクトリになります。
-
COPY [送信元, 送信先]
送信元のディレクトリやファイルを、第2引数に指定したコンテナ内の送信先にコピーします。
-
RUN
コマンドを実行します。
-
CMD
Dockerfile内で1度だけ実行できます。
実行するコマンドを指定します。
*Pythonファイルの作成
Dockerfileと同じディレクトリにapp.py
を新規作成します。<app.py>
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
*Dockerイメージのビルド
Dockerfileがあるディレクトリで下記コマンドを実行すると、Dockerfileに書かれたコマンドが実行されます。少し時間がかかりますが、Successfullyと表示されれば完了です。
$ docker build -t flask1 .
...
Successfully built d42102651bf7
Successfully tagged flask1:latest
下記コマンドを実行してビルドしたイメージを確認することができます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flask1 latest d42102651bf7 18 seconds ago 936MB
*Dockerイメージの実行
docker run
でイメージ名を指定するとDockerイメージが実行されます。下記コマンドを実行します。
$ docker run -d -p 80:5000 flask1
実行中のDockerイメージは下記コマンドで確認することができます。
$ docker ps
下記にアクセスすると「Hello World!」と表示されます。
http://localhost/
*Dockerイメージにログイン
下記コマンドを実行すると、Dockerイメージの中に管理者としてログインすることができます。/app
ディレクトリの中に、コピーしたDockerfile
とapp.py
が格納されています。$ docker exec -it 646e8f44c36f /bin/bash
root@646e8f44c36f:/app# ls
Dockerfile app.py
ログインしたDockerの中でインストールされたパッケージを確認してみます。
Dockerfileで指定したFlaskがインストールされています。
root@646e8f44c36f:/app# pip list
Package Version
------------ -------
Click 7.0
Flask 1.0.2
itsdangerous 1.1.0
Jinja2 2.10
MarkupSafe 1.1.0
pip 18.1
setuptools 40.6.3
Werkzeug 0.14.1
wheel 0.32.3
root@646e8f44c36f:/app#
下記コマンドでDockerから抜けます。
root@646e8f44c36f:/app# exit
*Dockerイメージの停止
docker stop
コマンドを実行するとDockerイメージを停止することができます。$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
646e8f44c36f flask1 "python app.py" 2 hours ago Up 2 hours 0.0.0.0:80->5000/tcp elegant_meninsky
$ docker stop 646e8f44c36f
646e8f44c36f
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
646e8f44c36f flask1 "python app.py" 2 hours ago Exited (137) 7 seconds ago elegant_meninsky
*Dockerイメージの削除
docker rm
コマンドを実行するとDockerイメージ自体を削除することができます。$ docker rm 646e8f44c36f
646e8f44c36f
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
*所感
Pythonの環境構築は、普段はvirtualenv
を使うことが多かったのですが、Dockerfileに必要事項を書いてしまえばコマンドを実行するだけで環境が構築できてしまうので、大変便利だと感じました。今後のPython開発環境の構築には、Dockerを使っていきたいと思います。
Sign up here with your email
ConversionConversion EmoticonEmoticon