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 -d
docker-compose up
はdocker-compose.yml
を読み込んでサービスを実行します。-d
オプションを付けているので、デーモンとして起動します。
接続テスト
Webブラウザで接続できるか確認します。Dockerを動かしているマシンで、Webブラウザから次のURLを開きます。
http://localhost:8080/
成功していれば、index.html
の内容が表示されます。
コンテナを停止する
ターミナルでdocker-compose.yml
を置いたディレクトリに移動し、次のようにdocker-comopse
を実行します。
% docker-compose down
docker-compose down
はサービスを停止します。
まとめ
Dockerを使うとParallels DesktopやVMware、Virtual Boxで仮想PCを作成するよりも手軽にテストサーバーを用意できます。
また、定義ファイルや配置するファイルも含めて一括でGitで管理できる点も非常に便利です。