猫でもわかるWebプログラミングと副業

本業Webエンジニア。副業でもWebエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Python で Hello World して学ぶ Docker の使い方

f:id:yoshiki_utakata:20191224195335p:plain

はじめに

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 にあります。

https://hub.docker.com/

ここで python と検索すると、 Python の Docker イメージが出てきます。

https://hub.docker.com/_/python

f:id:yoshiki_utakata:20210616110103p:plain

Docker Official Images と書いてあるか確認してください。これが書いてあれば公式のイメージです。非公式のイメージは、誰が作っているかわからないので、うかつにダウンロードしないようにしましょう。

下にスクロールしていくと「タグ」の一覧があります。これで、Python のバージョンや、Docker 上で起動する OS のバージョンを選べます。

今回は、 3.9-slim-buster というバージョンを使うことにします。

  • 3.9 は Python のバージョン
  • slim とは、余分なものをなるべく入れないようにした、容量の小さなイメージですよ、という意味
  • buster は OS の種類みたいな感じです(あんまり気にしなくていいです) *1

f:id:yoshiki_utakata:20210616110201p:plain

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 に上げていますので、参考にしてください。

github.com

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つ、という感じです。