Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

  • 19
    いいね
  • 0
    コメント

はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!
2016年7月17, 18日に友人と「Pythonハック会」をしています。
Python3系のDockerイメージは既にあると思いますが、今回作成したDockerfileを使えば、常に最新版のCentOSでPython環境を構築できるので、意味があるかと思います!
フレームワークはDjangoだけでなく、bottleとFlaskのインストールも記載しているので参考にしてください!

重要

次の日、フレームワークを実際に動作させる…で思いっきり壁に当たりました(泣)
Pythonは公式イメージ(2016年7月18日はPython:3.5.2)を使う方が良いです。この記事は参考としてください…(削除するかも)
bottleのインストールから動作確認まではこちら!

目的

  1. Pythonでブログシステムを構築、フレームワークはDjangoを利用します。
  2. (せめて)開発環境はDokcerを利用する
  3. Pythonでよく使うpipやvirtualenvもインストール
  4. フレームワークはDjango, bottle, Flaskのインストールを掲載しています(お好みでどうぞ)
  5. これらを一発で実現できるDockerfileを作成

環境(2016年7月17日現在)

Max OS X El Capitan
Docker 1.9.1
CentOS 7.2系
Python 3.5.2
MySQL 5.7.11

役割分担

私 Dokcerで環境構築
メンバー コーディング

Dockerfile

下記のDockerfileをコピペして、コマンドを実行するだけで最新版のCentOS上に、Python3.5.2をインストール可能です!

Dockerfile
# OSはCentOS
FROM centos:latest

# 各パッケージをインストール
# pipやvirtualenvインストールも想定しています。
RUN yum -y update
RUN yum -y groupinstall "Development Tools"
RUN yum -y install \ 
           kernel-devel \
           kernel-headers \
           gcc-c++ \
           patch \
           libyaml-devel \
           libffi-devel \
           autoconf \
           automake \
           make \
           libtool \
           bison \
           tk-devel \
           zip \
           wget \
           tar \
           gcc \
           zlib \
           zlib-devel \
           bzip2 \
           bzip2-devel \
           readline \
           readline-devel \
           sqlite \
           sqlite-devel \
           openssl \
           openssl-devel \
           git \
           gdbm-devel \
           python-devel 

# Python3.5.2をインストール
# Python3.5.2をダウンロード
WORKDIR /root
RUN wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
RUN tar xzvf Python-3.5.2.tgz

# makeでインストール
WORKDIR ./Python-3.5.2
RUN ./configure --with-threads
RUN make install

# pipインストール(最新版)
RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python get-pip.py

# readlineインストール
RUN pip install readline

# virtualenvインストール
RUN pip install virtualenv

# Djangoインストール
RUN pip install django

# おまけ
# Django以外のフレームワークインストール
# bottleインストール
# RUN pip install bottle

# Flaskインストール
# RUN pip install Flask

WORKDIR /root
CMD ["/bin/bash"]
PythonインストールCentOSイメージ生成
$ docker build -t {任意のイメージ名} .
# 例
$ docker build -t ms-06r-1a-000 .
作成したPython入りのCentOSイメージからコンテナ作成
$ docker run -it --name {任意のコンテナ名} {作成したイメージ名} /bin/bash
# 例
$ docker run -it --name ms-06r-1a-000-python ms-06r-1a-000 /bin/bash

解説

  1. DockerでCentOSコンテナを作成し起動
  2. Python3をインストール
  3. 開発に必要なライブラリをインストール
  4. フレームワークのインストール(Django, bottle, Flask)
  5. Python環境とMySQLサーバとデータ含めてdokcer-composer化(まだ)

ここからはDockerfile生成に至る過程を解説します。

1. DockerでCentOSコンテナを作成し起動

Dockerはインストール済みの前提です。

イメージがなければCentOSのイメージをプル
$ docker pull centos
イメージがプルできたことを確認
$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos                       latest              3508c878e883        2 weeks ago         196.8 MB
CentOSのコンテナを作成し、そのままログイン
$ docker run -it centos
# 
CentOSのバージョンを確認
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core) 

CentOSが7系であることを確認しました。
続いてデフォルトでインストールされているPythonを確認します。

Pythonのデフォルトバージョン
# python -V
Python 2.7.5

