はじめに
Windows10
Docker Desktop
Dockerについて
そもそものDockerについて、またインストール方法は以下の記事で紹介しています。
はじめに プログラミングを行う際に実行環境を構築する必要がありますが、普段利用しているローカルPCに直接インストールしてしまっては、トライアンドエラーを繰り返すうちに不要なアプリケーションが積み重なり動作が不安定にな[…]
はじめに Windows環境でLinuxのコマンドが利用できるWSL2についてインストールおよび利用方法を説明します。 Linuxコマンドが使えるようになると、様々なプログラミング言語や開発に利用できますので非常に[…]
Dockerfileの作成
はじめにでも書いたように、Dockerfileには利用したいイメージと、そのイメージに対して実行したいコマンドを記述することができます。
ここではpythonイメージをダウンロードしてpythonのプログラムを実行するまでを確認したいと思います。
事前準備
事前準備として、ローカルPC(ここではWindows10)で作業するフォルダを作成します。
そこに、Dockerfileとpythonのソースコードを格納します。フォルダ構成としては以下となります。
dockerfiletest/
`-- Dockerfile
`-- files/
`-- hello.py
dockerfiletestという作業フォルダの中にDockerfileとfilesというpythonのプログラムコードを格納するフォルダを作成しています。
pythonプログラムのhello.pyの中身は以下です。
print("Hello World!")
Dockerfileを作成する
それでは、Dockerfileの中身を記述していきます。まずは記述内容として以下となります。
FROM python:latest
RUN apt update -y && apt upgrade -y && apt autoremove -y
RUN apt install -y vim
RUN cd /root && mkdir pytest
ADD files/hello.py /root/pytest
CMD ["/bin/bash"]
1行目のFROMでDocker Hubから取得したいイメージのリポジトリ名とタグを記載します。今回はpythonの最新(latest)イメージをダウンロードします。
3行目のRUNでコマンドを実行できます。apt update でパッケージリストを最新化するなどOSインストール直後に行うようなコマンドを記載しています。また-yオプションをつけることによって、コマンド実行中にインストールするかどうか聞かれる選択肢をyesで進めることができます。
4行目もRUNでvimエディターをインストールしています。
6行目で、rootディレクトリに移動し、さらにpytestというディレクトを作成しています。
7行目のADDはローカルPCのファイルをコンテナにコピーすることができます。今回はfiles/hello.pyのファイルをコンテナ内の/root/pytestディレクトにコピーします。
9行目のCMDはコンテナ実行時の挙動を指定できます。これは、イメージをコンテナとして起動するときに自動的に実行するコマンドを指定しています。今回の内容はコンテナ起動時に/bin/bashを起動するようにしています。
Dockerfileが準備できたら作業フォルダ(ここではdockerfiletest)にpowershellで移動し、以下のコマンドを実行します。
docker image build -t pyimage:v1 .
-tオプションの後ろに作成するイメージ名とタグ名を任意で決めます。今回は、イメージ名をpyimage、タグ名をv1としました。
また、末尾の.(ピリオド)はDockerfileの格納場所を指定します。ここでは.(ピリオド)なので、現在のフォルダ(カレントフォルダ)を示します。
それでは、Dockerイメージの一覧を表示します。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pyimage v1 50ada581f3c6 2 hours ago 988MB
リポジトリ名とタグ名にpyimage:v1というのが作成されているのが確認できます。
イメージからコンテナを起動する
Dockerfileを使って作成したイメージからコンテナを起動します。
docker run -it --name pydev pyimage:v1
作成したpyimage:v1からpydevという名前を付けたコンテナを起動できました。
次に、Dockerfileに記載したpythonのプログラムコードを実行してみましょう。
cd /root/pytest/ #/root/pytest/ディレクトリに移動する
ls #フォルダ内のファイルリスト取得
hello.py
cat hello.py #hello.pyのファイルの中身を標準出力に出力
print("Hello World!")
python hello.py #pythonプログラムコードを実行
Hello World!
指定したディレクトリにpythonプログラムファイルが存在し、実行できることが確認できました。
Dockerfileの作成例
Ubuntuにpythonの開発環境としてvenvをインストールする手順をDockerfileに記述してイメージ作成、コンテナ起動ができるようにしてます。
pythonのインストール手順についての詳細は以下の記事でまとめています。
はじめに Pythonの開発現場ではDockerなどの仮想環境を用いることが多いと思いますが、実際にwebサービスなどの運用を始める際はPythonのインストール、環境構築が必要になってくる場合もあります。 今回は[…]
仮想環境venvのインストールについては以下の記事です。
はじめに 前回、Ubuntu上にPythonの実行環境をインストールしました。その際に、Python を開発する際はプロジェクトごとに仮想環境を作成するとしてvenvを選択しました。 前回の記事はこちら [sit[…]
#Ubuntu22.10をダウンロード
FROM ubuntu:22.10
#パッケージの最新化
RUN apt update -y && apt upgrade -y && apt autoremove -y
#利用するパッケージを追加
RUN apt install -y wget vim
#ビルドツール・ライブラリのインストール
RUN DEBIAN_FRONTEND=noninteractive apt install -y build-essential libbz2-dev libdb-dev \
libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
libncursesw5-dev libsqlite3-dev libssl-dev \
zlib1g-dev uuid-dev tk-dev
# TimeZone設定
ENV TZ=Asia/Tokyo
#Pythonのインストール
RUN mkdir /root/python
WORKDIR /root/python
RUN wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz && tar xJf Python-3.11.0.tar.xz && cd Python-3.11.0 && ./configure && make && make install
#仮想環境venvのディレクトリ作成
RUN mkdir py_venvs && mkdir py_venvs/py1
WORKDIR /root/python/py_venvs/py1
RUN python3 -m venv ./.venv1
RUN . .venv1/bin/activate && python3 -m pip install -U pip && python3 -m pip install numpy
ADD files/* /root/python/py_venvs/py1/
CMD ["/bin/bash"]</code></pre>
11行目のDEBIAN_FRONTEND=noninteractiveはインストール時に入力を求められる部分をスキップすることができます。
今回はタイムゾーンを聞かれるので、17行目で改めてセットしています。
また、20,26行目のWORKDIRはcdの代わりに使用しています。Docker のビルドでは Dockerfile の各命令ごとにコンテナを作るため、デフォルトだと各命令時のカレントディレクトリは常に「/」になるためです。
docker image build -t pyimage:v2 .
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pyimage v2 f9d83e150ed9 34 seconds ago 1.48GB
pyimage v1 50ada581f3c6 3 hours ago 988MB
pyimageのv2が追加されていることが確認できますので、コンテナを起動します。
docker run -it --name pydev2 pyimage:v2
pythonの仮想環境である.venv1に切り替えます。
source .venv1/bin/activate
pip list
Package Version
---------- -------
numpy 1.23.4
pip 22.3
setuptools 65.5.0
python calc.py
root2 : 1.4142135623730951
e : 2.718281828459045
pi : 3.141592653589793
log2 : 0.6931471805599453
X^2+2X-8 : [-4. 2.]
pythonの追加パッケージとしてnumpyがインストールされていることが確認できます。
また、numpyを利用したpythonのプログラムコードも実行できていました。
まとめ
出版社:技術評論社
出版社:日経BP
出版社:インプレス