Docker Experimental channel is used to release experimental Docker features so that Docker users can try the new features and provide feedback. It is nice to use the experimental Docker in a test environment rather than upgrading Docker in the main development machine. The preferred approach is to use docker-machine and create a VM with experimental Docker. In this blog, I will describe the approach that I use to create docker-machine with experimental Docker VM. For basics of Docker machine, please refer to my blog on Docker machine.
Following are the steps needed to build the experimental boot2docker ISO and copy it to the docker-machine default location:
git clone https://github.com/boot2docker/boot2docker.git cd boot2docker docker build -t my-boot2docker-img -f Dockerfile.experimental . docker run --rm my-boot2docker-img > boot2docker.iso mv boot2docker.iso ~/.docker/machine/cache/boot2docker.iso
We need to specify Docker experimental release location in Dockerfile.experimental. In this case, it is https://experimental.docker.com/builds/Linux/x86_64/docker-latest.
Following command will start a Docker machine in Virtualbox with experimental Docker:
docker-machine create -d virtualbox exp
Following is the experimental Docker version running in my host:
$ docker --version Docker version 1.11.0-dev, build 6c2f438, experimental
Installing custom software in boot2Docker image:
I had a recent usecase where I needed boot2docker to have ipvsadm installed. Package manager is not available in boot2docker. Other than installing ipvsadm, I had to copy few libraries. Following is my boot2docker.experimental file that I used for this usecase:
FROM boot2docker/boot2docker MAINTAINER Sreenivas Makam "" #DESCRIPTION use the latest experimental build of Docker RUN apt-get update && apt-get install -y ipvsadm RUN cp /sbin/ipvsadm $ROOTFS/sbin/ RUN cp /lib/x86_64-linux-gnu/libnl-genl-3.so.200 /rootfs/lib/libnl-genl-3.so.200 RUN cp /lib/x86_64-linux-gnu/libnl-3.so.200 /rootfs/lib/libnl-3.so.200 RUN cp /lib/x86_64-linux-gnu/libpopt.so.0 /rootfs/lib/libpopt.so.0 #get the latest experimental docker RUN cd $ROOTFS/usr/local/bin && curl -fL -O https://experimental.docker.com/builds/Linux/x86_64/docker-1.12.0-rc4.tgz && tar -xvzf docker-1.12.0-rc4.tgz --strip-components=1 && chmod +x $ROOTFS/usr/local/bin/docker* && rm docker-1.12.0-rc4.tgz RUN echo "" >> $ROOTFS/etc/motd RUN echo " WARNING: this is an experimental.docker.com build, not a release." >> $ROOTFS/etc/motd RUN echo "" >> $ROOTFS/etc/motd RUN /make_iso.sh CMD ["cat", "boot2docker.iso"]
I was not able to use custom Docker image with docker-machine version 0.8.0-rc1. I could not find an option to prevent docker-machine from downloading latest Docker image. I have opened an issue here. The only workaround I found was to copy boot2docker image to ~/.docker/machine/cache/ , remove internet connection and then create docker-machine host.