emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Emacs+org-mode in a Docker?


From: briangpowell .
Subject: Re: [O] Emacs+org-mode in a Docker?
Date: Fri, 30 Oct 2015 19:58:02 -0400

* Here are some of my notes+URL links on some docker+emacs experiments thus far:

** Last I checked some glimmering developments seem to be coming to light in the docker+emacs realm:

*** Believe some links below might be stepping-stones for your students, Dr. Kitchin:

** Happily, below, I note coming across some work by one of our favorite Elisp hackers of "elnode" fame: Nic Ferrier 

** "docker.el" was in development too last I looked into this--see link below.

* Linux Containers: ###1 read and take advice here FIRST: http://stackoverflow.com/questions/27083182/running-emacs-in-a-docker-container 

** These links are slightly tangential but I suggest them since they're also stepping-stones to really what's going on under-the-docker-hood:

** https://en.wikipedia.org/wiki/Copy-on-write 
** http://www.linuxjournal.com/content/docker-lightweight-linux-containers-consistent-development-and-deployment?page=0,0
** http://www.liquidweb.com/kb/how-to-install-docker-on-ubuntu-14-04-lts
** http://aufs.sourceforge.net
** https://linuxcontainers.org

* Can run xampp on a docker--see notes and experiments below, here are first checks and steps:
** docker inspect garland/xampp-base docker
** netstat -lnp|grep 8080" ; echo "=>" ; netstat -lnp | grep 8080 ; sleep 3 
* Now try to run the xampp container:
docker run -t -i -p 8080:80 garland/xampp-base /bin/bash &

* /opt/lampp/lampp startapache
** http://localhost:8080/xampp/splash.php
** xterm -e docker run -i -t debian /bin/bash
** xterm -e docker run -i -t ubuntu /bin/bash
** docker run -i -t debian /bin/bash &
*** xampp on docker!?: 

* Enabling XAMPP Web Interface with docker:

Start Docker in interactive mode

[[shell:docker run -t -i -p 8080:80 garland/xampp-base /bin/bash &]]

vim /opt/lampp/etc/extra/httpd-xampp.conf
Remove the bottom 4 lines.docker.el
**** Commented out the bottom 4 lines and then this got it semi-working (returned "Object not found!" error) after I did this:
/opt/lampp/lampp startapache
google-chrome http://localhost:8080/:80 
***** This worked!(after starting apache in the docker xterm): google http://localhost:8080/xampp/splash.php

** https://github.com/Silex/docker.el

* [[shell:echo * Put emacs in Docker(but remember all writes will be lost--so to really keep things write to volume(s)):";cd;docker pull biscarch/emacs &]]

** Just mounted a "volume" (to Docker: volumes are read-write(usually) dirs and/or files outside the Union File system (aufs) and available to the host AND the container)
docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash
docker inspect -f {{.Volumes}} container-test => map[/data:/var/lib/docker/vfs/dir/79d22ddf7a12b6e283c74df521289adb6b537883686eb43aa3c2405f0c6aacae]
date > /var/lib/docker/vfs/dir/79d22ddf7a12b6e283c74df521289adb6b537883686eb43aa3c2405f0c6aacae/date.j
address@hidden:/# cat /data/date.j => Mon Jul 20 09:08:33 EDT 2015
** http://container-solutions.com/understanding-volumes-docker/ "Quite simply, volumes are directories (or files) that are outside of the default Union File System and exist as normal directories and files on the host filesystem."
In order to be able to save (persist) data and share data between containers, Docker came up with the concept of volumes:
Quite simply, volumes are directories (or files) that are outside of the default Union File System and exist as normal directories and files on the host filesystem.
There are two ways to initialise volumes, with some subtle differences that are important to understand. We can declare a volume at run-time with the -v flag:
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash

address@hidden:/# ls /data
address@hidden:/# 
This will make the directory /data inside the container live outside the Union File System and directly accessible on the host.
*** Trying this but fails--may have to do before booting the container?:
docker run -v /home/b/data55:/data55 debian ls /data55
** Can also give access to a "volume" that is available in one container to another
*** Can't you use FUSE with a container!?
** "you can also mount a directory from your own host into a container:"
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
*** The above will mount the local directory, /src/webapp, into the container as the /opt/webapp directory. This is very useful for testing; for example, 
we can mount our source code inside the container and see our application at work as we change the source code!
**** But with UNIONFS and AUFS this functionality has been available for many years.
** To test docker install
docker search debian
docker pull debian
docker run -i -t debian /bin/bash
*** And/or
docker pull ubuntu
docker run -i -t ubuntu /bin/bash
* Yet another emacs in a docker(which I've done successfully--see above--but this is "dmacs"): [[https://github.com/bcbcarl/docker-emacs]]
docker pull bcbcarl/emacs
sudo curl -L https://raw.githubusercontent.com/bcbcarl/docker-emacs/master/bin/dmacs -o /usr/local/bin/dmacs
sudo chmod +x /usr/local/bin/dmacs
* This didn't quite work but very interestin'--nic the elnode man Nic Ferrier at it again: https://github.com/nicferrier/emacs-in-a-docker
*** This didn't work; but, here's his plan:

This puts Emacs into a docker!

I am sure this is going to be useful for tests and things like that.

Subdirectories

Since there are an immediate load of things you might do with Dockers (run a daemon, run a batch in various ways, etc...) I'll put subdirs here with usable Dockerfiles for doing those things.

emacsd

A docker with an Emacs daemon in it.

$ sudo docker.io run -d -v $(realpath sockets):/tmp/emacs1000 nicferrier/emacsd
$ emacsclient -s sockets/sock/server -e  '(+ 1 1)'

* Other Emacs Dockerfiles

Elnode has a few Dockerfiles to allow quick deployment. So far I've based all the Emacs Dockerfiles I've built on emacsd.
** Other sites:
https://github.com/nicferrier/emacs-lxc/blob/master/lxc.el
https://github.com/nicferrier
https://www.youtube.com/watch?v=eTeKDStj30Y
https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=nic%20ferrier%20emacs%20container
http://emacswiki.org/emacs/NicFerrier
https://libraries.io/github/nicferrier/emacs-lxc
http://nic.ferrier.me.uk/blog/2013_08/the-emacs-tapas
https://github.com/nicferrier/docker-shell-deploy/blob/master/README.md
http://www.emacswiki.org/emacs/TrampAndDocker

* Docker Backups

If you’re using a data-container, it’s pretty trivial to do a backup:

$ docker run --rm --volumes-from dbdata -v $(pwd):/backup debian tar cvf /backup/backup.tar /var/lib/postgresql/data

** Above should create a tarball of everything in the volume (the official postgres Dockerfile defines a volume at /var/lib/postgresql/data).

On Fri, Oct 30, 2015 at 3:57 PM, Matt Price <address@hidden> wrote:
I don't have any thoughts but would love to see what you ocme upwith.  Would be great not only for teaching but e.g. for pointing to a working environment for research results.

On Fri, Oct 30, 2015 at 12:13 PM, John Kitchin <address@hidden> wrote:
Has anyone tried setting up a Docker with an Emacs and org-mode setup?

I am looking for some kind of solution like this to use with some
students. Any thoughts?

Thanks,

--
Professor John Kitchin
Doherty Hall A207F
Department of Chemical Engineering
Carnegie Mellon University
Pittsburgh, PA 15213
412-268-7803
@johnkitchin
http://kitchingroup.cheme.cmu.edu




reply via email to

[Prev in Thread] Current Thread [Next in Thread]