Difference between revisions of "Docker inside CT"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(add prereq)
(remove explicit steps numbering)
Line 7: Line 7:
 
== Container tuning ==
 
== Container tuning ==
  
* 1. Create Fedora 20 container:
+
* Create Fedora 20 container:
 
  vzctl create $veid --ostemplate fedora-20-x86_64
 
  vzctl create $veid --ostemplate fedora-20-x86_64
* 2. Turn on bridge feature to allow docker creating bridged network:
+
* Turn on bridge feature to allow docker creating bridged network:
 
  vzctl set $veid --features bridge:on --save
 
  vzctl set $veid --features bridge:on --save
* 3. Setup Container veth-based network:
+
* Setup Container veth-based network:
 
  vzctl set $veid --netif_add eth0 --save
 
  vzctl set $veid --netif_add eth0 --save
* 4. Allow all iptables modules being used in containers:
+
* Allow all iptables modules being used in containers:
 
  vzctl set $veid --netfilter full --save
 
  vzctl set $veid --netfilter full --save
* 5. Configure custom cgroups in systemd:
+
* Configure custom cgroups in systemd:
 
  vzctl mount $veid
 
  vzctl mount $veid
 
  echo "JoinControllers=cpu,cpuacct,cpuset,freezer,devices" >> /vz/root/$veid/etc/systemd/system.conf  
 
  echo "JoinControllers=cpu,cpuacct,cpuset,freezer,devices" >> /vz/root/$veid/etc/systemd/system.conf  
* 6. Start the container:
+
* Start the container:
 
  vzctl start $veid
 
  vzctl start $veid
  
Line 25: Line 25:
 
These steps are to be performed inside the container.
 
These steps are to be performed inside the container.
  
* 1. Install Docker:
+
* Install Docker:
 
  yum -y install docker-io
 
  yum -y install docker-io
* 2. Start docker daemon
+
* Start docker daemon
 
   docker -d -s vfs
 
   docker -d -s vfs
  
Line 35: Line 35:
 
Use Docker to start Wordpress (official, standard way).
 
Use Docker to start Wordpress (official, standard way).
  
* 1. Start mysql docker:
+
* Start mysql docker:
 
  docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql
 
  docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql
* 2. Start wordpress:
+
* Start wordpress:
 
  docker run --name test-wordpress --link test-mysql:mysql -p 8080:80 -d wordpress
 
  docker run --name test-wordpress --link test-mysql:mysql -p 8080:80 -d wordpress
* 3. Access wordpress server by container IP and port 8080: <pre><nowiki>http://container_ip:8080</nowiki></pre>
+
* Access wordpress server by container IP and port 8080: <pre><nowiki>http://container_ip:8080</nowiki></pre>
  
 
== Limitations ==
 
== Limitations ==

Revision as of 22:42, 11 February 2015

Since OpenVZ kernel 042stab105.4 it is possible to run Docker inside containers. This article describes how.

Prerequisites

  • Kernel 042stab105.4 or later version
  • Kernel module veth module is loaded on host

Container tuning

  • Create Fedora 20 container:
vzctl create $veid --ostemplate fedora-20-x86_64
  • Turn on bridge feature to allow docker creating bridged network:
vzctl set $veid --features bridge:on --save
  • Setup Container veth-based network:
vzctl set $veid --netif_add eth0 --save
  • Allow all iptables modules being used in containers:
vzctl set $veid --netfilter full --save
  • Configure custom cgroups in systemd:
vzctl mount $veid
echo "JoinControllers=cpu,cpuacct,cpuset,freezer,devices" >> /vz/root/$veid/etc/systemd/system.conf 
  • Start the container:
vzctl start $veid

Prepare Docker in container

These steps are to be performed inside the container.

  • Install Docker:
yum -y install docker-io
  • Start docker daemon
 docker -d -s vfs

Example usage

Wordpress

Use Docker to start Wordpress (official, standard way).

  • Start mysql docker:
docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql
  • Start wordpress:
docker run --name test-wordpress --link test-mysql:mysql -p 8080:80 -d wordpress
  • Access wordpress server by container IP and port 8080:
    http://container_ip:8080

Limitations

  • This feature is currently in beta
  • Only "vfs" Docker graph driver is currently supported