LoginSignup
82
75

More than 5 years have passed since last update.

テキストエディタも仮想化する時代!DockerイメージとしてインストールしたEmacsのGUIを使う

Last updated at Posted at 2016-10-06

最近Dockerを使っていろいろなものを仮想化するのにはまっており、その産物です。

動機としては、普段使いしているArch Linuxで、emacs-mozcの日本語入力ができないということです。

Docker内にEmacsをインストールして、Emacsの画面をホスト側に映してやろうっていう魂胆です。

環境

  • ホストOS:Arch Linux
  • ゲストOS:Debian GNU/Linux ベース
  • Docker version: 1.12.1

手順

まずはDockerfile。至極単純です。もうちょっとカスタマイズして、emacs-mozcを入れたりしたい。

Dockerfile
FROM debian:latest

RUN apt-get update
RUN apt-get -y install emacs24

RUN useradd -G sudo -u 1000 --create-home emacs

ENV HOME /home/emacs
WORKDIR /home/emacs

CMD /usr/bin/emacs --reverse

このDockerfileがあるディレクトリで、docker build --tag emacs . でビルドします。

次に、Emacsの起動スクリプトを作り、パスの通ったところに設置します。

emacs-docker
#!/bin/bash

xhost +local:
docker run -it --rm \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       -v $HOME:/home/emacs/host_home \
       -e DISPLAY=$DISPLAY \
       --user 1000 \
       emacs

xhost -local:

環境変数でディスプレイを与えているのと、/tmp/.X11-unixをマウントしてXのソケット通信を可能にしています。

あとは起動するだけです。

emacs-docker

こんな感じになりました。ちゃんと動いています。

Screenshot_2016-10-07_01-26-59.png

diredでディレクトリを確認。ちゃんと、ホスト側の$HOMEがコンテナ内にマウントされています。
UIDが一致しているので、Docker実行ユーザー(ここではEmacs)の所有ファイルと認識されています。

Screenshot_2016-10-07_01-30-31.png

注意点

  • HOSTのUIDとコンテナ内のUIDが同一でないと、権限の問題が発生してファイルの編集、作成ができなくなります。
  • DockerやLXCでは、シンボリックリンクが使えないようです。これは場合によってはけっこう面倒。

半分ネタですが、積極的に使っていこうかなと。

追記

@mapk0y
マウントするのは "/tmp" ではなく "/tmp/.X11-unix/" だけのほうが良い気もする。あと スクリプトの最後で "xhost -local:" したほうがいいかも。

というコメントをはてなの方でいただきました。

自分も最初/tmp/.X11-unix/をマウントしましたが、なぜかうまくいかなかったので/tmpごとマウントしてしまいました。雑ですいません。
通常は/tmp/.X11-unix/だけで良いはずですので、そのように修正しました。ありがとうございます。

"xhost -local:"も追記しておきました。

/tmp/.XIM-unixというディレクトリもあるので、もしかしたらXIMの機能だけ仮想環境に置いとくとかもできるんですかね。
夢が広がりますね。

82
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
75