iPhoneのWebアプリでも作って勉強しようと思った。開発には短い間隔で書いて確認の反復が大事。同じネットワークにいるデスクトップPCのWebサーバーへiPhoneからアクセスしたい。カメラ使いたいのでHTTPSでアクセスする必要がある。自己署名証明書やオレオレ認証局だとiPhone側の設定とか面倒くさそう。Let's EncryptならiPhoneで信頼済みの証明書が簡単に手に入る。これを使いたい。
hostsファイルがあればいい。iPhoneにhostsはないらしい。iPhoneのネットワーク設定を見るとipv4のDNSサーバーはルーターのアドレスになってる。ipv6も設定されてるけどよくわかってないから今回は無視する。ルーターはBUFFALO WXR-1900DHP3。ルーターでhostsみたいなことできるやつある。うちのルーターの設定画面にそれっぽい項目がない。
作業中だけDockerでDNSサーバー動かせば解決できる。dnsmasqというのが目的に適っていそう。
dnsmasqをインストールしたdockerイメージを作る
Dockerfile
FROM alpine RUN apk update \ && apk upgrade \ && apk add --no-cache dnsmasq ENTRYPOINT ["dnsmasq", "-k" ,"-u", "root"]
alpine linuxにdnsmasqをインストールするだけ。dnsmasqのオプションの-k
は"keep-in-foreground"。これがないとコンテナがすぐ終了してしまう。dockerはENTRYPOINTのプロセスが終了したらコンテナを終了させる。
docker build
docker build -t dnsmasq - < Dockerfile
何も持っていかないから'-'を指定する。Dockerfileだけ。今回は"dnsmasq"というイメージ名を付けた。
dnsmasqを起動する
docker run -d -p 53:53/tcp -p 53:53/udp --name dns dnsmasq -A /www.example.com/192.168.11.4
tcp:53とudp:53をDockerホストとつなぐ。dnsmasqの-A
オプションで解決したい名前とipを指定する。ここでの"dnsmasq"の文字はイメージの名前。ENTRYPOINTのコマンドの追加の引数として"-A"から後ろの文字が渡される。
Dockerホストのファイアウォール
iPhoneの設定
あとかたづけ
docker rm -f dns
iphoneのWi-Fi設定は「DNSを構成」を自動にして「リースを更新」で元に戻る。
docker build のWARNING
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
Docker for WindowsでLinuxコンテナのbuildをすると必ず表示されるらしい。よくないことが起きたって意味ではなくて、よく確認してねって意味らしい。そもそも今回はpathに-
を指定してるから関係ない。