【Ubuntu講座第3回】最強のWebサーバー「Nginx」と魔法の箱「Docker」を操る

Linux

【Ubuntu講座最終回】モダンなエンジニアへの進化。Apacheを卒業する日

世界シェアNo.1のLinux OS「Ubuntu(ウブントゥ)」をマスターする短期集中連載、ついに最終回です。

第1回ではUbuntuの概要とVPS構築、第2回ではAPTコマンドによるパッケージ管理を学びました。
ここまでの知識で、あなたはすでに「普通のLinuxサーバー」を構築・管理できる能力を持っています。

しかし、今回の第3回はレベルが違います。
これまでのLAMP環境(Apache)の知識を一旦横に置き、現代のWeb開発やAI開発の現場で「事実上の標準(デファクトスタンダード)」となっている2つの技術を導入します。

  • Nginx(エンジンエックス): Apacheよりも高速で、大量のアクセスをさばけるWebサーバー。
  • Docker(ドッカー): 環境構築の常識を覆した「コンテナ」技術。

これらを使いこなせるようになれば、あなたはもう「サーバー初心者」ではありません。
最先端の現場で戦える「モダンなインフラエンジニア」への第一歩を踏み出しましょう。

コウ君

先生!ついに来ましたね「Docker」!
ネットの記事を見ても「クジラのマーク」が出てくるだけで、何がすごいのか全然わからなかったんです。
あと、ApacheじゃなくてNginxにする理由ってあるんですか?Apacheで十分な気がするんですけど…。

リナックス先生

いい疑問ね。
確かに個人サイトならApacheで十分かもしれないわ。
でも、もしコウ君の掲示板が大ヒットして、1秒間に1万人がアクセスしてきたらどうする?
Apacheだとパンクしてしまうその状況を、涼しい顔でさばけるのがNginxなの。
今日はその「速さの秘密」から解説していくわよ。

本講座のカリキュラム(全3回)

現在地は第3回(最終回)です。

  1. Ubuntu入門編:RHEL系との決定的な違い、ライセンス、そしてVPSでの構築
  2. 基本操作編:さよならyum/dnf!「APT」コマンドとUbuntu流の流儀をマスターする
  3. 【今回】実践活用編:Webサーバー(Nginx)の構築と、Docker/AI開発への応用

Apache vs Nginx:なぜ乗り換えるのか?

Webサーバーソフトには、長らくの王者「Apache(アパッチ)」と、新世代の挑戦者「Nginx(エンジンエックス)」がいます。
(※現在はNginxがシェアNo.1になりつつあります)

決定的な違い:処理の仕方

これを理解するには、レストランのウェイターさんを想像してください。

  • Apache(プロセス駆動):
    お客様1人につき、専属のウェイターが1人つきます。
    注文を聞き、料理を運び、食べ終わるまでずっと横で待機しています。
    丁寧ですが、お客様が100人来たらウェイターも100人必要になり、お店(メモリ)がパンクします。
    これを「C10k問題(クライアント1万台問題)」と呼びます。
  • Nginx(イベント駆動):
    1人のスーパーウェイターが、全てのお客様を対応します。
    「注文聞いた!次!」「料理できた!運ぶ!次!」と、待機時間を作らずに高速で動き回ります。
    少ない人数(メモリ)で、大量のお客様(アクセス)をさばくことができます。

静的な画像を表示したり、大量の同時アクセスをさばくにはNginxが圧倒的に有利です。
一方で、PHPなどの複雑な処理をサーバー内で行うにはApacheの方が設定が楽、という側面もあります。
しかし、現代のWeb開発では「Nginx」を採用するのが主流です。

実践1:UbuntuにNginxをインストールする

それではVPSにSSH接続し、Nginxを導入しましょう。
前回学んだ apt コマンドを使えば一瞬です。

sudo apt update
sudo apt install nginx -y

インストールが終わったら、起動確認をします。

systemctl status nginx

緑色の文字で active (running) と出ていれば成功です。
q キーを押して元の画面に戻ります)

Ubuntu流ファイアウォール「UFW」の設定

ここで注意点です。RHEL系では firewalld を使いましたが、Ubuntuにはもっとシンプルな ufw (Uncomplicated Firewall) というツールが標準で入っています。

Webサーバーの通信(80番ポートなど)を許可するには、以下のコマンドを打ちます。

sudo ufw allow 'Nginx Full'

これで、HTTP(80)とHTTPS(443)の両方が開放されました。
ブラウザでVPSのIPアドレスにアクセスしてみてください。

「Welcome to nginx!」 というシンプルな画面が出れば、インストール完了です!

設定ファイルの罠:sites-available / sites-enabled

Ubuntu版Nginxの最大の特徴は、設定ファイルの管理方法です。
/etc/nginx/ の中に、2つのディレクトリがあります。

  • sites-available(準備室): 設定ファイル置き場。ここに置いただけでは動かない。
  • sites-enabled(本番稼働): ここにあるファイルだけが読み込まれる。

Ubuntuでは、「available」に設定ファイルを書き、「enabled」に向けてシンボリックリンク(ショートカット)を貼ることで設定を有効化します。
「設定ファイルは消したくないけど、一時的に無効にしたい」という時に、リンクだけ消せばいいので非常に管理がしやすいのです。

