97ba556142
Follow up the changes in the previous commit with some minor improvements to formatting, grammar, spelling, and wording. * layers/+distributions/spacemacs-docker/README.org: Replace "+" with "and". * layers/+email/mu4e/README.org: Use full sentences in the comments in the mu4e-alert example. * layers/+intl/japanese/README.org: Use verbatim markers for names of files, functions, packages, and variables. Capitalize "Linux". * layers/+os/osx/README.org: Capitalize "Emacs", "Vim", and "Evil". * layers/+os/osx/config.el (osx-command-as, osx-use-dictionary-app): * layers/+os/osx/keybindings.el (spacemacs/system-is-mac): Improve docstrings. * layers/+readers/dash/README.org: Capitalize "API", "Helm", and "Ivy". * layers/+spacemacs/spacemacs-defaults/config.el (delete-by-moving-to-trash): Use full sentences in comment. * layers/+spacemacs/spacemacs-defaults/funcs.el (spacemacs/toggle-frame-fullscreen-non-native): Improve docstrings.
221 lines
8.3 KiB
Org Mode
221 lines
8.3 KiB
Org Mode
#+TITLE: spacemacs-docker distribution
|
|
|
|
#+TAGS: distribution|layer|spacemacs
|
|
|
|
* Table of Contents :TOC_5_gh:noexport:
|
|
- [[#description][Description]]
|
|
- [[#features][Features:]]
|
|
- [[#screenshots][Screenshots]]
|
|
- [[#how-to-setup][How to setup]]
|
|
- [[#how-to-use][How to use]]
|
|
- [[#macos][macOS]]
|
|
- [[#windows][Windows]]
|
|
- [[#gnulinux][GNU/Linux]]
|
|
- [[#with-xpra-on-any-of-the-oses-and-via-web-browser][With Xpra on any of the OSes and via web-browser]]
|
|
- [[#pros][Pros]]
|
|
- [[#cons][Cons]]
|
|
- [[#instruction][Instruction]]
|
|
- [[#with-xpra-desktop-client][With Xpra desktop client]]
|
|
- [[#via-web-browser][Via web-browser]]
|
|
- [[#some-basic-docker-commands-to-get-you-going][Some basic docker commands to get you going]]
|
|
|
|
* Description
|
|
Spacemacs distribution that aims to automate dependency installation for
|
|
Spacemacs layers and provide well tested Docker based development environment
|
|
with GUI support on all major platforms and even [[https://i.imgur.com/wDLDMZN.gif][your web browser]].
|
|
|
|
** Features:
|
|
- Automatically get Spacemacs layers dependency installed with [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/%2Bdistributions/spacemacs-docker/deps-install/README.org][installer scripts]]
|
|
- Reap the benefit of Emacs and other GNU/Linux tools on Windows or macOS machines
|
|
- Use [[https://hub.docker.com/][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
|
|
- [[https://docs.docker.com/engine/reference/commandline/pause/][pause]] container to free resources temporarily
|
|
- [[https://github.com/docker/docker/blob/1.13.x/experimental/checkpoint-restore.md][Checkpoint & Restore]] - maybe the fastest way to start a "heavy" environment
|
|
- Friendly for networks with low upload speed/quotas.
|
|
|
|
* Screenshots
|
|
[[file:img/MAC_SP.jpg]]
|
|
|
|
[[https://i.imgur.com/VcuqReF.jpg][HD macOS image]]
|
|
|
|
[[file:img/LN_SP.jpg]]
|
|
|
|
[[https://i.imgur.com/yDok0Q7.jpg][HD GNU/Linux image]]
|
|
|
|
[[file:img/WIN_SP.jpg]]
|
|
|
|
[[https://i.imgur.com/WmsnCUo.jpg][HD Windows image]]
|
|
|
|
* How to setup
|
|
The idea is to build your own image [[https://docs.docker.com/engine/reference/builder/#from][FROM]] the one of provided base images.
|
|
Get [[https://docs.docker.com/engine/installation][docker]] for the OS of
|
|
the machine that will run development environment and then use
|
|
[[https://github.com/JAremko/spacemacs-docker-seed][spacemacs-docker-seed]] as an example to create [[https://docs.docker.com/docker-hub/builds/][automated builds on Docker Hub]] or
|
|
[[https://docs.docker.com/engine/reference/commandline/build/][build it locally]].
|
|
|
|
* How to use
|
|
With one of the methods below replace =spacemacs/develop= with your images.
|
|
NOTE: The guide assumes that you want to run Docker and connect to it from
|
|
the same machine.
|
|
|
|
** macOS
|
|
Get [[https://www.xquartz.org][XQuartz]] and =open -a XQuartz= In the XQuartz preferences go to the "Security"
|
|
tab and make sure you've got "Allow connections from network clients" ticked
|
|
|
|
#+BEGIN_SRC sh
|
|
ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
|
|
xhost + $ip
|
|
docker run -ti --name spacemacs \
|
|
-e DISPLAY=$ip:0 \
|
|
-e TZ=<your_time_zone> \
|
|
-v <path_to_your_workspace>:/mnt/workspace \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
[[https://fredrikaverpil.github.io/2016/07/31/docker-for-mac-and-gui-applications][source]],
|
|
[[https://github.com/chanezon/docker-tips/blob/master/x11/README.md][another method]]
|
|
|
|
** Windows
|
|
Get [[https://www.cygwin.com][Cygwin]] with =xinit=, =xorg-server= and optionaly [[https://github.com/rprichard/winpty][winpty]] (to run Emacs container with =-t=)
|
|
|
|
#+BEGIN_SRC sh
|
|
export DISPLAY=<your-machine-ip>:0.0
|
|
startxwin -- -listen tcp &
|
|
xhost + <your-machine-ip>
|
|
#+END_SRC
|
|
|
|
#+BEGIN_SRC sh
|
|
docker run --name spacemacs \
|
|
-e DISPLAY="$DISPLAY" \
|
|
-v <path_to_your_workspace>:/mnt/workspace \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
Or with =-ti= via =winpty=
|
|
|
|
#+BEGIN_SRC sh
|
|
winpty docker run -ti --name spacemacs \
|
|
-e DISPLAY="$DISPLAY" \
|
|
-v <path_to_your_workspace>:/mnt/workspace \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
[[http://manomarks.github.io/2015/12/03/docker-gui-windows.html][source]]
|
|
Also You can use [[https://www.reddit.com/r/emacs/comments/7a63r4/emacs_in_win10linuxdockerxserver_combo/][@ninrod 's setup]]
|
|
|
|
** GNU/Linux
|
|
Make sure that =$DISPLAY= variable is set
|
|
|
|
#+BEGIN_SRC sh
|
|
docker run -ti --name spacemacs \
|
|
-e DISPLAY="unix$DISPLAY" \
|
|
-e UNAME="spacemacser" \
|
|
-e UID="1000" \
|
|
-e TZ=<your_time_zone> \
|
|
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
|
|
-v /etc/localtime:/etc/localtime:ro \
|
|
-v /etc/machine-id:/etc/machine-id:ro \
|
|
-v /var/run/dbus:/var/run/dbus \
|
|
-v <path_to_your_workspace>:/mnt/workspace \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
=UID= and preferably =UNAME= should match the host's user id. You can set them
|
|
in your Dockerfile with [[https://docs.docker.com/engine/reference/builder/#env][ENV statements]].
|
|
That's it! Now you should see Emacs window.
|
|
But if it doesn't work You may need to allow local connection for the user
|
|
|
|
#+BEGIN_SRC sh
|
|
xhost +si:localuser:<UNAME>
|
|
#+END_SRC
|
|
|
|
Or allow local connection from the container's host-name
|
|
|
|
#+BEGIN_SRC sh
|
|
xhost +local:`docker inspect --format='{{ .Config.Hostname }}' spacemacs`
|
|
#+END_SRC
|
|
|
|
[[http://stackoverflow.com/questions/25281992/alternatives-to-ssh-x11-forwarding-for-docker-containers][source]]
|
|
|
|
** With Xpra on any of the OSes and via web-browser
|
|
*** Pros
|
|
- Xpra has a client for GNU/Linux, Windows and macOS and can work via web browser
|
|
- Persistent server (you can connect and disconnect without disrupting Emacs)
|
|
- Interactive screen sharing [[https://imgur.com/ijdSuX6][demo]]
|
|
- Read/write rss/email with Emacs in web-browser (O_O) [[https://imgur.com/wDLDMZN][demo]]
|
|
|
|
*** Cons
|
|
- Lag spikes with some OSes
|
|
|
|
*** Instruction
|
|
It's a good idea to read [[https://github.com/JAremko/docker-x11-bridge][docker-x11-bridge]] and [[https://www.xpra.org/trac/][Xpra]] documentations, but
|
|
here is a short instruction:
|
|
|
|
**** With Xpra desktop client
|
|
Get [[https://xpra.org/][Xpra]] client for your OS. then
|
|
|
|
#+BEGIN_SRC sh
|
|
docker run -ti --rm --name x11-bridge \
|
|
-e MODE="ssh" \
|
|
--net=host \
|
|
-v ~/.ssh/pub_rsa:/etc/pub-keys/me.pub \
|
|
-e DISPLAY=:14 \
|
|
jare/x11-bridge
|
|
|
|
docker run -ti --rm --name spacemacs \
|
|
--volumes-from x11-bridge \
|
|
-e DISPLAY=:14 \
|
|
-e TZ=<your_time_zone> \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
Now you can connect to it with Xpra desktop client
|
|
|
|
#+BEGIN_SRC sh
|
|
<XPRA EXECUTABLE> attach --encoding=rgb \
|
|
--ssh="ssh -o StrictHostKeyChecking=no -p 22" \
|
|
ssh:xpra@localhost:14
|
|
#+END_SRC
|
|
|
|
**** Via web-browser
|
|
#+BEGIN_SRC sh
|
|
docker run -ti --rm --name x11-bridge \
|
|
-e MODE="html" \
|
|
--net=host \
|
|
-e XPRA_PASSWORD=<PASSWORD> \
|
|
-e DISPLAY=:14 \
|
|
jare/x11-bridge
|
|
|
|
docker run -ti --rm --name spacemacs \
|
|
--volumes-from x11-bridge \
|
|
-e TZ=<your_time_zone> \
|
|
-e DISPLAY=:14 \
|
|
spacemacs/develop
|
|
#+END_SRC
|
|
|
|
Now visit [[http://localhost:10000/index.html?encoding=png&password]] =<PASSWORD>
|
|
|
|
* Some basic docker commands to get you going
|
|
- =docker rm -f spacemacs= - remove =spacemacs= container
|
|
- =docker restart spacemacs= - restart =spacemacs= container
|
|
- =docker rmi -f spacemacs/develop= - remove =spacemacs/develop= image
|
|
- =docker pull spacemacs/develop= - get newer =spacemacs/develop= version
|
|
- =docker images -a= - list all images
|
|
- =docker ps -a= - list all containers
|
|
- =docker run ... spacemacs/develop= - run default cmd
|
|
- =docker run -ti ... spacemacs/develop /bin/bash= - start bash
|
|
- =docker run --network=host ...= - less overhead and no need to map ports
|
|
- =docker exec spacemacs /usr/bin/emacs= - start =/usr/bin/emacs=
|
|
|
|
With the running =spacemacs= container
|
|
- =docker logs spacemacs= - print =spacemacs= container's logs
|
|
- =docker cp <from_local_path> spacemacs:/<to_my_spacemacs_container_path>=
|
|
- =docker cp spacemacs:/<from_my_spacemacs_container_path> <to_local_path>=
|
|
- Manage data in containers with [[https://docs.docker.com/engine/tutorials/dockervolumes/][Docker volumes]]. Example
|
|
- =docker volume create --name my-ws=
|
|
- =docker run ... -v my-ws:/mnt/workspace ... spacemacs/develop=
|
|
- =docker run ... -v my-ws:/home/developer/workspace ... jare/vim-bundle=
|