Docker Alpineとは?
Docker Alpineは、非常に軽量で安全性の高いことで知られるLinuxディストリビューション「Alpine Linux」をDocker用に最適化したバージョンです。これらの特徴から、Docker Alpineは独自のコンテナ化アプリケーションを構築する際のベースイメージとして、多くの開発者に選ばれています。
Docker Alpineの意味、その仕組み、そしてご利用を検討されるべき理由について、引き続きご覧ください。
Alpine Linuxとその主な特徴について
Alpine Linuxは、最小限で軽量な設計を特徴とするLinuxディストリビューションです。この理念を実現するため、以下の2つの主要な特徴を備えています:
- Alpineにデフォルトでインストールされるユーティリティは、BusyBoxによって提供されるもののみです。これは基本的なLinux CLIツール(lsやcdなど)へのアクセスを提供する実行ファイルです。他のほとんどのLinuxディストリビューションとは異なり、Alpineはデフォルトで他のソフトウェアをバンドルしません(ただし、必要に応じて他のアプリケーションをインストールすることは可能です)。
- Alpineはmusl libcを使用しています。これはlibcライブラリの軽量版です。LibcはLinuxアプリケーションの実行に必要なライブラリです。他のほとんどのLinuxディストリビューションでは、より重量級のlibcライブラリであるglibcが使用されています。
Alpineがこれほどミニマルであることは、セキュリティ面でも有利です。デフォルトでインストールされるユーティリティが非常に少ないため、攻撃対象となる領域が極めて小さくなります。
Docker Alpineを使用したAlpine Linuxの実行
ご希望であれば、Alpine Linuxをダウンロードし、ブータブルデバイスを作成して、物理PCに直接インストールすることも可能です。仮想マシン(VM)上にAlpine Linuxをインストールすることも可能です。
ただし、特定のアプリケーションをAlpine Linux上で実行したいだけの場合、代わりにDocker Alpineをご利用になることをお勧めいたします。
Docker Alpineは、Alpine Linuxをベースとした公式のDockerイメージです。Docker Alpineコンテナを実行すると、実際のPCにAlpineをインストールした場合と同等のソフトウェア定義環境が得られます。
つまり、Docker Alpineを利用することで、他のアプリケーションを実行するための軽量なコンテナ環境を構築できます。(必要に応じて、BusyboxやAlpineを試す目的で、Alpine自体をコンテナ内で実行することも可能です。ただし、Alpineは非常に軽量なため、単独ではできることは限られております。)
Docker Alpineを利用するメリット
Docker Alpineは、アプリケーションのホスティングや独自のコンテナイメージ作成のベースイメージとしてご利用いただける、公開されている数百ものコンテナイメージの一つに過ぎません。しかしながら、Docker Alpineには他のコンテナイメージにはない特別な利点があります。
- 非常に軽量であること:Docker Alpineイメージのサイズは3メガバイト未満で、実行に必要なRAMも100メガバイト未満です。これによりダウンロードが高速化されます。また、システムへの負荷が最小限に抑えられることを意味します。
- パッケージマネージャーを備えていること:他の軽量Linuxディストリビューションとは異なり、Alpineにはデフォルトで含まれるソフトウェア以外にも追加ソフトウェアを簡単にインストールできるパッケージ管理ツール(apkと呼ばれる)が提供されています。これは、Docker Alpineをベースイメージとして使用し、コンテナ内に自社アプリケーションをパッケージ化したいが、アプリケーションの実行に追加のライブラリやユーティリティのインストールが必要な場合に特に有用です。
- 完全なオープンソース:Docker Alpine(Alpine Linux全体と同様)は完全に無料かつオープンソースです。つまり、ライセンス料の支払いやライセンス条項違反を心配することなく、Docker Alpineを使用したり、自社コンテナイメージの一部としてその改変版を配布したりすることが可能です。
ただし、Docker Alpineが常に最適な選択肢とは限りません。デフォルトでより多くのライブラリやユーティリティを提供する、より伝統的なLinux環境内でコンテナを実行したい場合は、DebianやUbuntuなどのディストリビューションをベースにしたイメージを使用する方が適しています。
Docker Alpineに代わる、同様に軽量なLinux環境を提供する選択肢も存在します。おそらく最も人気があるのは公式のBusyBox Dockerイメージでしょう。ただし、重要な点として、BusyBoxがデフォルトで提供する機能を超える追加ソフトウェアのインストールが必要な場合には、理想的な選択肢とは言えません。
Docker Alpineの使用方法
Docker Alpineの使用は非常に簡単です。まず始めに、Docker Hubからイメージをダウンロードします。以下のコマンドのように実行してください。
docker pull alpineCode language: Shell Session (shell)
以下のような出力が表示されます
Using default tag: latest
latest: Pulling from library/alpine
213ec9aee27d: Pull complete
Digest: sha256:bc41182d7ef5ffc53a40b044e725193bc10142a1243f395ee852a8d9730fc2ad
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latestCode language: Shell Session (shell)
イメージがダウンロードされた後、以下のコマンドで実行することができます
docker run alpineCode language: Shell Session (shell)
環境内でシェルに接続するには、まず以下のコマンドを実行し、Alpineコンテナに割り当てられたIDを確認してください。
docker psCode language: Shell Session (shell)
出力は、次のようなものになるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b7d5b00f894 alpine "/bin/sh" 44 seconds ago Up 42 seconds agitated_villani
The CONTAINER ID column identifies the container ID, which is 2b7d5b00f894 in this case.
To connect to the container, run a command like the following, being sure to insert the correct container ID for your container:
docker attach 2b7d5b00f894Code language: Shell Session (shell)
コンテナ内に入ったら、Alpineがデフォルトで提供する機能を探索できます。例えば、/binディレクトリにあるすべてのユーティリティの一覧は以下の通りです。
/ # ls /bin
arch echo kill mv setserial
ash ed link netstat sh
base64 egrep linux32 nice sleep
bbconfig false linux64 pidof stat
busybox fatattr ln ping stty
cat fdflush login ping6 su
chattr fgrep ls pipe_progress sync
chgrp fsync lsattr printenv tar
chmod getopt lzop ps touch
chown grep makemime pwd true
cp gunzip mkdir reformime umount
date gzip mknod rev uname
dd hostname mktemp rm usleep
df ionice more rmdir watch
dmesg iostat mount run-parts zcat
dnsdomainname ipcalc mountpoint sed
dumpkmap kbd_mode mpstat setprivCode language: Shell Session (shell)
Ubuntuではデフォルトで/binに数百ものユーティリティが用意されていますが、それに比べると非常に少ない数です!
Docker Alpineへのソフトウェアインストール
Docker Alpine環境にソフトウェアを追加したい場合は、コンテナに接続し、apkユーティリティをご利用ください。利用可能なパッケージの一覧は以下のように表示できます。
apk search -vCode language: Shell Session (shell)
パッケージをインストールするには、apk add パッケージ名という構文を使用します。例えば、Apache Webサーバーをインストールするには、以下のコマンドを実行します:
apk add apache2Code language: Shell Session (shell)
Docker Alpineベースイメージを使用したコンテナの作成
実行中のコンテナ内でapkを使用して追加したソフトウェアは、コンテナがシャットダウンされると消去される点にご留意ください。イメージを基にしたコンテナが実行されるたびに特定のソフトウェアがデフォルトでインストールされた状態のコンテナイメージを作成したい場合は、Alpineをベースとしつつ、必要な変更を加えた新しいイメージを作成することをお勧めいたします。
これには二つの方法がございます。一つは、実行中のDocker Alpineセッションにログインし、必要な変更を加えた後、docker commitコマンドを使用して変更をイメージに永続的に適用する方法です。例えば、
sudo docker commit 2b7d5b00f894 updated-alpineCode language: Shell Session (shell)
このコマンドはコンテナ内部からではなく、コンテナのホストマシンから実行する必要がある点にご留意ください。
二つ目の方法は、Dockerfile(Dockerコンテナの内容を定義する特別なファイル)を作成し、DockerにAlpineをベースイメージとして取得させ、その後で変更を加えるように指示する方法です。例えば、Alpineの上に追加のパッケージをインストールしたい場合、以下のようなDockerfileを作成できます。
FROM alpine:3.14
RUN apk add package1 package 2Code language: Dockerfile (dockerfile)
その後、docker buildコマンドを使用して、ご自身のDockerfileに基づいたカスタムイメージを作成することができます。
まとめ
非常に軽量なLinuxディストリビューションであるAlpine Linuxは、コンテナ化されたアプリケーションを実行するためのシンプルでリソース効率の良い環境を求める開発者に人気の選択肢です。公式のDocker Alpine Linuxイメージのダウンロードは迅速かつ容易であり、基本的なDockerコマンドとAlpineパッケージマネージャーに精通していれば、ご自身のニーズに合わせてDocker Alpineを簡単にカスタマイズすることが可能です。