【Docker基礎】さまざまなコンテナ

 Docker の魅力のひとつは、あらゆるソフトウェアをコンテナ化できることです。Web サーバやデータベース用のコンテナはもちろん、単に Linux OS だけを詰め込んだコンテナや、プログラミング言語の実行環境を備えたコンテナなど、その種類は多岐にわたります。

 ここでは、いくつか代表的なイメージと、それらの起動時に使われるオプションや引数の例を紹介します。すでに Docker のコマンドがひととおり使えるようになっていれば、こうしたコンテナを「作っては捨てる」を繰り返しながら、簡単に試すことができるはずです。


Linux OS のみ入ったコンテナ

 純粋な Linux OS をコンテナとして動かすことで、OS レベルでの実験やツールの実行を行うことができます。これらのコンテナは シェル操作 を前提とするため、-d(デタッチドモード)は通常使わず、代わりに -it(インタラクティブモード + TTY)を指定し、バッシュなどのシェルで操作する場合が多いです。

イメージ名コンテナの内容実行によく使われるオプションと引数
ubuntuUbuntu-it を指定、引数に /bin/bash などのシェルコマンドを指定
centosCentOS同上
debianDebian同上
fedoraFedora同上
busyboxBusyBox同上(最小限のシェル環境。/bin/sh など)
alpineAlpine Linux同上(超軽量の Linux ディストリビューション)

実行例(Ubuntu コンテナに入る)

docker run -it ubuntu /bin/bash

ポイント

  • これで Ubuntu のシェルにログインした状態になる。
  • exit コマンドで出ると、そのコンテナは終了する(デフォルト設定)。

Web サーバやデータベースサーバ用のコンテナ

 Web サーバー(Apache / Nginx)や、データベース管理ソフト(MySQL / PostgreSQL / MariaDB)などは、ネットワーク通信を前提として動作するため、-p(ポートマッピング)を指定するのが典型的です。また、Web サーバや DB サーバは常時動かしておきたいことが多いので、-d(バックグラウンド)で起動するケースがほとんどです。

イメージ名内容実行によく使われるオプションと引数
httpdApache Webサーバ-d(バックグラウンド), -p(ポートマッピング)
nginxNginx Webサーバ同上
mysqlMySQL DB-d(バックグラウンド), -e MYSQL_ROOT_PASSWORD=...(rootパスワード指定)
postgresPostgreSQL-d , -e POSTGRES_PASSWORD=...
mariadbMariaDB-d , -e MYSQL_ROOT_PASSWORD=...

実行例(Nginx をバックグラウンドで動かす)

docker run -d -p 8080:80 --name my-nginx nginx

ポイント

  • -p 8080:80 でホストの 8080 番ポートにアクセスすると、コンテナの 80 番ポートへ転送される。
  • --name my-nginx でコンテナ名を指定

プログラムの実行環境やその他ソフトウェア

 プログラミング言語や、クラウドアプリケーションなどの実行環境が、公式イメージとして数多く提供されています。たとえば Java(openjdk)や Python、PHP、Ruby、Node.js などはもちろん、WordPress や Redmine などのアプリも “そのままコンテナ化” されたイメージが用意されています。

イメージ名内容実行によく使われるオプションと引数
openjdkJavaの実行環境-d は付けずに、引数で java コマンドを指定してツールを実行
pythonPythonの実行環境同上。引数に python コマンドなどを指定
phpPHPの実行環境Webサーバ入り or コマンドのみのものなど、タグで区分
rubyRubyの実行環境同上。Webサーバ入り or コマンドのみなど
perlPerlの実行環境同上。perl コマンドを引数に渡して実行
gccC/C++のコンパイラgcc コマンドを実行したり、短期ジョブとして使う
nodeNode.jsJSアプリを実行する際に便利
registryDockerレジストリ-d バックグラウンド + -p ポートマッピング
wordpressWordPress CMS-d バックグラウンド、-p ポート指定、MySQL接続用の環境変数指定
nextcloudNextCloud-d バックグラウンド、-p ポート指定
redmineRedmine (チケット管理)-d バックグラウンド、-p ポート指定。DB (MySQL/Postgres) が必要

実行例(Node.js のコンテナを起動して対話的に JS を実行)

docker run -it node

ポイント

  • -it でコンソールに入り、node コマンドを入力すれば JS インタープリタとして使える。
  • -d を付けないのは、バックグラウンドではなく 対話的に操作したいから

まとめ

  1. Linux OS のみのコンテナ
    ・Ubuntu / CentOS / Debian / Alpine など各種ディストリビューション
    -it オプションを付け、シェル(/bin/bash など)を実行して操作する。
  2. Webサーバ / DBサーバ用コンテナ
    ・Apache (httpd), nginx, MySQL, PostgreSQL など
    -d バックグラウンド実行 + -p(ポート) + DB系は -e(環境変数)でパスワードなど指定
  3. プログラミング言語 / その他ソフトウェア
    ・Java / Python / Node.js / WordPress / Redmine など公式イメージが多数
    ・用途に合わせて -d or -it を使い分ける。

 Docker Hub にはこれら以外にも非常に多くのイメージが存在し、まさに ソフトウェアの数だけコンテナがある といっても過言ではありません。最初は興味を持ったものから試してみて、「作っては捨てる」 を実践しながら Docker の扱いに慣れていきましょう。