1. 概要

この簡単なチュートリアルでは、[X58X]Dockerコンテナー内でNginxサーバーを実行する方法について説明します。

まず、Dockerfileを使用してDockerイメージを最初から作成することにより、Nginxをインストールして実行します。 その後、公式の NginxDockerイメージから単純なDockerコンテナーを作成します。

2. Dockerfileを使用して最初からNginxイメージを作成する

Nginxは、静的WebページやAPIなどのさまざまなコンテンツを提供するために使用できる強力で高度なWebサーバーです。このセクションでは、必要な手順を含む新しいDockerfileを作成することから始めます。 Nginxイメージの構築と実行。

2.1. 初期設定

まず、新しいディレクトリを作成し、Dockerfileをtouchします。

$ mkdir server
$ touch Dockerfile

これで、Dockerfileにデータを入力する準備が整いました。 通常、Dockerfileの最初のコマンドは、Dockerに別のイメージに基づいてイメージを作成するように指示します

FROM ubuntu

Dockerイメージは、Dockerhubで利用可能な最小限のUbuntuイメージに基づいています。 Dockerfile内の前述のコマンドは、ベースイメージの上に階層化されます。

2.2. Nginxのインストール

次の行では、Dockerにaptを使用して公式パッケージリポジトリからnginxパッケージをインストールするように指示します。

RUN apt-get -y update && apt-get -y install nginx

このコマンドは、最初にパッケージリポジトリの更新を試みます。 それが成功すると、nginxパッケージがインストールされます。

2.3. 構成ファイル

Nginxにはデフォルトの構成ファイルが付属しています。 ただし、独自のNginx構成ファイルがある場合は、Dockerコンテナーの外部でを維持する方がはるかに簡単です。 したがって、Dockerfileと同じディレクトリにNginxのデフォルトの設定ファイルを作成します。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /usr/share/nginx/html;
    index index.html index.htm;

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

設定ファイルをコピーするためのエントリをDockerfileに追加しましょう。

COPY default /etc/nginx/sites-available/default

これで、Dockerイメージをビルドするたびに、Dockerは構成ファイルをターゲットディレクトリにコピーします。

2.4. ポートの公開

次に、サーバーにアクセスするポートを公開するようにシステムに指示します。 この場合、TCPを使用するとポート80になります。

EXPOSE 80/tcp

2.5. Nginxを実行しています

これで、Dockerイメージが起動するたびにNginxを実行します。

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
  • -g オプションは、nginxへのディレクティブを指定します
  • daemon off ディレクティブは、nginxの自己デーモン化動作を無効にします

ディレクティブの最後にある;に注意する必要があります。 指定しないと、予期しない問題が発生する可能性があります。

最後のコマンドを使用すると、Dockerfile全体が次のようになります。

# Pull the minimal Ubuntu image
FROM ubuntu

# Install Nginx
RUN apt-get -y update && apt-get -y install nginx

# Copy the Nginx config
COPY default /etc/nginx/sites-available/default

# Expose the port for access
EXPOSE 80/tcp

# Run the Nginx server
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

2.6. イメージの構築

これで、Dockerfileを処理する準備が整いました。 docker コマンドを使用して、イメージを作成します。

$ docker build . -t haidar/server

これを分解してみましょう:

  • build は、現在のディレクトリのDockerfileからイメージを作成します
  • -t は画像にタグを付けて、簡単に識別できるようにします

コマンドを実行すると、DockerはDockerfile内の各コマンドを順番に実行します。

2.7. イメージの実行

イメージが正常にビルドされたら、テスト実行に使用します。

次のコマンドを発行してサーバーを実行してみましょう。

$ docker run -d -p 80:80 haidar/server

これを分解してみましょう:

  • run サブコマンドは、コンテナーを実行することを指定します
  • -d フラグは、イメージをデタッチモードで実行することを示します
  • -p オプションは、 local-port:container-portの形式でポート番号を示します。 この場合、コンテナのポート80をサーバーのポート80にマッピングしています。
  • 最後の引数nginxは、実行する画像のタグを指定します

ブラウザを起動して、新しく構築されたサーバーを確認しましょう。

3. 公式のNginxイメージを使用してNginxを実行する

ほとんどのLinuxディストリビューションは、デフォルトではNginxに同梱されていません。 したがって、パッケージマネージャーを使用してNginxをインストールするか、ソースからビルドする必要があります。

それだけでなく、新しいリリースがあるときにNginxを維持する必要もあります。 したがって、パッケージマネージャーを使用してNginxを更新するか、ソースからビルドすることはオーバーヘッドになる可能性があります。

そのため、 公式のNginxイメージからNginxをコンテナ化すると、メンテナンスのオーバーヘッドが削減されます。 新しいバージョンのNginxがリリースされると、Dockerコンテナが更新または置き換えられます。

3.1. Nginx用のDockerコンテナの作成

公式のNginxイメージはDockerhubで入手できるため、Nginx用に独自のイメージを作成することを心配する必要はありません。 画像をプルするだけです。

$ docker pull nginx

このコマンドは、必要なすべてのコンポーネントをインストールします。 さらに、イメージには、サーバーを実行するためのプリセット構成も付属しています。

3.2. イメージの実行

NginxDockerコンテナをテスト実行に使用してみましょう。

$ docker run -d --name server -p 80:80 nginx

これらのオプションは前のセクションで見ました。 ただし、 –nameオプションは、コンテナに名前を付けるために使用されます。指定されていない場合はランダムな名前になります

この時点で完了です。 Dockerイメージのステータスを見てみましょう。

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                               NAMES
816532f135c8   server    "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

4. 結論

この記事では、Dockerfileを使用してNginxコンテナーを最初から作成する方法を説明しました。 それとは別に、公式のNginxDockerイメージをプルして実行する方法についても説明しました。