0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Docker Desktopから始める:Linuxサーバー起動からDockerfileによるWebサーバー自動構築まで

Posted at

はじめに

こんにちは。「サーバーを立ててみたいけれど、物理的なマシンは持っていないし、クラウドサービスはまだ敷居が高く感じる...」そんな悩みをお持ちではありませんか?

そんな方におすすめなのがDockerです。Dockerを活用することで、自分のPC上で安全かつ手軽にサーバー構築の練習を始めることができます。

この記事では、Windows PC上にすでにインストールされているDocker Desktopを使用し、コマンド操作でLinuxサーバーを立ち上げるところから始まり、最終的にはDockerfileを用いてWebサーバー構築を自動化するまでの全工程を、実際につまずいた点も含めて詳しく解説いたします。

この記事の対象読者

  • インフラの学習を始めたばかりの方
  • 「Dockerって一体何?」という基礎から知りたい方
  • 自分のPC上で安全にサーバー構築を体験してみたい方

Step 1: PowerShellの準備と起動

まず、作業環境を整えましょう。今回はWindows標準搭載のPowerShellを使用します。PCにはDocker Desktopがすでにインストールされている前提で進めてまいります。

PowerShellの起動方法:

  1. Windowsキー + R を押下
  2. 「powershell」と入力してEnterキーを押す
  3. PowerShellウィンドウが開きます

Step 2: 手作業によるLinuxサーバーの構築と操作

2-1. Ubuntuイメージのダウンロード

まずは、Linux系OSとして人気の高い「Ubuntu」の設計図(イメージ)をダウンロードします。これは、実際のサーバー環境を模擬するためのベースとなるものです。

docker pull ubuntu

このコマンドにより、Docker Hub(Dockerの公式リポジトリ)からUbuntuの最新イメージがローカルPCにダウンロードされます。
スクリーンショット 2025-09-11 144211.png

2-2. Ubuntuコンテナの起動と接続

次に、ダウンロードしたイメージを使用して、実際にコンテナ(仮想的なサーバー環境)を起動し、その内部にアクセスします。

docker run -it --rm --name my-ubuntu-server ubuntu bash

各オプションの説明:

  • -it: インタラクティブモード(対話的にコマンドを実行可能)
  • --rm: コンテナ停止時に自動削除
  • --name my-ubuntu-server: コンテナに分かりやすい名前を付与
  • ubuntu: 使用するベースイメージ
  • bash: 起動時に実行するコマンド(Bashシェル)

このコマンドを実行すると、PowerShellのプロンプトが PS C:\...> から root@xxxxxxxxxxxx:/# に変化します。これで、あなたのPC内に隔離されたLinuxサーバー環境が起動し、その中を直接操作している状態になりました。

2-3. 基本的なLinuxコマンドの実践

コンテナ内で、基本的なLinuxコマンドを実際に実行してみましょう。これらのコマンドは、今後のサーバー管理において必須のスキルとなります。

# 現在のディレクトリ内のファイル・フォルダを詳細表示
ls -la

# 新しいディレクトリを作成
mkdir my-first-dir

# 作成したディレクトリに移動
cd my-first-dir

# テキストファイルを作成し、内容を書き込み
echo "Hello from Docker!" > hello.txt

# ファイルの内容を確認
cat hello.txt
# 出力: Hello from Docker!

Step 3: Webサーバー(Nginx)の構築と起動

3-1. ポートフォワーディング設定付きでのコンテナ起動

Webサーバーを外部からアクセス可能にするため、一度コンテナから退出(exitコマンド)し、今度はポートフォワーディング設定を含めて再起動します。

# PCの8080番ポートをコンテナの80番ポートに転送
docker run -it --rm --name my-web-server -p 8080:80 ubuntu bash

ポートフォワーディングについて:
-p 8080:80は「PC側の8080番ポートへのアクセスを、コンテナ内の80番ポートに転送する」という意味です。これにより、ブラウザからlocalhost:8080でアクセスすると、コンテナ内のWebサーバーにアクセスできるようになります。

【補足】ポートフォワーディングとは?
私も最初はこの概念がよく分からなかったのですが、AIに聞いたところ「特定の窓口に来た通信を、別の担当窓口へ繋いでくれる受付係」のようなものだと分かりました。
コンテナはPCとは隔離された独立した部屋なので、この「受付係」がいないと、外から来たお客さん(ブラウザからのアクセス)は、部屋の中にいるWebサーバー担当者までたどり着けない、というわけです。

3-2. Nginxのインストールと起動

コンテナ内で以下のコマンドを順次実行し、Nginxウェブサーバーをセットアップします。

# パッケージリストの最新化
apt-get update

# Nginxのインストール(-yオプションで確認をスキップ)
apt-get install -y nginx

# Nginxサービスの開始
service nginx start

3-3. Webサーバーの動作確認

ブラウザを開き、アドレスバーにhttp://localhost:8080を入力してアクセスしてください。

**"Welcome to nginx!"**のページが表示されれば、Webサーバーの構築に成功です!これで、あなたのPC内に立てた仮想サーバーが正常に動作していることが確認できました。
スクリーンショット 2025-09-11 140349.png


Step 4: カスタムWebページの作成

4-1. HTMLファイルの編集

デフォルトのNginxページを、オリジナルのコンテンツに変更してみましょう。

# Webコンテンツが格納されているディレクトリに移動
cd /var/www/html

# テキストエディタ「nano」のインストール
apt-get install -y nano

# HTMLファイルの編集
nano index.nginx-debian.html

4-2. HTMLコンテンツのカスタマイズ

