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」で簡易的な「Webサーバ」を構築する

Posted at

はじめに

こんにちは、Elieと申します。
今回はコンテナ技術であるDockerを用いて簡易的なWebサーバを構築する手順をご紹介します。
まず、なぜDockerで構築するのかについてですが、構築の速さ環境の再現性などでDockerは優れています。
例えば、docker run というコマンド一つでコンテナを構築することが可能ですし、複数コンテナを構築したい場合はdocker-composeを利用すること簡単に制御可能です。
今回はそういった理由からDockerを用いた構築を採用しました。

実行環境

・ホストOS:Ubuntu 22.04.5 LTS(VirtualBox上に構築)
・Dockerバージョン:28.1.1
現在のUbuntuのバージョンを確認したい場合は以下のコマンドで確認可能です。

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy

Dockerのバージョンは28.1.1です。
Dockerのバージョンは以下のコマンドで確認可能です。

$ docker version
Version: 28.1.1
.
.
.

今回の構成(LEMPとは)

今回は、LEMP(Linux + Nginx + MySQL + PHP)構成でWebサーバを構築します。

この構成は非常に多くのWebアプリケーションで使われており、すべてオープンソースのためコストゼロで導入できるのがメリットです。

各コンポーネントの役割は以下のとおりです。

コンポーネント/役割
Nginx/Webサーバ。HTTPリクエストを受け付ける。
PHP/サーバサイドの処理、HTMLページの生成。
MySQL/データベース管理。ユーザ情報などを保持。

それでは早速構築していきましょう!

プロジェクト構成の準備

まず以下のコマンドを実行してください。

$ mkdir docker-lemp
$ cd docker-lemp
$ mkdir nginx php mysql
$ touch docker-compose.yml
$ touch nginx/default.conf php/index.php

すると以下のようなディレクトリ構成になります。
docekr-lemp/
├── docker-compose.yml
├── nginx/
│ └── default.conf
├── php/
│ └── index.php
└── mysql

docker-compose.ymlは複数コンテナを同時に起動させる際に必要なファイルです。
nginx下のdefault.confはNginxを設定するファイルです。
php下のindex.phpは今回は動作確認のためのファイルです。

次に以下のコマンドを実行し、docker-compose.ymlを編集します。

$ vi docker-compose.yml
上のコマンド実行後 i と入力し、INSERTモードへ移行後以下の文字を記述。
version: '1.0'
services:
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./php:/var/www/html
    depends_on:
      - php

  php:
    image: php:8.1-fpm
    volumes:
      - ./php:/var/www/html

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: userpass
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

記述したら、Escキーを押してコマンドモードに移行して、:wqと入力後Enterを押して編集終了。
内容を確認したい場合は以下のコマンドを実行。

cat docker-compose.yml

次にNginx設定ファイルの記述です。(default.conf)

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

次にphpディレクトリ以下のindex.phpを編集します。

vi php/index.php
<?php
phpinfo();
?>

次にコンテナの起動です。
docker-lempディレクトリで以下のコマンドを実行
(pwd で現在のディレクトリを確認できます)

$ docker-compose up -d

すこし時間がかかると思いますが、完了後以下のコマンドを実行してください。

$ docker ps

このコマンドで現在実行されているコンテナを一覧表示します。
Nginx,PHP,MYSQLの3つのコンテナが動作していることを確認してください。
成功していればSTATUSでUPと表示されていればOKです!

そしてWebブラウザで以下のように入力してください。

http://localhost:8080

これで接続できていればLEMP構成のWebサーバの構築は完了です。

どうだったでしょうか?
初めてDockerを触る方やWebサーバを構築する方には難しく感じたと思います。しかし、このLEMP構成は前述したように非常に多くの場面で使われています。例えば、社内の在庫管理や売り上げ管理といったバックオフィス向けの用途であったり、病院や美容室などの予約・顧客管理システムなどです。この構成が基盤となり様々な用途に発展させることができます。
次回は、この構成をより実用的に発展させたものやセキュリティ設定編などの続編を投稿する予定です。
興味がある方は是非フォローをお願いします!

🙌 最後まで読んでいただきありがとうございました!

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?