WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

CentOS 6にPython2.7.9とMySQL5.6を入れるDockerfileのサンプル

最近、アプリエンジニアの岩原です。
今回は、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を流します。
ここでは省略します。