Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】100 Days of DevOps: Day 41

2025年09月13日に「Dev.to」が公開したITニュース「100 Days of DevOps: Day 41」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Apacheサーバーを動かすカスタムDockerコンテナの作成手順を解説。まずDockerfileでベースOSやApache設定を定義する。次に、そのDockerfileからDockerイメージをビルドし、最後にビルドしたイメージからコンテナを起動する。これにより、指定ポートでApacheが動作する。

出典: 100 Days of DevOps: Day 41 | Dev.to公開日:

ITニュース解説

システムエンジニアを目指す皆さんにとって、現代のITインフラを理解する上で「コンテナ」という技術は避けて通れない重要なテーマだ。今回は、Dockerというツールを使って、自分だけのWebサーバーを動かす方法を具体的に見ていこう。

まず、Dockerとは何かを簡単に説明する。Dockerは、アプリケーションとその実行に必要なすべてのものを「コンテナ」という隔離された環境にまとめて動かすためのプラットフォームだ。従来の仮想マシンがOS全体をエミュレートするのに対し、コンテナはホストOSのカーネルを共有し、その上でアプリケーションと依存関係だけをパッケージ化するため、起動が高速で、リソース消費も少ないという特徴がある。これにより、開発環境と本番環境の差異をなくし、どこでも同じように動作するアプリケーションを簡単にデプロイできるようになる。

今回の目標は、ApacheというWebサーバーをDockerコンテナとして動かすことだ。そのために、主に三つのステップを踏む。一つ目は、コンテナの設計図となる「Dockerfile」を作成すること。二つ目は、そのDockerfileを元に「Dockerイメージ」をビルドすること。そして三つ目は、ビルドしたイメージから実際に「Dockerコンテナ」を起動することだ。

最初のステップは、Dockerfileの作成である。Dockerfileは、私たちが作りたいコンテナがどのような構成で、どんなソフトウェアをインストールし、どのように起動するのかを記述するテキストファイルだ。ファイル名は必ず「Dockerfile」とし、大文字のDで始める。今回の例では、/opt/docker/Dockerfileという場所に作成する。

このDockerfileには、以下の内容を記述する。 FROM ubuntu:24.04は、ベースとなるOSを指定する行だ。今回はUbuntu 24.04という、LinuxベースのOSを使用する。これは、料理で例えるなら「どの種類の生地を使うか」を決めるようなものだ。 RUN apt-get update && apt-get install -y apache2は、コンテナ内で実行するコマンドを指定する。ここでは、まずパッケージリストを更新し、次にApache2というWebサーバーソフトウェアをインストールしている。apt-getはUbuntuでソフトウェアを管理するためのコマンドで、-yオプションは確認メッセージに対してすべて「yes」と答えることを意味する。 RUN sed -i 's/^Listen 80$/Listen 5003/' /etc/apache2/ports.confは、Apacheの設定ファイルを編集するコマンドだ。通常、ApacheはデフォルトでHTTPの標準ポートである80番ポートでリクエストを待ち受けるが、ここではsedコマンドを使って、その待ち受けポートを5003番に変更している。sedはテキストファイルを編集するための強力なツールで、この行は/etc/apache2/ports.confファイル内の「Listen 80」という行を「Listen 5003」に置き換える指示だ。特定のポートを使いたい場合や、複数のWebサーバーを一台で動かす場合などに、このようにポートを変更することがよくある。 EXPOSE 5003は、このコンテナが5003番ポートでサービスを提供することを宣言する。これはあくまで「このコンテナは5003番ポートを使いますよ」という情報開示のようなもので、実際に外部からアクセスできるようにするためには、後述する別の設定が必要になる。 CMD ["apache2ctl", "-D", "FOREGROUND"]は、コンテナが起動したときに実行されるコマンドを指定する。ここでは、Apacheをフォアグラウンド(前面)で起動するように指示している。Dockerコンテナは、このCMDで指定されたプロセスが動き続けている間だけ起動し続けるため、Webサーバーのように常に稼働しているべきアプリケーションはフォアグラウンドで動かすのが一般的だ。

Dockerfileを作成し保存したら、次のステップは「Dockerイメージのビルド」だ。Dockerイメージとは、Dockerfileに書かれた指示がすべて実行され、アプリケーションと設定がパッケージ化された状態のスナップショットのようなものだ。このイメージは一度作ってしまえば、何度でも再利用できる。 ビルドを実行するには、Dockerfileがあるディレクトリでsudo docker build -t nautilus-apache .というコマンドを使う。sudoは管理者権限でコマンドを実行するためのものだ。docker buildがイメージをビルドするコマンドで、-t nautilus-apacheは、これから作るイメージにnautilus-apacheという名前を付ける(タグ付けする)ことを意味する。そして、最後の.(ドット)は、現在のディレクトリにあるDockerfileを使ってビルドすることを指示している。このコマンドを実行すると、DockerはDockerfileの各行を順番に実行し、ベースイメージのダウンロードから始まり、Apacheのインストール、設定変更など、すべての工程を経てイメージが作成される。成功すると「FINISHED」というメッセージが表示され、指定した名前で新しいDockerイメージが完成する。

最後のステップは、ビルドしたDockerイメージから「Dockerコンテナを起動」することだ。コンテナは、Dockerイメージを実際に動かすインスタンス(実体)であり、アプリケーションが実行される隔離された環境である。 コンテナを起動するには、sudo docker run -d -p 5003:5003 nautilus-apacheというコマンドを実行する。 docker runがコンテナを起動するためのコマンドだ。 -dオプションは「デタッチドモード」と呼ばれるもので、コンテナをバックグラウンドで実行することを意味する。これにより、コマンドを実行したターミナルが占有されることなく、他の作業を続けられる。 -p 5003:5003は「ポートマッピング」と呼ばれる重要な設定だ。これは、ホストマシン(あなたのPCやサーバー)の5003番ポートへのアクセスを、コンテナ内部の5003番ポートに転送するという指示だ。前述のEXPOSE 5003がコンテナ内部でのポート使用を宣言するだけだったのに対し、この-pオプションは、実際に外部(ホストマシンやネットワーク)からコンテナ内のApacheサーバーにアクセスできるようにするための設定だ。 最後のnautilus-apacheは、どのDockerイメージからコンテナを起動するかを指定している。今回は、先ほどビルドしたnautilus-apacheイメージを使用する。 このコマンドを成功裏に実行すると、長い英数字の文字列(コンテナID)が表示され、nautilus-apacheコンテナがバックグラウンドで起動し、ホストマシンの5003番ポートを通じてApache Webサーバーがアクセス可能な状態になる。これで、あなたは自分だけのカスタムWebサーバーコンテナを正常にデプロイできたことになる。

この一連の作業は、アプリケーション開発やシステム運用において非常に強力な手法となる。環境構築の手間を省き、どこでも同じ動作を保証できるDockerの仕組みを理解することは、システムエンジニアとしてのスキルを大きく向上させるだろう。

関連コンテンツ

関連IT用語