[ 
https://issues.apache.org/jira/browse/MESOS-5991?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15416945#comment-15416945
 ] 

Qian Zhang commented on MESOS-5991:
-----------------------------------

I tried to run Docker daemon and a Docker container in a unified container, it 
seems working normally. Here are the detailed steps:

*1. Build a Docker image which has Docker daemon in it and it will run a 
busybox container.*
{code}
# cat Dockerfile 
FROM ubuntu:14.04

MAINTAINER Qian Zhang <[email protected]>

# Let's start with some basic stuff.
RUN apt-get update -qq && apt-get install -y curl iptables supervisor

# Install Docker from Docker Inc. repositories.
RUN curl -sSL https://get.docker.com/ | sh

ADD ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]
{code}

{code}
# cat ./supervisord.conf 
[supervisord]
nodaemon=true

[program:docker-engine]
command=service docker start
startsecs=0
exitcodes=0

[program:docker-container]
command=docker run busybox sleep 1000
{code}

{code}
# docker save -o dind.tar dind
# mv ./dind.tar /tmp/docker_images/
{code}

*2. Start Mesos master and Mesos agent.*
{code}
# sudo ./bin/mesos-master.sh --work_dir=/opt/mesos
# sudo ./bin/mesos-slave.sh --master=192.168.122.171:5050 
--containerizers=mesos --image_providers=appc,docker 
--isolation=namespaces/pid,cgroups/cpu,cgroups/mem,filesystem/linux,docker/runtime,network/cni
 --network_cni_config_dir=/opt/cni/net_configs 
--network_cni_plugins_dir=/opt/cni/plugins --work_dir=/opt/mesos 
--docker_registry=/tmp/docker_images
{code}

*3. Use mesos-execute to launch two unified containers from the "dind" image 
simultaneously.*
{code}
# sudo src/mesos-execute --master=192.168.122.171:5050 --name=test1 
--docker_image=dind --shell=false
# sudo src/mesos-execute --master=192.168.122.171:5050 --name=test2 
--docker_image=dind --shell=false
{code}

*4. In each of the unified containers, Docker daemon can be started 
successfully and the "busybox" Docker container can be launched successfully.*
{code}
# ps -ef | grep mesos-executor  
root     10241 10138  1 17:20 ?        00:00:02 
/home/stack/workspace/mesos/build/src/.libs/lt-mesos-executor 
--launcher_dir=/home/stack/workspace/mesos/build/src 
--sandbox_directory=/mnt/mesos/sandbox --user=root 
--task_command={"arguments":["\/usr\/bin\/supervisord"],"shell":false,"value":"\/usr\/bin\/supervisord"}
 
--rootfs=/opt/mesos/provisioner/containers/8ebb9a95-b404-4ca1-8974-ed9f29d652b8/backends/copy/rootfses/2dd2ccdb-1648-4048-8d16-84286fdb3f8f
root     10294 10138  1 17:20 ?        00:00:02 
/home/stack/workspace/mesos/build/src/.libs/lt-mesos-executor 
--launcher_dir=/home/stack/workspace/mesos/build/src 
--sandbox_directory=/mnt/mesos/sandbox --user=root 
--task_command={"arguments":["\/usr\/bin\/supervisord"],"shell":false,"value":"\/usr\/bin\/supervisord"}
 
--rootfs=/opt/mesos/provisioner/containers/15885f76-c263-40f2-9fc9-d1c1dc267f2c/backends/copy/rootfses/14a4598d-7538-4864-a4a6-837bc2fdc567
stack    10831  9835  0 17:24 pts/7    00:00:00 grep mesos-executor

# sudo nsenter -t 10241 -m -u -i -n -p ps -ef 
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  1 09:20 ?        00:00:02 
/home/stack/workspace/mesos/build/src/.libs/lt-mesos-executor 
--launcher_dir=/home/stack/workspace/mesos/build/src --sandbo
root        67     1  0 09:20 ?        00:00:00 /usr/bin/python 
/usr/bin/supervisord
root       137     1  0 09:20 ?        00:00:00 [start-stop-daem] <defunct>
root       138     1  0 09:20 ?        00:00:01 /usr/bin/dockerd -p 
/var/run/docker.pid
root       144   138  0 09:20 ?        00:00:00 docker-containerd -l 
unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim 
docker-containerd-shim --metrics-in
root       155    67  0 09:20 ?        00:00:00 docker run busybox sleep 1000
root       221   144  0 09:21 ?        00:00:00 docker-containerd-shim 
0dedee5b51db5355d61f33f64322a158be6b2221d5e0511f5d72e9adc09a6f36 
/var/run/docker/libcontainerd/0dede
root       236   221  0 09:21 ?        00:00:00 sleep 1000
root       259     0  0 09:24 ?        00:00:00 ps -ef

# sudo nsenter -t 10294 -m -u -i -n -p ps -ef      
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  1 09:20 ?        00:00:03 
/home/stack/workspace/mesos/build/src/.libs/lt-mesos-executor 
--launcher_dir=/home/stack/workspace/mesos/build/src --sandbo
root        67     1  0 09:20 ?        00:00:00 /usr/bin/python 
/usr/bin/supervisord
root       137     1  0 09:20 ?        00:00:00 [start-stop-daem] <defunct>
root       138     1  0 09:20 ?        00:00:01 /usr/bin/dockerd -p 
/var/run/docker.pid
root       144   138  0 09:20 ?        00:00:00 docker-containerd -l 
unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim 
docker-containerd-shim --metrics-in
root       154    67  0 09:20 ?        00:00:00 docker run busybox sleep 1000
root       222   144  0 09:21 ?        00:00:00 docker-containerd-shim 
040adde6bd4d90275ad1e02784b2b0711743a851013e632d13d773fb43683a2b 
/var/run/docker/libcontainerd/040ad
root       237   222  0 09:21 ?        00:00:00 sleep 1000
root       258     0  0 09:26 ?        00:00:00 ps -ef
{code}

So it seems we can support running Docker daemon inside a unified container.


> Support running docker daemon inside a container using unified containerizer.
> -----------------------------------------------------------------------------
>
>                 Key: MESOS-5991
>                 URL: https://issues.apache.org/jira/browse/MESOS-5991
>             Project: Mesos
>          Issue Type: Epic
>            Reporter: Jie Yu
>
> The goal is to develop necessary pieces in unified containerizer so that 
> framework can launch a full fledge docker daemon in a container.
> This will be useful for frameworks like jenkins. The jenkins job can still 
> use docker cli to do build (e.g., `docker build`, `docker push`), but we 
> don't have to install docker daemon on the host anymore.
> Looks like LXD already support that and is pretty stable for some users. We 
> should do some investigation to see what features that's missing in unified 
> containerizer to be able to match what lxd has. Will track all the 
> dependencies in this ticket.
> https://www.stgraber.org/2016/04/13/lxd-2-0-docker-in-lxd-712/
> Cgroups and user namespaces support are definitely missing pieces.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to