Edited at

DockerでサクッとUbuntu+任意のPython環境を用意する


動機

DockerでUbuntuに任意のPython実行環境を用意したい。出来るだけ簡単な方法で。ただし、condaは使いたくない。


実現方法

今回は、python-buildを利用。python-buildは、pyenvにバンドルされている、任意のPython実行環境を構築するプラグイン。


依存関係のインストール

必要なものをインストール

$ apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \

libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev


python-buildのインストール

以下で/usr/local/binにpython-buildがインストールされる

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

$ cd ~/.pyenv/plugins/python-build
$ ./install.sh


Python実行環境のインストール

バージョンとインストール先はお好みで。ここでは、バージョンを3.7.1、インストール先を~/local/python-3.7.1に指定。


途中経過が不要なら-vオプションはなしで。

$ /usr/local/bin/python-build -v 3.7.1 ~/local/python-3.7.1


pyenvのアンインストール

Dockerコンテナ内でPythonのバージョンを切り分ける必要はないので、不要になったpyenvはアンインストールしておく。

$ rm -rf ~/.pyenv


パスを通す

$ echo 'export PATH="$HOME/local/python-3.7.1/bin:$PATH"' >> ~/.bashrc


Dockerfile

最初のところの環境変数でバージョン・インストール先を書き換えるだけでサクッと環境構築。


Dockerfile

FROM ubuntu:16.04

ENV PYTHON_VERSION 3.7.1
ENV HOME /root
ENV PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION
ENV PATH $PYTHON_ROOT/bin:$PATH
ENV PYENV_ROOT $HOME/.pyenv
RUN apt-get update && apt-get upgrade -y \
&& apt-get install -y \
git \
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
curl \
llvm \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
tk-dev \
libffi-dev \
liblzma-dev \
&& git clone https://github.com/pyenv/pyenv.git $PYENV_ROOT \
&& $PYENV_ROOT/plugins/python-build/install.sh \
&& /usr/local/bin/python-build -v $PYTHON_VERSION $PYTHON_ROOT \
&& rm -rf $PYENV_ROOT