[openstack-dev] [kolla] on Dockerfile patterns

David Vossel dvossel at redhat.com
Tue Oct 14 22:14:18 UTC 2014



----- Original Message -----
> Same thing works with cloud init too...
> 
> 
> I've been waiting on systemd working inside a container for a while. it seems
> to work now.

oh no...

> The idea being its hard to write a shell script to get everything up and
> running with all the interactions that may need to happen. The init system's
> already designed for that. Take a nova-compute docker container for example,
> you probably need nova-compute, libvirt, neutron-openvswitch-agent, and the
> celiometer-agent all backed in. Writing a shell script to get it all started
> and shut down properly would be really ugly.
>
> You could split it up into 4 containers and try and ensure they are
> coscheduled and all the pieces are able to talk to each other, but why?
> Putting them all in one container with systemd starting the subprocesses is
> much easier and shouldn't have many drawbacks. The components code is
> designed and tested assuming the pieces are all together.

What you need is a dependency model that is enforced outside of the containers. Something
that manages the order containers are started/stopped/recovered in. This allows
you to isolate your containers with 1 service per container, yet still express that
container with service A needs to start before container with service B.

Pacemaker does this easily. There's even a docker resource-agent for Pacemaker now.
https://github.com/ClusterLabs/resource-agents/blob/master/heartbeat/docker

-- Vossel

ps. don't run systemd in a container... If you think you should, talk to me first.

> 
> You can even add a ssh server in there easily too and then ansible in to do
> whatever other stuff you want to do to the container like add other
> monitoring and such....
> 
> Ansible or puppet or whatever should work better in this arrangement too
> since existing code assumes you can just systemctl start foo;
> 
> Kevin
> ________________________________________
> From: Lars Kellogg-Stedman [lars at redhat.com]
> Sent: Tuesday, October 14, 2014 12:10 PM
> To: OpenStack Development Mailing List (not for usage questions)
> Subject: Re: [openstack-dev] [kolla] on Dockerfile patterns
> 
> On Tue, Oct 14, 2014 at 02:45:30PM -0400, Jay Pipes wrote:
> > With Docker, you are limited to the operating system of whatever the image
> > uses.
> 
> See, that's the part I disagree with.  What I was saying about ansible
> and puppet in my email is that I think the right thing to do is take
> advantage of those tools:
> 
>   FROM ubuntu
> 
>   RUN apt-get install ansible
>   COPY my_ansible_config.yaml /my_ansible_config.yaml
>   RUN ansible /my_ansible_config.yaml
> 
> Or:
> 
>   FROM Fedora
> 
>   RUN yum install ansible
>   COPY my_ansible_config.yaml /my_ansible_config.yaml
>   RUN ansible /my_ansible_config.yaml
> 
> Put the minimal instructions in your dockerfile to bootstrap your
> preferred configuration management tool. This is exactly what you
> would do when booting, say, a Nova instance into an openstack
> environment: you can provide a shell script to cloud-init that would
> install whatever packages are required to run your config management
> tool, and then run that tool.
> 
> Once you have bootstrapped your cm environment you can take advantage
> of all those distribution-agnostic cm tools.
> 
> In other words, using docker is no more limiting than using a vm or
> bare hardware that has been installed with your distribution of
> choice.
> 
> > [1] Is there an official MySQL docker image? I found 553 Dockerhub
> > repositories for MySQL images...
> 
> Yes, it's called "mysql".  It is in fact one of the official images
> highlighted on https://registry.hub.docker.com/.
> 
> > >I have looked into using Puppet as part of both the build and runtime
> > >configuration process, but I haven't spent much time on it yet.
> >
> > Oh, I don't think Puppet is any better than Ansible for these things.
> 
> I think it's pretty clear that I was not suggesting it was better than
> ansible.  That is hardly relevant to this discussion.  I was only
> saying that is what *I* have looked at, and I was agreeing that *any*
> configuration management system is probably better than writing shells
> cript.
> 
> > How would I go about essentially transferring the ownership of the RPC
> > exchanges that the original nova-conductor container managed to the new
> > nova-conductor container? Would it be as simple as shutting down the old
> > container and starting up the new nova-conductor container using things
> > like
> > --link rabbitmq:rabbitmq in the startup docker line?
> 
> I think that you would not necessarily rely on --link for this sort of
> thing.  Under kubernetes, you would use a "service" definition, in
> which kubernetes maintains a proxy that directs traffic to the
> appropriate place as containers are created and destroyed.
> 
> Outside of kubernetes, you would use some other service discovery
> mechanism; there are many available (etcd, consul, serf, etc).
> 
> But this isn't particularly a docker problem.  This is the same
> problem you would face running the same software on top of a cloud
> environment in which you cannot predict things like ip addresses a
> priori.
> 
> --
> Lars Kellogg-Stedman <lars at redhat.com> | larsks @ {freenode,twitter,github}
> Cloud Engineering / OpenStack          | http://blog.oddbit.com/
> 
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> 



More information about the OpenStack-dev mailing list