日曜プログラミング

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

Amazon LinuxをDocker上で動かしFlask環境を整えてAmazon ECSに環境を作る (その2)

前回は、macノートにDockerの環境を整えました。
blog.gelehrte.com


今回は、Amazon Linuxが動いているDocker上でFlask + uWSGI + Nginx環境を構築したいと思います。

まずは、Flaskが動くように手で環境を整える

Dockerは環境設定をDockerfileに記述し、その記述を基に環境を作ることが可能です。しかしいきなりDockerfileを書くのは困難です。
なので

  • Dockerでベースで起動する
  • 1行、インストールを試す
  • うまくいったらどこかにメモしておく
  • うまく行かなかったら、exit して、もいちど docker run
  • まとまった後に Dockerfileに記述する

という流れになると思います。

ちょっとした例を

初めてのDockerfile作成

まず起動します

$ docker container run -itd amazonlinux
747c6e40edd4dc23464f2f9da2b51365600f506582878316b27d21b2fc044724
workspace $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
747c6e40edd4 amazonlinux "/bin/bash" 9 seconds ago Up 8 seconds nifty_wing
$ docker attach 747c6e40edd4
bash-4.2#

次に、yum update -y を実行し、成功したらcommitします。

bash-4.2# yum update -y
Loaded plugins: ovl, priorities

~(中略)~

Updated:
glibc.x86_64 0:2.17-157.170.amzn1 glibc-common.x86_64 0:2.17-157.170.amzn1 nspr.x86_64 0:4.13.1-1.0.39.amzn1 nss.x86_64 0:3.28.4-1.0.78.amzn1
nss-sysinit.x86_64 0:3.28.4-1.0.78.amzn1 nss-tools.x86_64 0:3.28.4-1.0.78.amzn1 nss-util.x86_64 0:3.28.4-1.0.52.amzn1

Complete!
bash-4.2#

ここまでの流れを保存します。ctrl+p ctrl+qでdocker環境から出ます。

bash-4.2# $

docker psでコンテナを探し、イメージ化します。今回は awsinit という名前で

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
747c6e40edd4 amazonlinux "/bin/bash" 9 minutes ago Up 9 minutes nifty_wing
$ docker commit 747c6e40edd4 awsinit
sha256:c71b4fb368241dd4885c846e0ee07d22d805a0ce0094582f600ba613cccd6707
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
awsinit latest c71b4fb36824 24 seconds ago 334 MB
amazonlinux latest 766ebb052d4f 2 months ago 162 MB

ここでメモを残します。これが最終的には、Dockerfileとなっていきます。

FROM amazonlinux

RUN yum install -y

Dockerfileを作り上げる

私の場合はこうなりました

FROM amazonlinux

MAINTAINER ein.gelehrte@gmail.com

RUN yum update -y && \
yum install git vim -y && \
yum install nginx -y && \
yum install python35 python35-dev python35-setuptools python35-devel -y && \
yum install gcc -y && \
yum install python26-setuptools -y && \
easy_install-2.6 supervisor

ADD . /home/docker/
RUN easy_install-3.5 virtualenv

WORKDIR /home/docker/
RUN virtualenv --no-site-packages .
RUN /bin/bash -c "source /home/docker/bin/activate"
RUN /home/docker/bin/pip3.5 install uwsgi
RUN /home/docker/bin/pip3.5 install flask

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN echo_supervisord_conf > /etc/supervisord.conf
RUN echo "[include]" >> /etc/supervisord.conf
RUN echo "files = supervisord.d/*.conf" >> /etc/supervisord.conf
RUN mkdir /etc/supervisord.d
RUN mkdir /var/log/uwsgi
RUN ln -s /home/docker/uwsgi.conf /etc/nginx/conf.d/
RUN ln -s /home/docker/supervisor.conf /etc/supervisord.d/

expose 8080
cmd ["supervisord", "-n"]

最新版はGithubのレポジトリをご確認ください。
github.com

DockerHubにも公開しました。
https://hub.docker.com/r/gelehrtecrest/amazonlinux-nginx-flask/

DockerHubに公開したイメージを利用する

以下のコマンドで実行できます

docker run --rm -itd -p 80:8080 gelehrtecrest/amazonlinux-nginx-flask

ブラウザでアクセスすると、Hello Worldされるはずです。
f:id:gelehrtecrest:20170623210001p:plain

今日はここまでー