概要
EC2インスタンス上でdockerとdocker-composeをインストールして動かす方法メモ
OS: amazonLinux2
ドキュメント
https://flask.palletsprojects.com/en/2.0.x/tutorial/
https://flask.palletsprojects.com/en/2.0.x/installation/
https://flask.palletsprojects.com/en/2.0.x/quickstart/
dockerインストール
インストール -> 起動 -> ec2-userでも動かせるように権限調整
$ sudo su -
# yum update -y
# amazon-linux-extras install -y docker
# systemctl enable docker
# systemctl start docker
# usermod -aG docker ec2-user
docker-composeインストール
docker-composeのバージョンは適時調整する
バージョン情報まで表示できたらOK!
# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
# chmod 755 /usr/local/bin/docker-compose
# docker-compose -v
docker-compose version 1.24.1, build 4667896b
pythonコンテナを作ってアクセス確認
以下はec2-userで操作
$ mkdir project
$ cd project/
$ mkdir -p docker/python
$ vi docker/python/Dockerfile
$ vi docker-compose.yml
$ vi docker/python/app.py
$ vi docker/python/templates/index.html
$ docker-compose up -d
docker/python/app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=5000)
docker-compose.yml
version: "3"
services:
python:
build: ./docker/python
ports:
- 80:5000
docker/python/Dockerfile
FROM python:3.9
WORKDIR /app
ADD . /app
RUN pip install Flask
EXPOSE 5000
CMD ["python", "app.py"]
docker/python/templates/index.html
<html>
<title>hogehoge</title>
<head>
</head>
<body>
hogehoge
</body>
</html>
ゴール
パブリックIPに80ポートでアクセスして、「hogehoge」が表示されるページが出ればok
追加
この記事で触れた内容を自前の環境で動かしてみる
docker/python/app.py
from flask import Flask, render_template
import numpy as np
from matplotlib.figure import Figure
import base64
from io import BytesIO
app = Flask(__name__)
@app.route('/')
def index():
np.random.seed(1)
x = np.arange(10)
y = np.random.randint(1, 1000, 10)
fig = Figure()
ax = fig.subplots()
ax.plot(x, y)
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('index.html', data=data)
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=5000)
docker/python/Dockerfile
FROM python:3.9
WORKDIR /app
ADD . /app
RUN pip install Flask\
& pip install numpy\
& pip install matplotlib
EXPOSE 5000
CMD ["python", "app.py"]
docker/python/templates/index.html
<html>
<title>hogehoge</title>
<head>
</head>
<body>
<img src="data:image/png;base64,{{data}}"/>
</body>
</html>