Docker(ドッカー)とは何か?

さて、ここからが本番です。
インフラ技術の革命児、Dockerについて解説します。

「私の環境では動いたのに!」を無くす魔法

開発現場で一番あるトラブル。
「AさんのPCでは動くのに、BさんのPCではエラーが出る。本番サーバーでも動かない。」
原因は、OSのバージョン、ライブラリのバージョン、設定ファイルの微妙な違いなど様々です。

Dockerは、「アプリを動かすのに必要なOS、ライブラリ、設定、コード全て」を一つの「箱(コンテナ)」に詰め込んでしまいます。

この「箱」さえあれば、WindowsでもMacでも、Ubuntuサーバーでも、全く同じ環境を一瞬で再現できます。
まさに、貨物船に積む「コンテナ」と同じ発想です。

仮想マシン(VM)との違い

今まで使ってきたVirtualBoxなどの「仮想マシン」と何が違うのでしょうか?

項目 仮想マシン (VM) Dockerコンテナ
仕組み ハードウェアごと仮想化する。
中に完全なOSが入っている。
OSの「核(カーネル)」だけホストと共有する。
必要なアプリだけ動かす。
重さ 重い(数GB)。起動に数分かかる。 超軽量(数十MB)。起動は一瞬。
用途 別のOSをしっかり動かす。 アプリを動かす環境を作る。

実践2:UbuntuにDockerを導入する

UbuntuはDockerとの相性が抜群です。
公式のリポジトリを使って、最新版のDockerをインストールしましょう。

apt install docker.io でも入りますが、バージョンが古いことがあるため、以下の「公式手順」を推奨します。

1. 必要なツールのインストール

sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y

2. Docker公式の鍵(GPGキー)を追加

「これは怪しいソフトじゃないよ」と証明するための鍵を登録します。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

3. リポジトリの追加とインストール

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y

少し長いコマンドですが、コピペでOKです。
完了したら、動作確認をしてみましょう。

sudo docker run hello-world

Hello from Docker! というメッセージが表示されれば、構築完了です!

なぜAI開発でUbuntu+Dockerが必須なのか?

コウ君

先生、インストールはできましたけど、これがどうAI開発に繋がるんですか?

リナックス先生

AI開発、特にディープラーニングは環境構築が地獄なのよ。
Pythonのバージョン、GPUドライバのバージョン、ライブラリの依存関係…。
一つでもズレると動かないの。
でも、世界中の研究者が「動く環境をDockerコンテナにして配布」してくれているのよ。

例えば、あなたが最新のAIモデルを使いたいとします。
一から環境を作ると数日かかりますが、Ubuntu上でDockerを使えば、以下のようなコマンド一発で環境が整います。

# ※例(実際には実行しないでください)
docker run -it pytorch/pytorch:latest

これが、世界中のAI開発者がWindowsではなく、Macでもなく、「Ubuntu + Docker」を選ぶ最大の理由です。

最終課題:DockerでWebサーバーを立ち上げる

最後に、Nginxを「直接インストール」するのではなく、「Dockerコンテナ」として起動してみましょう。
これができれば、あなたはサーバーを汚さずにアプリを動かせるようになります。

1. 既存のNginxを停止する

ポート80番が重複してしまうので、先ほどaptで入れたNginxは止めておきます。

sudo systemctl stop nginx

2. Nginxコンテナを起動する

魔法のコマンドです。

sudo docker run -d -p 80:80 --name my-webserver nginx

解説:

  • -d : バックグラウンドで動かす。
  • -p 80:80 : サーバーの80番ポートへのアクセスを、コンテナの80番ポートに繋ぐ。
  • nginx : Nginxの公式イメージを使う。

ブラウザで再度アクセスしてみてください。
先ほどと同じ「Welcome to nginx!」が表示されるはずです。
しかし、今回はサーバーに直接インストールされたものではなく、「コンテナという隔離された箱の中で動いているNginx」が表示されています。

いらなくなったら docker stop my-webserverdocker rm my-webserver で跡形もなく消すことができます。
これこそが、サーバーを汚さない美しい開発スタイルです。

Ubuntu講座まとめと、次なるステップ

全3回のUbuntu講座、お疲れ様でした!
これであなたは、以下のスキルを手に入れました。

  • RHEL系とDebian系の違いを理解し、OSを選定できる。
  • APTコマンドを使ってパッケージ管理ができる。
  • 高速なWebサーバーNginxを扱える。
  • Dockerを使って、環境に依存しない開発ができる。

ここから先は、Pythonを勉強してAIアプリを作ってみるもよし、WordPressをDockerで立ち上げてみるもよし。
Ubuntuという自由な大地の上で、あなたの作りたいものを自由に創造してください。

インフラの知識は、あなたのエンジニア人生を支える「最強の土台」になります。
これからの活躍を応援しています!

リナックス先生

AlmaLinuxもUbuntuも使えるなんて、もう立派なインフラエンジニアね。
新しい技術はどんどん出てくるけど、基本さえ押さえていれば怖くないわ。
困ったときは、またこのサイトに戻ってきなさい。いつでも待ってるわよ!

▼Ubuntu × Dockerを試すならこのVPS(推奨)

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント