このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】イメージにソフトウェアをインストールする方法

Dockerイメージは、特定のアプリケーションやサービスを実行するための軽量でポータブルな実行環境を提供しますが、デフォルトのDockerイメージには必要なすべてのソフトウェアが含まれているわけではありません。特定のアプリケーションに依存する追加のライブラリ、ツール、またはパッケージなどが必要な場合があります。
そのような場合、Dockerイメージに特定のソフトウェアをインストールしてオリジナルのイメージを作成する必要があります。このためには、Dockerfileと呼ばれるテキストファイルを使用して、Dockerイメージのビルドプロセスを定義します。Dockerfileには、基本となるベースイメージの指定や追加のパッケージのインストール手順が含まれます。
ソフトウェアをインストールするためには、一般的にパッケージマネージャーのコマンドを使用します。しかし、異なるディストリビューションでは異なるパッケージマネージャーが利用されています。例えば、DebianやUbuntuではapt、CentOSやRed Hat Enterprise Linuxではyum、Alpine Linuxではapkなどが使われます。
したがって、Dockerfileを作成する際には、対象となるディストリビューションに合わせて適切なパッケージマネージャーのコマンドを使用する必要があります。それによって、特定のソフトウェアをDockerイメージにインストールし、必要な環境を構築することが可能になります。
パッケージマネージャーの種類
以下は、一般的なパッケージマネージャーとそれらが使用される主要なディストリビューションの表です。
パッケージマネージャー | ディストリビューション |
---|---|
apt | Debian, Ubuntu |
yum | CentOS, Red Hat Enterprise Linux |
dnf | Fedora |
apk | Alpine Linux |
これらのパッケージマネージャーは、それぞれのディストリビューションに固有のものであり、ソフトウェアのインストールや管理に使用されます。Dockerfileで特定のディストリビューション向けにパッケージマネージャーのコマンドを使用することで、Dockerイメージにソフトウェアをインストールすることができます。
パッケージマネージャーに適したDockerfileの例
それぞれのパッケージマネージャーに適したDockerfileの例を示します。実際に操作をしながら、それぞれのパッケージマネージャーを使用してPythonをインストールする方法を解説していきます。
Pythonイメージを利用すれば、わざわざPythonをインストールする必要はないのですが、ここでは、あえて、各ディストリビューションのイメージにPythonをインストールしていきます。
不要なDockerオブジェクトの削除
まず、不要なDockerオブジェクトをすべて削除しておきます。
以下のコマンドを実行します。
・「docker system prune -a」コマンドを実行します。
Are you sure you want to continue? [y/N] の質問には「y」と入力します。
PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)
・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。
環境によって削除されずに残っているDockerオブジェクトは異なります。
ディレクトリの移動と作成
作業ディレクトリ(/desktop/docker)に移動してDockerfileを保存するディレクトリを作成します。
以下のコマンドを実行します。
- 「cd desktop/docker」
- 「mkdir py_ubuntu」
- 「mkdir py_centos」
- 「mkdir py_fedora」
- 「mkdir py_alpine」
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir py_ubuntu
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/22 23:44 py_ubuntu
PS C:\Users\joeac\Desktop\docker> mkdir py_centos
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/22 23:44 py_centos
PS C:\Users\joeac\Desktop\docker> mkdir py_fedora
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/22 23:44 py_fedora
PS C:\Users\joeac\Desktop\docker> mkdir py_alpine
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/22 23:45 py_alpine
PS C:\Users\joeac\Desktop\docker>
apt(Debian, Ubuntu)
「code ./py_ubuntu/Dockerfile」コマンドを実行して、下の内容を入力して保存します。
# ベースイメージの指定
FROM ubuntu:latest
# イメージの更新とPythonのインストール
RUN apt-get update && apt-get install -y \
python3 \
&& rm -rf /var/lib/apt/lists/*
このDockerfileでは、ubuntu:latest
をベースイメージとして使用し、apt-get
コマンドを使用してPythonをインストールしています。
コマンド | 意味 |
---|---|
RUN apt-get update | パッケージリストの更新。最新のパッケージ情報を取得する。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
apt-get install -y python3 | python3パッケージをインストールする。-y オプションは、インストール中に確認プロンプトをスキップし、デフォルトで「はい」を選択する。 |
\ | コマンドを複数行にわたって記述する際に使用するエスケープ文字。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
rm -rf /var/lib/apt/lists/* | パッケージリストのキャッシュを削除する。不要なデータをクリーンアップしてイメージのサイズを小さくする。 |
「docker image build -t py_ubuntu:v1 ./py_ubuntu」コマンドを実行します。
PythonがインストールされたUbuntuイメージを作成します。
PS C:\Users\joeac\Desktop\docker> docker image build -t py_ubuntu:v1 ./py_ubuntu
[+] Building 0.0s (0/0) docker:default
2024/04/23 00:13:04 http2: server: error reading preface from client //./pipe/docker_engine: file has already been close[+] Building 24.7s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 243B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 2.4s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:latest@sha256:1b8d8ff4777f36f19bfe73ee4df61e3a0b789caeff29caa019539ec7c9a 1.7s
=> => resolve docker.io/library/ubuntu:latest@sha256:1b8d8ff4777f36f19bfe73ee4df61e3a0b789caeff29caa019539ec7c9a 0.0s
=> => sha256:7af9ba4f0a47d9bc8b1ffa492c6b0276476f1889cf4e699fba2236924e5932ed 2.30kB / 2.30kB 0.0s
=> => sha256:3c645031de2917ade93ec54b118d5d3e45de72ef580b8f419a8cdc41e01d042c 29.53MB / 29.53MB 0.8s
=> => sha256:1b8d8ff4777f36f19bfe73ee4df61e3a0b789caeff29caa019539ec7c9a57f95 1.13kB / 1.13kB 0.0s
=> => sha256:6f6ec53d36a9504f01e3636cf68e0e03761a3b6947a95ba430ae553ee3aaf4d9 424B / 424B 0.0s
=> => extracting sha256:3c645031de2917ade93ec54b118d5d3e45de72ef580b8f419a8cdc41e01d042c 0.7s
=> [2/2] RUN apt-get update && apt-get install -y python3 && rm -rf /var/lib/apt/lists/* 20.4s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:3e5030b05919f623dc88b62210dbfc1d387e6f49b5f251afe12d678730a03475 0.0s
=> => naming to docker.io/library/py_ubuntu:v1 0.0s
View build details: docker-desktop://dashboard/build/default/default/ikstx1etydejc6mxlxtutzdoh
PS C:\Users\joeac\Desktop\docker>
以下のコマンドを使って、コンテナを作成してPythonのバージョンを確認し、コンテナが終了すると自動的にコンテナを削除します。
「docker container run --rm py_ubuntu:v1 python3 --version
」コマンドを実行します。
コマンド | 意味 |
---|---|
docker container run | Dockerコンテナを実行するコマンド。 |
--rm | コンテナが終了した後、自動的にコンテナを削除するオプション。 |
py_ubuntu:v1 | 実行するイメージの指定。py_ubuntu:v1 は、先ほど作成したイメージのタグ。 |
python3 --version | コンテナ内で実行されるコマンド。ここでは、Pythonのバージョンを表示するコマンド。 |
以上のコマンドを組み合わせることで、py_ubuntu:v1
イメージから新しいコンテナを作成し、その中でPythonのバージョンを確認し、コンテナが終了した後に自動的にコンテナを削除することができます。
PS C:\Users\joeac\Desktop\docker> docker container run --rm py_ubuntu:v1 python3 --version
Python 3.10.12
Pythonのバージョンが表示されます。
yum(CentOS, Red Hat Enterprise Linux)
「code ./py_centos/Dockerfile」コマンドを実行して、下の内容を入力して保存します。
# ベースイメージの指定
FROM centos:centos7
# イメージの更新とPythonのインストール
RUN yum update -y && yum install -y \
python3 \
&& yum clean all
このDockerfileでは、centos:latest
をベースイメージとして使用し、yum
コマンドを使用してPythonをインストールしています。
コマンド | 意味 |
---|---|
RUN yum update -y | インストール可能なパッケージの最新バージョンを取得し、システムを更新する。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
yum install -y python3 | Python3パッケージをインストールする。-y オプションは、インストール中に確認プロンプトをスキップし、デフォルトで「はい」を選択する。 |
\ | コマンドを複数行にわたって記述する際に使用するエスケープ文字。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
yum clean all | キャッシュや一時ファイルをクリーンアップする。 |
「docker image build -t py_centos:v1 ./py_centos」コマンドを実行します。
PythonがインストールされたCentoOSイメージを作成します。
PS C:\Users\joeac\Desktop\docker> docker image build -t py_centos:v1 ./py_centos
2024/04/23 00:32:28 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 0.0s (0/0) docker:default
2024/04/23 00:32:28 http2: server: error reading preface from client //./pipe/docker_engine: file has already been close[+] Building 28.7s (6/6) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 225B 0.0s
=> [internal] load metadata for docker.io/library/centos:centos7 1.6s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/centos:centos7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487 3.8s
=> => resolve docker.io/library/centos:centos7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487 0.0s
=> => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB 0.0s
=> => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB 1.7s
=> => sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 1.20kB / 1.20kB 0.0s
=> => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B 0.0s
=> => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 1.9s
=> [2/2] RUN yum update -y && yum install -y python3 && yum clean all 22.5s
=> exporting to image 0.7s
=> => exporting layers 0.7s
=> => writing image sha256:844dd3121c655a06ba1c368963cf467c12e25c3d75789f6c17542112e6ee854f 0.0s
=> => naming to docker.io/library/py_centos:v1 0.0s
View build details: docker-desktop://dashboard/build/default/default/qkgmhqg8ndzdc9mwti31njpk6
PS C:\Users\joeac\Desktop\docker>
以下のコマンドを使って、コンテナを作成してPythonのバージョンを確認し、コンテナが終了すると自動的にコンテナを削除します。
「docker container run --rm py_centos:v1 python3 --version
」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker> docker container run --rm py_centos:v1 python3 --version
Python 3.6.8
Pythonのバージョンが表示されます。
dnf(Fedora)
「code ./py_fedora/Dockerfile」コマンドを実行して、下の内容を入力して保存します。
# ベースイメージの指定
FROM fedora:latest
# イメージの更新とPythonのインストール
RUN dnf install -y \
python3 \
&& dnf clean all
このDockerfileでは、fedora:latest
をベースイメージとして使用し、dnf
コマンドを使用してPythonをインストールしています。
コマンド | 意味 |
---|---|
RUN dnf install -y | dnf パッケージマネージャーを使用して、Python3をインストールする。-y オプションは、インストール中に確認プロンプトをスキップし、デフォルトで「はい」を選択する。 |
python3 | インストールするパッケージの名前。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
dnf clean all | dnf パッケージマネージャーのキャッシュや一時ファイルをクリーンアップする。 |
これらのコマンドを組み合わせることで、dnf
パッケージマネージャーを使用してPython3をインストールし、インストール時に作成されたキャッシュや一時ファイルをクリーンアップします。
「docker image build -t py_fedora:v1 ./py_fedora」コマンドを実行します。
PythonがインストールされたFedoraイメージを作成します。
PS C:\Users\joeac\Desktop\docker> docker image build -t py_fedora:v1 ./py_fedora
2024/04/23 00:38:09 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 0.0s (0/0) docker:default
2024/04/23 00:38:09 http2: server: error reading preface from client //./pipe/docker_engine: file has already been close[+] Building 31.7s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 207B 0.0s
=> [internal] load metadata for docker.io/library/fedora:latest 2.3s
=> [auth] library/fedora:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/fedora:latest@sha256:61864fd19bbd64d620f338eb11dae9e8759bf7fa97302ac6c43865c48dc 3.1s
=> => resolve docker.io/library/fedora:latest@sha256:61864fd19bbd64d620f338eb11dae9e8759bf7fa97302ac6c43865c48dc 0.0s
=> => sha256:61864fd19bbd64d620f338eb11dae9e8759bf7fa97302ac6c43865c48dccd679 975B / 975B 0.0s
=> => sha256:830a6bcb5c9b30bfa77479b747a904bed02151e9de7ceeb8a1d117b574571fa4 529B / 529B 0.0s
=> => sha256:5f878605acd6f24f3f11e4085544caf61b046378b31d6b3aa0677a7a3dbe0a17 2.00kB / 2.00kB 0.0s
=> => sha256:353b74d8db1cf655e87c780b9ac49f52ed72dfaa3ecc4bb0e9245e72c98a45b5 64.61MB / 64.61MB 1.4s
=> => extracting sha256:353b74d8db1cf655e87c780b9ac49f52ed72dfaa3ecc4bb0e9245e72c98a45b5 1.6s
=> [2/2] RUN dnf install -y python3 && dnf clean all 26.2s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:0dd752f61272ce656d9767045c571c761400f04d9d0d2323d94ce3731638caee 0.0s
=> => naming to docker.io/library/py_fedora:v1 0.0s
View build details: docker-desktop://dashboard/build/default/default/yz40pyyxtnqlox9vtagl0a9pr
PS C:\Users\joeac\Desktop\docker>
以下のコマンドを使って、コンテナを作成してPythonのバージョンを確認し、コンテナが終了すると自動的にコンテナを削除します。
「docker container run --rm py_fedora:v1 python3 --version
」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker> docker container run --rm py_fedora:v1 python3 --version
Python 3.12.1
Pythonのバージョンが表示されます。
apk(Alpine Linux)
「code ./py_alpine/Dockerfile」コマンドを実行して、下の内容を入力して保存します。
# ベースイメージの指定
FROM alpine:latest
# イメージの更新とPythonのインストール
RUN apk update && apk add --no-cache \
python3
このDockerfileでは、alpine:latest
をベースイメージとして使用し、apk
コマンドを使用してPythonをインストールしています。
コマンド | 意味 |
---|---|
RUN apk update | apk パッケージマネージャーを使用して、パッケージリストを更新する。 |
&& | 前のコマンドが成功した場合にのみ、次のコマンドを実行する。 |
apk add --no-cache | apk パッケージマネージャーを使用して、--no-cache オプションを指定してPython3をインストールする。 |
python3 | インストールするパッケージの名前。 |
これらのコマンドを組み合わせることで、apk
パッケージマネージャーを使用して、パッケージリストを更新し、--no-cache
オプションを指定してPython3をインストールします。
「docker image build -t py_alpine:v1 ./py_alpine」コマンドを実行します。
PythonがインストールされたAlpineイメージを作成します。
PS C:\Users\joeac\Desktop\docker> docker image build -t py_alpine:v1 ./py_alpine
2024/04/23 00:42:40 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 0.0s (0/0) docker:default
2024/04/23 00:42:40 http2: server: error reading preface from client //./pipe/docker_engine: file has already been close[+] Building 5.3s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 201B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 2.3s
=> [auth] library/alpine:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e 0.5s
=> => resolve docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e 0.0s
=> => sha256:4abcf20661432fb2d719aaf90656f55c287f8ca915dc1c92ec14ff61e67fbaf8 3.41MB / 3.41MB 0.3s
=> => sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1ad6b 1.64kB / 1.64kB 0.0s
=> => sha256:6457d53fb065d6f250e1504b9bc42d5b6c65941d57532c072d929dd0628977d0 528B / 528B 0.0s
=> => sha256:05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd 1.47kB / 1.47kB 0.0s
=> => extracting sha256:4abcf20661432fb2d719aaf90656f55c287f8ca915dc1c92ec14ff61e67fbaf8 0.1s
=> [2/2] RUN apk update && apk add --no-cache python3 2.3s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:32df4a7b80af92a0c0956bd324791c3c8daef1ab6ea34dce2f2b2c0a5c39684f 0.0s
=> => naming to docker.io/library/py_alpine:v1 0.0s
View build details: docker-desktop://dashboard/build/default/default/khw6bchsd8c36lfbmnnqurpvm
PS C:\Users\joeac\Desktop\docker>
以下のコマンドを使って、コンテナを作成してPythonのバージョンを確認し、コンテナが終了すると自動的にコンテナを削除します。
「docker container run --rm py_alpine:v1 python3 --version
」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker> docker container run --rm py_alpine:v1 python3 --version
Python 3.11.9
Pythonのバージョンが表示されます。
まとめ
これらのDockerfileを使用することで、それぞれのディストリビューションに適したパッケージマネージャーを使用してPythonをインストールできます。そして、ビルドしたイメージにはPythonが含まれるため、コンテナを実行する際にPythonを利用できます。