nanoエディタが起動したら、<h1>タグ内のテキストなど、お好みの内容に変更してください。編集完了後は以下の手順で保存します:

  1. Ctrl + Xを押す
  2. Yを押して変更を確認
  3. Enterキーを押して保存完了

ブラウザをリロード(F5キー)すると、変更した内容が反映されているはずです。


Step 5: Dockerfileによる構築の自動化

これまでの手動による構築作業を、Dockerfileを用いて自動化します。これは**Infrastructure as Code(IaC)**という現代的なインフラ管理手法の基礎となります。

5-1. つまずきやすいポイントと解決策

実際の作業中に遭遇した典型的なエラーとその対処法をご紹介します:

エラー1: 環境の混同

現象: PowerShellコマンドNew-ItemをLinuxコンテナ内で実行してしまい、「command not found」エラーが発生

原因: PC側(PowerShell)とコンテナ内(Linux)のコマンド体系が異なることを理解していなかった

【補足】ホストOSとゲストOSの違い
このエラーを通じて、私は「ホストOS」と「ゲストOS」の違いを痛感しました。簡単に言うと、これは「大家さん(ホストOS = Windows)」と「間借りしている人(ゲストOS = コンテナのUbuntu)」の関係です。
New-Itemは大家さんの家のルール(Windowsのコマンド)なので、間借り人の部屋では通じません。この区別を意識することが、Dockerを扱う上でとても重要だと感じました。

解決策: 作業環境を明確に区別し、適切なコマンドを使用する

エラー2: 権限エラー

現象: C:\Windows\System32ディレクトリで作業しようとして「アクセスが拒否されました」エラーが発生

原因: システムディレクトリでの作業は管理者権限が必要

解決策: ユーザーフォルダ(デスクトップなど)で作業を行う

5-2. 作業環境の準備

  1. PCのデスクトップ上に作業用フォルダdocker-nginx-testを作成
  2. PowerShellで該当ディレクトリに移動
cd Desktop\docker-nginx-test

5-3. 必要ファイルの作成

index.html ファイル

<!DOCTYPE html>
<html>
<body>
    <h1>My First Dockerfile!</h1>
    <p>Docker化されたWebサーバーが正常に動作しています。</p>
</body>
</html>

Dockerfile ファイル

# ベースとなるOSイメージを指定
FROM ubuntu:latest

# Nginxのインストール処理を自動化
RUN apt-get update && apt-get install -y nginx

# ローカルのHTMLファイルをコンテナ内の公開ディレクトリにコピー
COPY index.html /var/www/html/

# コンテナ起動時にNginxをフォアグラウンドで実行
CMD ["nginx", "-g", "daemon off;"]

5-4. カスタムDockerイメージのビルド

Dockerfileを基に、独自のDockerイメージを作成します。

docker build -t my-nginx-image .

コマンドの説明:

  • build: イメージをビルド
  • -t my-nginx-image: 作成するイメージに名前を付与
  • .: 現在のディレクトリのDockerfileを使用

5-5. カスタムイメージからのコンテナ起動

docker run -it --rm --name my-custom-server -p 8080:80 my-nginx-image

ブラウザでhttp://localhost:8080にアクセスすると、**"My First Dockerfile!"**というメッセージが表示され、Dockerfileによる自動化構築が成功したことを確認できます。
スクリーンショット 2025-09-11 143600.png

AIチューターとの学習プロセス

今回の学習は、AIとの対話形式で進めました。具体的には、以下のような形でAIを活用しました。

エラーの即時解決: command not foundAccess is deniedといったエラーが出た際に、その原因と解決策をすぐに質問し、長時間悩むことなく次のステップに進めました。

概念の言語化: 「ポートフォワーディングとは?」「ホストOSとゲストOSの違いは?」といった疑問を投げかけ、自分の理解を深める手助けをしてもらいました。

ポートフォワーディングとは?特定の窓口に来た通信を、別の担当窓口へ繋いでくれる受付係のようなもの

記事構成の壁打ち: このQiita記事の構成や表現についても、AIに相談しながらまとめることで、思考を整理しやすくなりました。

AIを「答えを教えてくれる魔法の箱」としてではなく、**24時間いつでも付き合ってくれる優秀なチューター(家庭教師)**として活用することで、学習効率が劇的に向上すると感じています。

まとめ

学習で得られた知見

  1. Docker環境の理解: Dockerを活用することで、物理サーバーやクラウドサービスを使わずとも、自分のPC上で本格的なサーバー構築の学習が可能

  2. 環境の分離概念: 「PC側(ホストOS)」と「コンテナ内(ゲストOS)」という2つの独立した環境を適切に理解し使い分けることの重要性

  3. Infrastructure as Codeの実践: 手動での構築作業をDockerfileによって自動化し、再現可能で管理しやすいインフラ環境を構築する手法

今後の学習ステップ

  • より複雑なWebアプリケーションのコンテナ化
  • Docker ComposeによるマルチコンテナアプリケーションApache、MySQL等)の構築
  • クラウドサービス(AWS、Azure等)でのDocker活用

最後に

Dockerという技術を通じて、失敗を恐れることなく何度でもサーバー環境の構築と破棄を繰り返すことができます。これにより、インフラ技術の学習において重要な「試行錯誤の経験」を安全かつ効率的に積むことが可能になります。

この記事が、これからDockerやインフラ技術の学習を始められる皆様にとって、有用なスタートガイドとなれば幸いです。私も引き続き学習に励みますので、一緒に頑張りましょう!

本記事は個人的な学習記録として作成しており、より良い方法や追加の情報がございましたら、ぜひお教えいただけますと幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?