最近、アプリエンジニアの岩原です。
今回は、Dockerfileを使用して、CentOS 6 + Python2.7.9 + MySQL5.6のDocker Imageを作成するサンプルをお見せしようかと思います。
Python + MySQLを使用したサーバーアプリのユニットテストなどに使えると思います。
サンプルではその他にpipなどの導入も行ってます。
EC2のディレクトリ構成を意識している箇所があります。
Dockerfile
Dockerイメージを作成するためのファイルです。
MAINTAINERはご自身の情報に書き換えてください。
やっていることは
1.MySQLのセットアップ
2.Pythonのアップデートに必要なモジュールのインストール
3.Pythonのアップデート
4.pipのインストール
5.pytestとその他Pythonモジュールのインストール
6.MySQLデータベースのセットアップ
です。
FROM centos:6 # MAINTAINERはご自身の情報に書き換えてください MAINTAINER hogehoge <xxx@abcd.abcd> # mysql setup. RUN rpm -ihv http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm RUN yum -y install mysql-community-server # python setup RUN yum -y install gcc RUN yum -y install gcc-c++ RUN yum -y install make RUN yum -y install git RUN yum -y install zlib-devel RUN yum -y install readline-devel RUN yum -y install sqlite-devel RUN yum -y install openssl-devel RUN yum -y install bzip2-devel RUN yum -y install mysql-devel RUN yum -y install libcurl-devel RUN yum -y install tar RUN yum -y install python-devel RUN yum -y install which # EC2 directory RUN mkdir /home/ec2-user WORKDIR /home/ec2-user # python version up. RUN curl -O https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz RUN tar zxf Python-2.7.9.tgz WORKDIR /home/ec2-user/Python-2.7.9 RUN ./configure --prefix=/usr/local RUN make && make install # pip setup WORKDIR /home/ec2-user RUN python --version RUN curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python # setting pycurl ENV PYCURL_SSL_LIBRARY nss # setup server env. ADD ./requirements.txt ./requirements.txt RUN pip install -r requirements.txt RUN pip install -U pytest # setup database RUN echo "NETWORKING=yes" > /etc/sysconfig/network #RUN service mysqld restart RUN mkdir OpsTools WORKDIR /home/ec2-user/OpsTools ADD ./tests ./tests WORKDIR /home/ec2-user/OpsTools/tests RUN chmod 755 ./database_setup.sh RUN ./database_setup.sh
requirements.txt(サンプル)
pip installでインストールモジュールです。
このサンプルでは、flask、pycurl、MySQL-python、SQLAlchemyのインストールをしています。
Flask==0.10.1 itsdangerous==0.24 Jinja2==2.7.3 MarkupSafe==0.23 MySQL-python==1.2.5 pycurl==7.19.5.1 SQLAlchemy==0.9.9 Werkzeug==0.10.4
database_setup.sh
MySQLのセットアップを行うシェルスクリプトです。
rootユーザーのパスワードの設定なども行ってます。
ユニットテスト用の使い捨てであるため、rootのパスワードは適当です。
#!/bin/sh service mysqld start #root user password setting. mysqladmin -u root password "root" mysql --defaults-extra-file=./my.cnf -e "DELETE FROM mysql.user WHERE User='';" mysql --defaults-extra-file=./my.cnf -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');" mysql --defaults-extra-file=./my.cnf -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';" mysql --defaults-extra-file=./my.cnf -e "FLUSH PRIVILEGES;" service mysqld restart mysql --defaults-extra-file=./my.cnf < ./schema.sql service mysqld stop
my.cnf
MySQLの接続設定です。
rootのパスワードを変えた場合は個々のpasswordも変えましょう。
[client] user = root password = root host = localhost
schema.sql
schema.sqlはデータベース作成、テーブル作成のSQLを流します。
ここでは省略します。