Sunday, March 30, 2014

Running Docker container in oVirt

Overview

I recently wrote a new UI plugin in oVirt, that allows creating a VM that will run a Docker container inside it. This post shares the information about it, explains how to use it and what are the prerequisites.

What is it good for?

Well, Docker gives a very cool wrapping on top of linux containers. In addition, it also gives a public repository people can use! That makes it very easy to both create and consume container images that give different services, such as application servers, databases and many other services. Using the UI plugin to run that inside oVirt makes the job of deploying an existent service as easy as clicking a button (well... some steps are required first, but not too much steps :-) ).

Setting it up

In order to use the UI plugin you first need to fetch it from the samples-uiplugins git repository. The git repository is in git://gerrit.ovirt.org/samples-uiplugins. The plugin is currently being reviewed, so it is available at Docker-Plugin-Patch. Copy the plugin files to /usr/share/ovirt-engine/ui-plugins, so that you'll have the following directory structure:
  • docker.json
  • docker-resources/
  • docker-resources/plugin.html
  • docker-resources/icon_help.png
  • docker-resources/launch-docker-dialog.html
  • docker-resources/progress.gif

Then, you need to configure it. I usually do that using the docker.json file, although you can create a user-specific file as well. The relevant entries to configure are:
  1. allowedOrigins - that entry is used in order to pass messages between the UI plugin infrastructure and the plugin itself. I'll make it simple and just say you need to put the engine URL there, at the same way you access it with your browser (http://engine-server:port, or https://engine-server:port)
  2. apiEntryPoint - API entry point. Usually something like http(s)://engine-server:port/ovirt-engine/api
  3. dockerImages - Images you wish to be able to run. It can be either just an image name, or something more specific like user/image:label

Using the plugin


How does it work?

  • The UI plugin that allows the user to create a new oVirt VM, that runs a selected docker image running a specified command
  • It uses the cloud-init integration in order to pass the docker commands to the guest
  • docker image is downloaded from the public registry to the VM on first launch

Prerequisites

The plugin is based on creating a new oVirt VM from a template, passing cloud-init arguments that will configure and run the docker container.
Thus, in order to use it you need to have a Fedora image with docker service (with -r option to make containers start also after VM), cloud-init, and ovirt-guest-agent

It works only in cluster level 3.4 and above, as it requires persisting the cloud-init properties

Make sure the template you create have enough storage, as it might be required when downloading docker images. If you're interested in specific images then I recommend to pull them to the VM you create the template from, that way they'll be available, and won't require downloading the image when starting the container.

Plugin in action

1. You first login to the oVirt admin portal, and go the the VM main tab:



2. There you'll see the "Create Docker VM" button.
3. Press on it, and you'll see the following dialog:


4. Fill in the details:
  • Choose a DC
  • Choose a Cluster
  • Choose a Template that follows the prerequisites above
  • Fill in other VM properties
  • Fill in the Docker details (image, port mapping, and command). The command is mandatory only in case the image doesn't have an ENTRYPOINT.
  • Fill in the cloud-init details (I've decided to put only host name and SSH key, for the sake of simplicity).
5. Press OK


The VM is being created now. Once finished you can run it. After a few minutes, the IP address of it will appear in the admin portal, so you can either connect to it via SSH if you want (using the public SSH key you've passed), or just use the service it is supplying. In the screenshot I've created a Jboss instance, so I can just see that browsing results in a Test Page. Here is a screenshot showing the IP address:



And here is the result of browsing to this VM (we have mapped port 80 of the container to port 80 of the VM):


Pre-defined image in glance.ovirt.org

In order to ease the process of using this UI plugin, I've created an image you can import from the public oVirt Glance repository, "CentOS 6.5 64-Bit Docker".
You can import it using the guide available in my previous post (Importing Glance images as oVirt templates). It is based on the CentOS 6.5 cloud image. Make sure to create a virtual NIC in the template after importing, and also to set the relevant OS.

Note that I tested the plugin both using this template, and using a Fedora 19 template, installed from scratch. Using the Fedora 19 cloud image didn't work well for me, as the docker container got stuck on startup.

That's it! Start running containers in oVirt!

25 comments:

  1. Oved - really useful article - bookmarking it! Thanks.

    ReplyDelete
  2. Hi Oved

    Nice article.
    Do you have any idea of the API which can be used to create the drop down box in custom tab?
    i.e instead of "Create docker button" to have drop down menu?

    -Nikita

    ReplyDelete
    Replies
    1. Hi

      I don't think there is such an API call. You can either add a context menu item, or an action button on the top panel.
      However, I suggest you send an E-mail to users@ovirt.org, as the UI plugin maintainer is monitoring this list, so he might suggest an alternative / advise you to open RFE on that.

      Delete
  3. Hi,

    Can we execute any shell commands on the RHEV-M from the ovirt-engine?
    e.g to execute the "ls" command in RHEV_M manager through browser?

    -Nikita

    ReplyDelete
  4. No.
    May I ask what's the need for that?
    In addition, I really recommend to send such questions on users@ovirt.org (which I see that you did, and hopefully your issue will be resolved soon).

    ReplyDelete
  5. Hi,
    I tried using launch-docker-dialog.html script without docker i.e. I tried to update api/vms file but I was not able to do so.
    I tried below code:

    function AttachDevice(apiEntryPoint) {
    var vvmsUrl = apiEntryPoint + "/vms";
    var data1="null";
    jQuery.ajax({
    type: "POST",
    url: vmsUrl,
    headers: { 'Prefer' : 'persistent-auth' },
    data: data1.toJsonString(),
    contentType: "application/json; charset=utf-8",
    dataType: "json",

    success: function (data, status, jqXHR) {
    alert('VM created successfully');

    },

    error: function (jqXHR, status) {
    // Showing the error
    alert(JSON.stringify(jqXHR));

    // Hiding the progress widget
    }
    });

    // Showing the progress widget
    }


    but above code is not working.Neither success message is printed nor error message.

    ReplyDelete
  6. This plugin doesn't appear to work any longer. There is no data center listed or cluster listed in the dropdown boxes on the docker creation page.

    ReplyDelete
    Replies
    1. That's true. Many things changed since, and it is no longer maintained.

      Delete
  7. Your information is really superb thanks for sharing good information share more content on Devops Online Training Bangalore

    ReplyDelete
  8. Nice and good article. It is very useful for me to learn and understand easily. Thanks for sharing your valuable information and time. Please keep updating Docker training

    ReplyDelete
  9. Casino Tournaments List 2021
    Casino Tournaments List 바카라 사이트 2021 - Top 토토 사이트 Casinos 안전한 바카라 사이트 to Play in 2021 - We have list of casinos for you 바카라 to play your favorite slot games for fun.‎Casino Tournaments · ‎Casino Tournaments · 예스 벳 ‎Games · ‎Tournaments

    ReplyDelete
  10. thanks due to the fact you have been precise-natured to percentage opinion subsequent to us. we are able to continually recognize all you have finished here because I understand you are selected worried thinking about our.! Users can save their personalized presentations locally and online into their accounts using this software. Prezi Crack

    ReplyDelete
  11. i'm able to see which you are an capable at your pitch! i'm launching a internet site quickly, and your inform could be very useful for me.. thanks for all your benefit taking place and wishing you all the triumph for your issue.! Microsoft Office 2010 Cracks

    ReplyDelete
  12. Thank you for giving this wonderful information. Which iPhone or iPad auto clicker is the best? There is a piece on this subject here Best Auto Clicker for iPhone and iPad. For more information, visit the article if you're interested.

    ReplyDelete