Pythonは3系を利用したいので、インストールします。
http://pppurple.hatenablog.com/entry/2016/01/24/213645

2. Python3をインストール

Dockerfileにしてもインストールできる方法にしました。
Python3の最新版をソースからmakeしています。
(pyenvのインストールがDockerfileにしたらうまくいかず…巻末に記載しています。)

2-1. 必要なライブラリをインストール

Python3だけでなく、pipやvirtualenv、開発に必要なライブラリをインストールします!
Pythonプロフェッショナルプログラミング 第2版を参考にしています。
※上記書籍ではUbuntuなので、パッケージのインストールは、Ubuntuがapt-getですが、今回はCentOSなのでyumに置き換えています。

諸々のライブラリをインストール(既に最新版インストール済みのものもあります)
# yum -y update
# yum -y groupinstall "Development Tools"
# yum -y install \ 
           kernel-devel \
           kernel-headers \
           gcc-c++ \
           patch \
           libyaml-devel \
           libffi-devel \
           autoconf \
           automake \
           make \
           libtool \
           bison \
           tk-devel \
           zip \
           wget \
           tar \
           gcc \
           zlib \
           zlib-devel \
           bzip2 \
           bzip2-devel \
           readline \
           readline-devel \
           sqlite \
           sqlite-devel \
           openssl \
           openssl-devel \
           git \
           gdbm-devel \
           python-devel 

Python3.5.2をインストール

Python3.5.2をダウンロードし解凍
# cd /root
# wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
# tar xzvf Python-3.5.2.tgz
makeでPython3をインストール
# cd ./Python-3.5.2
# ./configure --with-threads
# make install

3. 開発に必要なライブラリをインストール

3-1. pipをインストール

pipはPyPIからサードパーティのライブラリをインストールするツールです!

pip(最新版をインストールする方法)
# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
pipのバージョン確認
# pip3 --version
pip 8.1.2 from /root/.pyenv/versions/3.5.2/lib/python3.5/site-packages (python 3.5)

3-2. readlineをインストール

readlineはテキストファイルの読み込みのライブラリです!

readlineインストール
# pip3 install readline

3-3. virtualenvをインストール

virtualenvは仮想的なPythonの実行環境です!

virtualenvをインストール
# pip3 install virtualenv
virtualenvのバージョン確認
# virtualenv --version
15.0.2

virtualenvを使ってみましょう!

virtualenv実行
# cd {適当なフォルダ}
# virtualenv sample
# ls
sample
# source sample/bin/activate
(sample) #

4. フレームワークのインストール(Django, bottle, Flask)

4-1. Djangoインストール

pipがあれば、次のコマンド一発でインストール可能です!
DjangoはPythonのフルスタックフレームワークです!

pipでDjangoをインストール
# pip3 install django

4-2. bottleインストール

bottleは軽量のPythonフレームワークで、ライブラリの依存関係がなく、1つのpythonファイル(jQueryみたい)のみのフレームワークです!

pipでbottleインストール
# pip3 install bottle

4-3. Flaskインストール

Flaskも軽量なPythonフレームワークです!
こちらもpipでインストール可能です!

pipでFlaskインストール
# pip3 install Flask

おまけ pyenvインストール

Dockerfile化をすることができませんでしたが、CentOS上ではこの方法でPython3をインストールできたので掲載してます。

Gitでクローンし、bash_profileに環境変数を記述します。

pyenvをクローン
# git clone https://github.com/yyuu/pyenv.git /root/.pyenv
bash_profileに環境変数を記述するためにviを起動
# vi /etc/skel/.bash_profile
.bash_profile
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
bash_profileを反映。
# source /etc/skel/.bash_profile
設定を確認
# pyenv version
system (set by /root/.pyenv/version)
Pythonのリスト
# pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
...
  3.5.1
  3.5.2
  3.6.0a1
  3.6.0a3
  3.6-dev
...
安定版の3.5.2(2016年7月17日現在)をインストール
# pyenv install 3.5.2
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
Installing Python-3.5.2...
# pyenv global 3.5.2
# pyenv rehash
Pythonのバージョンを確認
# python -V
Python 3.5.2

サイトマップ(未投稿あり)

テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)
命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」

Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション

Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作
Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング
Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)
Raspberry Pi 3でスイッチの状態を検出する
Raspberry Pi 3でpythonを使いサーボモータを動かす