NginxをDockerでコンテナ化して実行する

iOSアプリやAndroidアプリなどのネイティブアプリの開発で、HTTP/HTTPSでWebサーバーと通信する処理を実装するとき、固定のデータが戻ってきて欲しいということは多々あります。

例えば、XCTestで通信処理のユニットテストを行うときなどです。実装作業中やデバッグ中にはHTTP/HTTPSで通信さえ出来れば良いという場合も多くあります。

そのようなときに便利なのがDockerです。DockerでNginxをコンテナ化して、それと通信しながら実装作業を進めることができます。

目次

コンテナ化して実行する方法

アプリの実装でちょっと通信したいというくらいの軽い使い方なら、以下の様な最低限の手順で実行できます。使いながら、必要に応じて、nginxの設定ファイルを追加するといった使い方で十分です。

Dockerイメージの作成

Dockerfileという名前でファイルを作成し、次のように入力します。

FROM nginx:1.23

タグについて

1.23というのはバージョン番号ですが、Dockerfile内での意味はタグです。nginx1.23という名前でバージョン1.23をタグ付けしています。

公式イメージのタグはdockerhubで調べられます。nginxは次のリンクから確認できます。

Composerの定義

docker-compose.ymlというファイルを作成し、次のように入力します。

version: "3"
services:
    nginx:
        build: .
        ports:
            - 8080:80
        volumes:
            - ./content_home:/usr/share/nginx/html

サービスの定義

このファイルではnginxという名前のサービスを定義しています。

イメージの指定

nginxのDockerイメージはbuild: .となっているので、docker-compose.ymlファイルと同じフォルダにあるDockerfileに基づいてビルドするように指定しています。

ポート番号

nginxの通信のポート番号をportsで指定しています。コンテナ内部の80ポートを外部の8080ポートに接続しています。コンテナの外から接続するときは8080ポートに接続すれば、内部の80ポートに接続されます。

ディレクトリの指定

volumesnginx内の/usr/share/nginx/htmlディレクトリを、ローカルディレクトリのcontent_homeにマッピングしています。まだ、作っていないフォルダですが、コンテナ内から/usr/share/nginx/htmlにアクセスすると、ローカルファイルシステムのcontent_homeディレクトリにアクセスします。

Webサーバーに配置するファイルの作成

volumesで指定したディレクトリを作ります。Dockerfiledocker-compose.ymlと同じディレクトリにcontent_homeフォルダを作成します。content_homeディレクトリがWebサーバーのルートディレクトリになります。Webサーバーに配置したいファイルをcontent_homeディレクトリに置きます。

例えば、次のような内容でcontent_home/index.htmlファイルを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8" />
	<title>Simple HTML</title>
</head>
<body>
    <p>Simple HTML in the Docker container.</p>
</body>
</html>

コンテナを実行する

ターミナルでdocker-compose.ymlを置いたディレクトリに移動し、次のようにdocker-composeを実行します。

% docker-compose up -d

docker-compose updocker-compose.ymlを読み込んでサービスを実行します。-dオプションを付けているので、デーモンとして起動します。

接続テスト

Webブラウザで接続できるか確認します。Dockerを動かしているマシンで、Webブラウザから次のURLを開きます。

http://localhost:8080/

成功していれば、index.htmlの内容が表示されます。

Webブラウザから接続する
Webブラウザから接続する

コンテナを停止する

ターミナルでdocker-compose.ymlを置いたディレクトリに移動し、次のようにdocker-comopseを実行します。

% docker-compose down

docker-compose downはサービスを停止します。

まとめ

Dockerを使うとParallels DesktopやVMware、Virtual Boxで仮想PCを作成するよりも手軽にテストサーバーを用意できます。

また、定義ファイルや配置するファイルも含めて一括でGitで管理できる点も非常に便利です。

著書紹介

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次