目的
Docker上でGUIアプリケーションを日本語入力可能な状態で動かします。
画面の表示にX11を使うため、Linuxのみで実行可能です。
実行
今回解説するDockerイメージを使って。VSCodeとfirefoxを動かしてみています。
実行方法
firefoxを実行する場合を例に解説します。
Dockerfileの作成
下記の内容をDockerfileという名前のテキストファイルとして保存します。
firefoxを実行するためのDockerファイル
やっていることは、firefoxと関連パッケージのインストール、起動時に実行するコマンドの変更だけです。
作成したら、コンテナイメージを作成します。
(作成済みのコンテナイメージはDockerHubにsabotagecla6/firefox
という名前でPushしています。
firefoxを利用したい場合は、そのコンテナイメージをそのまま利用して貰えばよいです。)
コンテナイメージの作成
Dockerfileをおいているディレクトリをカレントディレクトリに設定して下記のコマンドを実行します。
sudo docker build ./ -t tmp-firefox
コンテナの起動
sudo docker run --net=bridge --shm-size=4096m \
-u $(id -u):$(id -g) \
-v /run/user/1000/pulse/native:/tmp/pulse/native \
-v ~/.config/pulse/cookie:/tmp/pulse/cookie:ro \
-e PULSE_COOKIE=/tmp/pulse/cookie -e PULSE_SERVER=unix:/tmp/pulse/native \
-v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 -e DISPLAY \
-e USER=firefox -e PASSWD=firefox
--rm tmp-firefox
上記コマンドの3行目〜5行目は音を出すためのホストマシンとコンテナ間のファイルの共有とコンテナ環境変数の設定
6行目はコンテナの画面をホスト側に表示するための設定
7行目はコンテナ内のユーザーのユーザーとパスワードを指定します。
省略するとユーザー:パスワードはubuntu:ubuntuになります。
8行目はコンテナの終了の度にコンテナを破棄するための設定です。
ユーザーはホストと同じユーザーID・グループIDを使用しないと音を出さないため、合わせています。
aliasの利用
実行するコマンドかなり長いので、aliasを切っておくと扱いやすいです。
~/.bashrcに下記のコードを追加するとよいです。
alias docker-firefox='docker-display --rm sabotagecla6/firefox'
alias docker-display='docker-sound -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 -e DISPLAY'
alias docker-sound='sudo docker run --net=bridge --shm-size=4096m -u $(id -u):$(id -g) -v /run/user/1000/pulse/native:/tmp/pulse/native -v ~/.config/pulse/cookie:/tmp/pulse/cookie:ro -e PULSE_COOKIE=/tmp/pulse/cookie -e PULSE_SERVER=unix:/tmp/pulse/native'