GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Docker内でNGINXを実行する方法(簡単な自動スケーリング用)

Dockerの最も一般的なワークロードの1つは、Dockerを使用してNGINXやApacheなどのWebサーバーをコンテナ化し、簡単に自動スケーリングおよび管理できる高性能のコンテンツ配信フリートを実行することです。 NGINXで設定する方法を紹介します。

Docker内でのNGINXのセットアップ

Dockerはコンテナ化プラットフォームであり、アプリケーションとそのすべてのコードを1つの管理しやすいコンテナイメージにパッケージ化するために使用されます。これを行うプロセスは、新しいサーバーをセットアップする方法と非常によく似ています。コンテナーは白紙の状態であるため、依存関係をインストールし、コードをビルドし、ビルドアーティファクトをコピーし、コピーする必要があります。任意の構成。幸い、それほど自動化する必要はありません。 NGINXにはすでに公開されているDockerコンテナがあり、アプリケーションの開始点として使用できます。

もちろん、コンテナ化するアプリケーションによっては、これはもう少し複雑になる可能性があります。 WordPressのようなCMSを導入する場合、コンテナは永続的になるように設計されていないため、外部データベースが必要になる可能性があります。特に、WordPressを始めるのに適した場所は、WordPressのDockerコンテナです。

単純なHelloWorldWebページよりも少し複雑なものにするために、新しいプロジェクトディレクトリを作成し、基本的なVue.jsアプリケーションを初期化します。提供するコンテンツによって構成は異なりますが、一般的な考え方は同じです。

プロジェクトのルートで、単にDockerfileという名前の新しいファイルを作成します。 拡張子なし。これはビルド構成として機能します。デフォルトでは、コンテナは空であり、ベースイメージとともにインストールされるアプリケーションと依存関係のみが含まれます。アプリケーションのコードをコピーする必要があります。静的コンテンツを提供するだけの場合、これは簡単ですが、WordPressなどのサーバー側アプリケーションを使用している場合は、追加の依存関係をインストールする必要がある場合があります。

次の設定はかなり基本的なものです。これはノードアプリケーションであるため、npm run buildを実行する必要があります 配布可能なビルドを取得します。 2つの部分からなるコンテナビルドを設定することで、これをすべてDockerfileで処理できます。

FROM node:latest as build-stage
WORKDIR /src
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

FROM nginx as production-stage
RUN mkdir /src
COPY --from=build-stage /src/dist /src
COPY nginx.conf /etc/nginx/nginx.conf

最初の行のFROM コマンドはnodeをプルします Docker Hubのコンテナで、build-stageという新しいコンテナを作成します 。次のcd をそのディレクトリに移動し、package.jsonにコピーします 。次に、npm installを実行します 、次にアプリのコードをコピーしてビルドプロセスを開始します。アプリケーションをソースから構築する必要がある場合は、これと同様のことを行う必要があります。

次の状態はnginxをプルします 本番デプロイメントとして機能するコンテナー。 srcになります ディレクトリを作成し、build-stageからコピーします コンテナ、/src/dist/ /srcへのビルドアーティファクトを含むフォルダー 本番コンテナのフォルダ。次に、NGINX構成ファイルをコピーします。

また、.dockerignoreという名前の新しいファイルを作成することもできます。 、node_modulesを無視するように指示します ローカルビルドからのビルドアーティファクトも同様です。

**/node_modules
**/dist

Dockerfileはnginx.confを参照します 、これも作成する必要があります。 /sites-availableに複数の構成があるより複雑な構成を実行している場合 、NGINX構成用の新しいフォルダーを作成し、それをコピーすることをお勧めします。

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  /var/log/nginx/access.log  main;
  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    location / {
      root   /src;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}

これは単なるHTTPWebサーバーです。 HTTPSを設定する最も簡単な方法は、LetsEncryptのcertbotをローカルで実行し、/etc/letsencrypt/live/example.com/fullchain.pemから証明書をコピーすることです。 生産コンテナに。これらの証明書は90日間有効であるため、定期的に更新する必要があります。コンテナビルドプロセスの一部としてこれを自動化できます。

すべてが整ったら、Dockerビルドを実行できます:

docker build . -t my-app

これにより、コンテナがmy-appとしてビルドされます。 、その後、自由にタグを付けて、最終的な展開のためにECSまたはコンテナレジストリに送信できます。もちろん、最初にdocker runを使用してローカルでテストする必要があります バインディングlocalhost:8080 NGINXインスタンスのポート80へ:

docker run -d -p 8080:80 my-app

ビルドされたイメージを作成したら、それを本番環境にデプロイするのは非常に簡単です。詳細については、AWS ECSでの自動スケーリングコンテナデプロイのセットアップに関するガイドを読むか、自動ビルドとデプロイを処理するためのコンテナーを使用したCI/CDパイプラインのセットアップに関するガイドをお読みください。

関連: PEMファイルとは何ですか。どのように使用しますか?


Docker
  1. 実行中のDockerコンテナでコマンドを実行する方法

  2. Dockerコンテナ内でアプリケーションをインストール、実行、削除する方法–パート2

  3. 停止せずに Docker コンテナ内で Nginx を実行する方法は?

  1. DockerコンテナでNginxを実行する方法:ステップバイステップガイド

  2. DockerコンテナでMySQLを実行する方法:シンプルでわかりやすいガイド

  3. docker コンテナ内で cron ジョブを実行する方法

  1. Dockerを使用してマイクロサービスをデプロイする方法

  2. Dockerfileを使用してDockerイメージを構築する方法

  3. LinodeにDockerを使用してnginxコンテナをデプロイする方法