はじめに
Docker 触ってみたいけどよくわからん、という人向けです。
Docker 上で Python を動かすことで、なんとなく Docker を学びます。
Python を触れる人向けです。
前提知識
この『入門Docker』が非常にわかりやすいので、「はじめに」の部分を読んでみてください。全部理解できなくても問題はありません。
http://y-ohgi.com/introduction-docker/
また、 Docker for Mac や、 Docker for Windows をインストールしておいてください。本記事では、PC 上で Docker を動かします。
最低限の、コマンドラインの知識はあるものとします。
Docker 上で Python のコマンドを実行してみる
Docker 上で Python のコマンドを実行してみます。実行するコマンドはシンプルに python --version
Python の Docker イメージを探す
Python 公式から、 Python の Docker イメージが提供されているので、それをダウンロードして、起動します。起動した Docker コンテナの中で、 python --version
を実行してみます。
Docker イメージとは、「ひな型」みたいなものです。横文字でいうと「テンプレート」みたいな感じです。
たいていの Docker イメージは、 Dockerhub にあります。
ここで python と検索すると、 Python の Docker イメージが出てきます。
https://hub.docker.com/_/python
Docker Official Images と書いてあるか確認してください。これが書いてあれば公式のイメージです。非公式のイメージは、誰が作っているかわからないので、うかつにダウンロードしないようにしましょう。
下にスクロールしていくと「タグ」の一覧があります。これで、Python のバージョンや、Docker 上で起動する OS のバージョンを選べます。
今回は、 3.9-slim-buster
というバージョンを使うことにします。
- 3.9 は Python のバージョン
- slim とは、余分なものをなるべく入れないようにした、容量の小さなイメージですよ、という意味
- buster は OS の種類みたいな感じです(あんまり気にしなくていいです) *1
Docker イメージのダウンロードと起動
では、 Docker イメージをダウンロードして、その上で python --version
を実行してみます。
シェルで以下のコマンドを実行します。
$ docker run python:3.9-slim-buster python --version
docker run
は、Docker イメージをダウンロードしてきて、そのイメージから「Docker コンテナ」を作成して、実行してくれるコマンドです。
Docker イメージは「ひな形」という話をしましたが、その「ひな形」から実際に生成された仮想サーバーみたいなやつが「Docker コンテナ」です。
python:3.9-slim-buster
は、イメージ名:タグ名
になっています。 python
の Docker イメージの、 3.9-slim-buster
を使います、という意味です。
その後ろは、 Docker コンテナ上で実行されるコマンドです。
docker run
すると、コンテナがダウンロードされた後に、python --version
が実行され、 Python のバージョンが出力されるはずです。
Unable to find image 'python:3.9-slim-buster' locally 3.9-slim-buster: Pulling from library/python 69692152171a: Already exists 59773387c0e7: Pull complete 3fc84e535e87: Pull complete 68ebeebdab6f: Pull complete 3d3af2ef8baa: Pull complete Digest: sha256:80b238ba357d98813bcc425f505dfa238f49cf5f895492fc2667af118dccaa44 Status: Downloaded newer image for python:3.9-slim-buster Python 3.9.5
Python を書いて Docker 上で動かす
では、 Python のプログラムと、 Dockerfile
(Docker の設定ファイルのようなものです)を書き、Docker 上で Python を動かしてみます。
ここでは、適当なディレクトリを作成し、その中に、 Dockerfile
というファイルと rss_reader.py
というファイルを作成します。この2つのファイルは同じ場所に作成してください。
最終的に完成したものは GitHub に上げていますので、参考にしてください。
Python のプログラムを書く
今回は、最終的に、RSSを取得するプログラムを作りたいと思っていますが、とりあえず Hello World が動くところを目指します。
rss_reader.py
というファイルを作成し、内容を以下のようにします。
print("Hello World")
ただ Hello World を print するだけのプログラムです。
Dockerfile を書く
Dockerfile
という名前のファイルを作り、中身を以下のようにしてください。
FROM python:3.9-slim-buster COPY rss_reader.py rss_reader.py CMD python rss_reader.py
FROM
は、どの Docker イメージをベースにするかを書きます。今回は、先程も使った Python のイメージを利用します。COPY
は、先程書いたrss_reader.py
を Docker の中に配置する、という意味です。COPY <PC上にあるファイル> <Docker上のどこに置くか>
と書きます。- 今回は、先程作った
rss_reader.py
を、同じ名前で Docker 上に配置しています。
CMD
は Docker コンテナが立ち上がった時に実行されるコマンドです。
Dockerfile の書き方については、『入門 Docker』の以下のページを参考にしてみてください。
https://y-ohgi.com/introduction-docker/2_component/dockerfile/
Docker イメージのビルド
Dockerfile を書いたら、 Dockerfile をもとに、 Docker イメージのビルドをします。
以下のコマンドを実行してください。
$ docker build -t rss-reader .
必ず、 rss_reader.py と Dockerfile があるディレクトリで実行してください。
これにより、 python:3.9-slim-buster
イメージをベースに新しいイメージが作成され、新しいイメージに rss-reader
という名前が付きます。
最後についている .
は「ビルドコンテキスト」というものです。詳細は『入門 Docker』を参照してください。
Docker コンテナの実行
先程ビルドした rss-reader
イメージから、Docker コンテナを実行します。
$ docker run rss-reader Hello World
Hello World
が Docker コンテナ上で実行されました。
ここまでのまとめ
Docker 上で Python の Hello World が動きました。
これにより、 Dockerfile を共有すれば、どんな PC 上でも Python 3.9 で Hello World が動くことになります(PC 上に Python 3.9 がインストールされていなくても動くのです!)。
次回(があれば)、もう少し凝ったプログラムや Dockerfile を書いていこうと思います。
*1:正確には「Linux ディストリビューション」と言われているやつで、 buster は Debian 系の Linux ディストリビューションの1つ、という感じです。