はじめに
Amazon Linux 2023 をベースとした Docker イメージ作成時に Python バージョンアップを行うための Dockerfile について書きます。
Python バージョンアップ方法はこちらを参考にしました。
Dockerfileの書き方
まず、Amazon Linux 2023 の Docker コンテナの Python バージョンを確認します。 3.9.16
となっています。
[ec2-user@ip-172-31-13-197 ~]$ docker run -it amazonlinux:2023 /bin/bash
bash-5.2# python3 --version
Python 3.9.16
bash-5.2# python --version
bash: python: command not found
次に、以下の Dockerfile を作成します。Python は 3.11.0
をインストールします。
FROM amazonlinux:2023
# 必要なパッケージをインストール
RUN dnf install -y git tar gcc \
zlib-devel bzip2-devel readline-devel \
sqlite sqlite-devel openssl-devel \
tk-devel libffi-devel xz-devel
# pyenv により、使用する Python バージョンをインストールする
RUN curl https://pyenv.run | bash && \
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \
echo 'eval "$(pyenv init -)"' >> ~/.bashrc && \
source ~/.bashrc && \
pyenv install 3.11.0 && \
pyenv global 3.11.0
コンテナを作成し、Python バージョンを確認します。
[ec2-user@ip-172-31-13-197 ~]$ docker build -t demo .
[ec2-user@ip-172-31-13-197 ~]$ docker run -it demo /bin/bash
bash-5.2# python3 --version
Python 3.11.0
bash-5.2# python --version
Python 3.11.0
Pythonライブラリインストール
イメージ作成時に Python のライブラリをインストールする方法について書きます。
新たにファイルを作成します。
requirements.txt
numpy==1.26.2
PyYaml==6.0.1
Dockerfileを次のように修正します。
FROM amazonlinux:2023
+ COPY ./requirements.txt ./
# 必要なパッケージをインストール
RUN dnf install -y git tar gcc \
zlib-devel bzip2-devel readline-devel \
sqlite sqlite-devel openssl-devel \
tk-devel libffi-devel xz-devel
# pyenv により、使用する Python バージョンをインストールする
RUN curl https://pyenv.run | bash && \
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \
echo 'eval "$(pyenv init -)"' >> ~/.bashrc && \
source ~/.bashrc && \
pyenv install 3.11.0 && \
pyenv global 3.11.0
+ # Pythonライブラリインストール
+ RUN /root/.pyenv/shims/pip install --no-cache-dir -r ./requirements.txt
参考記事