Me disponía a probar LXC (Linux Containers) y tenía una duda, así que pregunté en twitter por ayuda, a los pocos segundos ya salió un follower ofreciéndomela y dándome a conocer un gestor que me ayudaría con la tarea de administrar con LXC, se trata de docker.
Ahora mismo no os puedo contar mucho mas de docker, ya que ni uno ni otro los conozco pero intuyo que hacen! así que este manual vamos a instalar docker + lxc en una debian wheezy.
Podría parecer trivial, la problemática es que docker no está para debian, si para ubuntu y otras distribuciones, pero ubuntu al haberse alejado tanto de debian quizás podría darnos algunos problemas, así que vamos a instalar docker en una debian stable.
Partimos de una debian 7 wheezy recién instalada, os presento a Rigel, estrella de la constelación de Orión :)
Instalamos algunos paquetes necesarios:
root@rigel:~# apt-get install lxc debootstrap bridge-utils libvirt-bin
libvirt-bin nos trae el soporte de otros tipos de virtualización. No voy a entrar en detalles, más info aquí.
Vamos a montar cgroup
root@rigel:~# echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab root@rigel:~# mount cgroup
Ahora vamos a verificar que todo es correcto y ejecutamos el verificador de la configuración de lxc
root@rigel:~# lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-3.2.0-4-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Si en namespaces nos pone required es que nuestro kernel no está compilado con CONFIG_USER_NS=y y tendremos que instalar un kernel mas nuevo. Para hacerlo lo podemos hacer desde backports (con la 3.2.0-4-amd64 parece que si que está compilado, así que si todos los valores indica que están correctos no sigas con el paso entre #####)
#########
Añadimos los backports en sources.list
root@rigel:~# echo "# backports" >> /etc/apt/sources.list root@rigel:~# echo "deb http://ftp.de.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list root@rigel:~# apt-get update
E instalamos el último kernel que encontremos en backports
root@rigel:~# apt-cache search linux-image -t wheezy-backports root@rigel:~# apt-get install linux-image-3.12-0.bpo.1-amd64 -t wheezy-backports
A continuación hacemos una modificación de grub en el fichero /etc/default/grub y modificamos la opción con el siguiente contenido
root@rigel:~# vi /etc/default/grub GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Reinstalamos grub para que aplique los cambios
root@rigel:~# update-grub
########
Activamos la redirección de puertos (activo la de ipv6 ya que esta máquina va a trabajar con IPv6 también)
root@rigel:~# vi /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
Reiniciamos el sistema.
Una vez reiniciado vamos a instalar docker desde las sources.
root@rigel:~# wget https://get.docker.io/builds/Linux/x86_64/docker-latest -O docker root@rigel:~# chmod +x docker root@rigel:~# mv docker /usr/bin/
Y lo arrancamos de momento de forma manual
root@rigel:~# docker -d &
Al arrancar me dice esto:
2014/03/06 11:11:06 WARNING: You are running linux kernel version 3.2.0-4-amd64, which might be unstable running docker. Please upgrade your kernel to 3.8.0.
De momento parece que arranca correctamente, así que feel free de instalar dicho kernel (a compilar y cosas de estas hehe porqué dicha versión aún no está en los repositorios de debian, ni siquiera en los unstable!)
cuatro comprovaciones para ver si está correctamente instalado
root@rigel:/usr/bin# docker version Client version: 0.8.1 Go version (client): go1.2 Git commit (client): a1598d1 2014/03/06 11:11:59 GET /v1.9/version [/var/lib/docker|3ac5e508] +job version() [/var/lib/docker|3ac5e508] -job version() = OK (0) Server version: 0.8.1 Git commit (server): a1598d1 Go version (server): go1.2 Last stable version: 0.8.1 root@rigel:/usr/bin# docker pull ubuntu root@rigel:/usr/bin# docker run ubuntu echo 'ubuntu on debian'
Y verificamos que está creada
root@rigel:/usr/bin# docker ps -l 2014/03/06 11:24:03 GET /v1.9/containers/json?limit=1 [/var/lib/docker|3ac5e508] +job containers() [/var/lib/docker|3ac5e508] -job containers() = OK (0) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2e7e5b09730b ubuntu:12.04 echo ubuntu on debia 8 minutes ago Exit 0 compassionate_ritchie
docker ps -l vendría a ser el equivalente a vzlist -a en openvz, si ejecutamos docker ps veremos que el contenedor aún no está funcionando
root@rigel:/usr/bin# docker ps 2014/03/06 11:29:21 GET /v1.9/containers/json [/var/lib/docker|3ac5e508] +job containers() [/var/lib/docker|3ac5e508] -job containers() = OK (0) CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Algunas anotaciones y comandos mas de docker, recordad que aún no me he manejado nunca con docker y no tengo ni idea de como funciona hehe pero hay un manual que os recomiendo seguir, también los docs de docker.
Para ejecutar cosas dentro del contenedor vamos a usar “docker run comando” siendo comando lo que queremos ejecutar dentro del contenedor. Por ejemplo para ejecutar una terminal bash en el contenedor:
root@rigel:/usr/bin# docker run -i -t ubuntu /bin/bash root@26c86d1db2ef:/#
Para ver la configuración y datos del contenedor usamos “docker inspect id”, por ejemplo del contenedor que he creado antes:
root@rigel:/usr/bin# docker inspect 2e7e5b09730b
Comentar que docker funciona un poco distinto a openvz, según lo que me han contado tu tienes los contenedores y puedes tener versiones de estos (se hacen copias incrementales), así que entiendo que puedes tener un contenedor con varios programas ya preinstalados y a partir de ahí tener una base para hacer las configuraciones especificas de cada uno, incluso que puedes tener varias versiones del mismo por si quieres realizar cambios. Así que la horrorosa tarea de crear contenedores que había en openvz se soluciona y es mucho más versátil.
Por lo que he visto tienes un repositorio de distribuciones linux que puedes instalar. Con docker search , sería un símil al apt-cache search. Hay mogollón de contenedores precreados! supongo que podrás contribuir a subir de nuevos! :)
Ahora mismo ando un poco perdida, así que espero que en pocos días va a caer otro manual de como manejarse un poco mas con docker :P
De momento espero que este manual sirva de ayuda hasta donde haya llegado!
Fuente: boronine.com
RT @Blackhold_: Blog] Debian 7 wheezy: lxc + docker: Me disponía a probar LXC (Linux Containers) y tenía una duda, así que pregun… http:/…
Quizás te interese esto :)
http://openwebinars.net/docker-contenedores-de-aplicaciones-el-futuro-de-la-distribucion-de-aplicaciones/
Hola!!
Potser t’interessa lxc-webpanel (interfície web mínima per a VMs amb LXC):
http://lxc-webpanel.github.io/
I també shipyard (interfície web per a docker):
https://github.com/shipyard/shipyard
Salutacions!!