Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

3.4.2-aws-eb-onbuild のDockerfileの読解(事前設定済みのpythonイメージ)

参考サイト

github.com

Dockerfile

FROM       python:3.4.2

WORKDIR    /var/app

# virtualenvをinstall
RUN        pip3 install virtualenv

# virtualenv環境を、/var/app上に作る
RUN        virtualenv /var/app

# virtualenv環境に、uwsgiをinstallする。
RUN        /var/app/bin/pip install --download-cache /src uwsgi

# /bin/false は、ssh, ftpが禁止のuserとのこと
[http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=%2Fbin%2Ffalse+%A4%C8+%2Fsbin%2Fnologin+%A4%CE%B0%E3%A4%A4:title]

# -s は、shellの略のようで、デフォルトのログインシェルを決める。
[http://linuxjm.osdn.jp/html/shadow/man8/useradd.8.html:title]

RUN        useradd uwsgi -s /bin/false
RUN        mkdir /var/log/uwsgi

# 所有者を再帰的に修正する。-Rは、ディレクトリとその中身の所有者を再帰的に変更する。
RUN        chown -R uwsgi:uwsgi /var/log/uwsgi

ONBUILD    ADD . /var/app
ONBUILD    RUN if [ -f /var/app/requirements.txt ]; then /var/app/bin/pip install -r /var/app/requirements.txt; fi

# ENVは、環境変数の設定
ENV        UWSGI_NUM_PROCESSES    1
ENV        UWSGI_NUM_THREADS      15
ENV        UWSGI_UID              uwsgi
ENV        UWSGI_GID              uwsgi
ENV        UWSGI_LOG_FILE         /var/log/uwsgi/uwsgi.log

EXPOSE     8080

ADD        uwsgi-start.sh /

CMD        []
# docker container 実行時に、uwsgi-start.shを実行する。
ENTRYPOINT ["/uwsgi-start.sh"]

uwsgi-start.shの読解

#!/bin/bash
->これはコマンドファイルの先頭に記載するもの
[https://moneyforward.com/engineers_blog/2015/05/21/bash-script-tips/:title]

cd /var/app

# virtualenvをactivateする。
. bin/activate

# Django support
# grep 文字列を検索する -q 検索結果を表示しない, -i 検索条件に大文字と小文字の区別をなくす
# [ ]   かっこ内の任意の文字に一致。ハイフン(-)で範囲指定もできる。
# egrep 高度な検索。ここでは、wsgi.pyの場所を指定している。
if cat requirements.txt | grep -q -i Django && [ -z "$WSGI_PATH" ]; then
    WSGI_PATH=`find /var/app | egrep '/var/app/[^/]+/wsgi.py'`
fi

# 8080にhttpでつなぐ。chdir=change dir, それぞれ、WSGIの値をセットして、uwsgiを実行する。
uwsgi --http :8080 --chdir /var/app --wsgi-file $WSGI_PATH $UWSGI_MODULE --master --processes $UWSGI_NUM_PROCESSES --threads $UWSGI_NUM_THREADS --uid $UWSGI_UID --gid $UWSGI_GID --logto2 $UWSGI_LOG_FILE
  • egrep 高度な検索

Linux コマンド 勉強中 - egrep 高度な正規表現検索してマッチした行を出力する