Docker
Docker is a Linux container, written in Go and based on lxc (self-described as “chroot on steroids”) and AUFS. Instead of providing a full VM, like you get with Vagrant, Docker provides you lightweight containers, that share the same kernel and allow to safely execute independent processes.Docker is attractive for many reasons:
- Lightweight; images are much lighter than full VMs, and spinning off a new instance is lightning fast (in the range of seconds instead of minutes).
- Version control of the images, which makes it much more convenient to handle builds.
- Lots of images (again), just have a look at the docker public index of images.
-
SSH in Vagrant if you’re not in already:
$ vagrant ssh
-
Install Docker, as explained on the official website:
$ sudo apt-get update $ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring $ sudo reboot $ sudo sh -c "curl https://get.docker.io/gpg | apt-key add -" $ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker
-
Verify it worked by trying to build your first container:
$ sudo docker run -i -t ubuntu /bin/bash
-
Great, but we’ll need more than a vanilla Linux. To add our
dependencies, for example to run a Node.js + MongoDB app, we’re gonna
start by creating a
Dockerfile
:
FROM ubuntu MAINTAINER My Self me@example.com # Fetch Nodejs from the official repo (binary .. no hassle to build, etc.) ADD http://nodejs.org/dist/v0.10.19/node-v0.10.19-linux-x64.tar.gz /opt/ # Untar and add to the PATH RUN cd /opt && tar xzf node-v0.10.19-linux-x64.tar.gz RUN ln -s /opt/node-v0.10.19-linux-x64 /opt/node RUN echo "export PATH=/opt/node/bin:$PATH" >> /etc/profile # A little cheat for upstart ;) RUN dpkg-divert --local --rename --add /sbin/initctl RUN ln -s /bin/true /sbin/initctl # Update apt sources list to fetch mongodb and a few key packages RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y python git RUN apt-get install -y mongodb # Finally - we wanna be able to SSH in RUN apt-get install -y openssh-server RUN mkdir /var/run/sshd # And we want our SSH key to be added RUN mkdir /root/.ssh && chmod 700 /root/.ssh ADD id_rsa.pub /root/.ssh/authorized_keys RUN chmod 400 /root/.ssh/authorized_keys && chown root. /root/.ssh/authorized_keys # Expose a bunch of ports .. 22 for SSH and 3000 for our node app EXPOSE 22 3000 ENTRYPOINT ["/usr/sbin/sshd", "-D"]
-
Let’s build our image now:
$ sudo docker build . # Missing file id_rsa.pub ... hahaha ! You need an ssh key for your vagrant user $ ssh-keygen $ cp -a /home/vagrant/.ssh/id_rsa.pub . # Try again $ sudo docker build . # Great Success! High Five!
-
Now, let’s spin off a container with that setup and log into it (
$MY_NEW_IMAGE_ID
is the last id the build process returned to you):
$ sudo docker run -p 40022:22 -p 80:3000 -d $MY_NEW_IMAGE_ID $ ssh root@localhost -p 40022
Reference:
- http://devo.ps
No comments:
Post a Comment