iOSアプリやAndroidアプリなどのネイティブアプリの開発で、HTTP/HTTPSでWebサーバーと通信する処理を実装するとき、固定のデータが戻ってきて欲しいということは多々あります。
例えば、XCTestで通信処理のユニットテストを行うときなどです。実装作業中やデバッグ中にはHTTP/HTTPSで通信さえ出来れば良いという場合も多くあります。
そのようなときに便利なのがDockerです。DockerでNginxをコンテナ化して、それと通信しながら実装作業を進めることができます。
コンテナ化して実行する方法
アプリの実装でちょっと通信したいというくらいの軽い使い方なら、以下の様な最低限の手順で実行できます。使いながら、必要に応じて、nginxの設定ファイルを追加するといった使い方で十分です。
Dockerイメージの作成
Dockerfileという名前でファイルを作成し、次のように入力します。
FROM nginx:1.23タグについて
1.23というのはバージョン番号ですが、Dockerfile内での意味はタグです。nginxは1.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ポートに接続されます。
ディレクトリの指定
volumesでnginx内の/usr/share/nginx/htmlディレクトリを、ローカルディレクトリのcontent_homeにマッピングしています。まだ、作っていないフォルダですが、コンテナ内から/usr/share/nginx/htmlにアクセスすると、ローカルファイルシステムのcontent_homeディレクトリにアクセスします。
Webサーバーに配置するファイルの作成
volumesで指定したディレクトリを作ります。Dockerfileやdocker-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 -ddocker-compose upはdocker-compose.ymlを読み込んでサービスを実行します。-dオプションを付けているので、デーモンとして起動します。
接続テスト
Webブラウザで接続できるか確認します。Dockerを動かしているマシンで、Webブラウザから次のURLを開きます。
http://localhost:8080/成功していれば、index.htmlの内容が表示されます。

コンテナを停止する
ターミナルでdocker-compose.ymlを置いたディレクトリに移動し、次のようにdocker-comopseを実行します。
% docker-compose downdocker-compose downはサービスを停止します。
まとめ
Dockerを使うとParallels DesktopやVMware、Virtual Boxで仮想PCを作成するよりも手軽にテストサーバーを用意できます。
また、定義ファイルや配置するファイルも含めて一括でGitで管理できる点も非常に便利です。











