Giter VIP home page Giter VIP logo

docker-emacs's Introduction

Dockerized Emacs with GUI(Mac, Windows, GNU/Linux and your browser)

Images are clickable

http://i.imgur.com/rONW3c3.jpg http://i.imgur.com/mjl9ALQ.jpg http://i.imgur.com/RB46TA9.jpg

docker-x11-bridge + a web browser https://github.com/JAremko/docker-x11-bridge/raw/master/img/demoHD.jpg

Why?

  • Reap the benefits of Emacs and other GNU/Linux tools on Windows/MacOS machines
  • Use docker hub to auto-build your environment and store full backups for free
  • Build once and work with the same development environment everywhere
  • Run untrusted/risky code in the tunable sandbox with CPU/network/disk quotas
  • Try new tools, experiment and roll back changes when something goes wrong
  • Share your setup with others or extend someone else’s development environment
  • Run multiple Emacs instances on the same machine isolated
  • An easy way to swap Emacs version (emacs26,emacs25,emacs-snapshot) for debugging
  • Pause container to free resources temporarily
  • Checkpoint & Restore - maybe the fastest way to start a “heavy” environment
  • Friendly for networks with low upload speed/quotas

Tags:

If you need a different Emacs version/configuration checkout Silex/docker-emacs

How to use

First get docker for your OS. Then you can use one of the images as a base(FROM) for your Dockerfile. Simple example, Spacemacs distribution. It will allow you to install and backup additional software/package dependencies. With Dockerfile ADD instruction you can extract your .emacs.d from archives and remote repositories like GitHub using URL. Also you can simply run one of the images:

MacOS:

Get XQuartz

open -a XQuartz

In the XQuartz preferences, go to the “Security” tab and make sure you’ve got “Allow connections from network clients” ticked

ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost + $ip
docker run -ti --name emacs\
 -e DISPLAY=$ip:0\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

source

other method

Windows

Get Cygwin with xinit, xorg-server and optionaly winpty(to run Emacs container with -t)

export DISPLAY=<your-machine-ip>:0.0
startxwin -- -listen tcp &
xhost + <your-machine-ip>
docker run --name emacs\
 -e DISPLAY="$DISPLAY"\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

Or with -ti via winpty

winpty docker run -ti --name emacs\
-e DISPLAY="$DISPLAY"\
-e UNAME="emacser"\
-e GNAME="emacsers"\
-e UID="1000"\
-e GID="1000"\
-v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
-v <path_to_your_workspace>:/mnt/workspace\
jare/emacs emacs

source You can use @ninrod 's setup

GNU/Linux

UID and preferably UNAME should match the host's user id. Also make sure that $DISPLAY variable is set

docker run -ti --name emacs -v /tmp/.X11-unix:/tmp/.X11-unix:ro\
 -e DISPLAY="unix$DISPLAY"\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

That's it! Now you should see Emacs window.

If it doesn't work

You may need to allow local connection for the user UNAME should match the hosts user id.

xhost +si:localuser:<UNAME>

Or allow local connection from the container's hostname(This should work with any UID)

xhost +local:`docker inspect --format='{{ .Config.Hostname }}' emacs`

source

Also you can run it with docker-x11-bridge
Pros:
  • Same client for GNU/Linux, Windows and MacOS + web browser
  • Persistent server (you can connect and disconnect without disrupting Emacs)
  • Interactive screen sharing demo
  • Use Emacs in web-browser (O_O) demo
Cons:
  • Lag spikes with some OSes
Basic docker commands to get you started:
  • docker rm -f emacs - remove emacs container
  • docker restart emacs - restart emacs container
  • docker rmi -f jare/emacs - remove jare/emacs image
  • docker pull jare/emacs - get newer jare/emacs version
  • docker images -a - list all images
  • docker ps -a - list all containers
  • docker run ... jare/emacs - run the default command
  • docker run -ti ... jare/emacs /bin/bash - start bash
  • docker exec emacs /usr/bin/emacs - start /usr/bin/emacs in the running emacs container
  • docker logs emacs - print emacs container's logs
  • docker run ... -p 8080:8080 ... jare/emacs - access container's server from localhost:8080
  • docker cp <from_my_local_machine_path> emacs:/<to_my_emacs_container_path>
  • docker cp emacs:/<from_my_emacs_container_path> <to_my_local_machine_path>
  • Manage data in containers with Docker volumes. Example: - docker volume create --name my-workspace - docker run ... -v my-workspace:/mnt/workspace ... jare/emacs - docker run ... -v my-workspace:/home/developer/workspace ... jare/vim-bundle

docker-emacs's People

Contributors

jaremko avatar gburch avatar guewen avatar agsdot avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.