Edited at

Docker for Macを使ってFirefoxをコンテナ化してみる

More than 3 years have passed since last update.

Docker for Macのダウンロード・リンクが僕にも届きました。ローカルならではのことと言えばやっぱりGUIかな、ということでコンテナでFirefoxを起動する方法を調べてみました。


必要なソフトをインストールする

Homebrewがインストールされていることを前提に話を進めます。必要となるのはsocatとxQuartzで、どちらもHomebrewでインストールすることができます。

brew install socat

brew cask install xquartz-beta


Note: xquartzのベータ版をインストールしている理由は、Yosemite以降のOSではなんらかのバグがあってX11が立ち上がらないといったコメントを見かけて、それに関連したリンクを辿って行くと、ベータでは治ってるという書き込みがあったからです。リンクが古い可能性もあるので、今はベータでなくても問題ないのかもしれません。



Dockerfileを準備してFirefox用のイメージを作る

下記の参考リンクにあるものをそのまま使わせて頂きます。。。

FROM ubuntu:14.04

RUN apt-get update && apt-get install -y firefox

# Replace 1000 with your user / group id
RUN export uid=1000 gid=1000 && \
mkdir -p /home/developer && \
echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
echo "developer:x:${uid}:" >> /etc/group && \
echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
chmod 0440 /etc/sudoers.d/developer && \
chown ${uid}:${gid} -R /home/developer

USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox

Dockerfileを作ったらビルドします。

docker build -t firefox .


Firefoxを起動する

次に、別のターミナルを開いてフォアグラウンドでsocatをスタートさせます。

socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

そしてdocker runでFirefoxを起動します。

docker run -ti --rm -e DISPLAY=192.168.64.1:0 \

-v /tmp/.X11-unix:/tmp/.X11-unix firefox

僕のMacだとDocker用のインターフェースのIPアドレスが192.168.64.1だったのですが、もし違うという方があれば、適宜変更して下さい。うまく出来ていればUbuntuの見慣れたウインドウでFirefoxが開きます。Mac上でUbuntuのウインドウというのはなかなか違和感がありますが、ブラウジングのレスポンスはとても快適です。

最後にオチになりますが、音が出ません。。。

リンク先のコメントではpulseaudioを使って音声をリダイレクトする方法が紹介されていますが、Macではうまくいかないみたいです。時間がある時にまた調べてみますが、やり方を知っている方(あるいは見つけた方)はコメントを下さい。よろしくお願いします。


参考にしたリンク