前回は、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.amzn1Complete!
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 supervisorADD . /home/docker/
RUN easy_install-3.5 virtualenvWORKDIR /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されるはずです。
今日はここまでー