Docker – container with multiple images
I wanted to make a Dockerfile with multiple images to run in one container.
What is the best method to go about this? Below is a list of what I wanted to run in a single container. I have not have any luck with making a Dockerfile with all of these included.
- MySQL Server
This is what I have so far, can I get a few tips
FROM stackbrew/ubuntu:12.04 MAINTAINER # Update the repository sources list #RUN apt-get update # My SQL Server ############### RUN apt-get update -qq && apt-get install -y mysql-server-5.5 ADD my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 664 /etc/mysql/conf.d/my.cnf ADD run /usr/local/bin/run RUN chmod +x /usr/local/bin/run V OLUME ["/var/lib/mysql"] EXPOSE 3306 CMD ["/usr/local/bin/run"]
2 Solutions collect form web for “Docker – container with multiple images”
You cannot have “multiple images to run in one container”, that wouldn’t make sense.
But you can write a Dockerfile to create an image that will install all the services you mentionned. Example (Ubuntu/Debian distribution) :
[...header...] FROM stackbrew/ubuntu:12.04 #or use ubuntu-upstart:12.04 MAINTAINER BPetkov # Update the repository sources list RUN apt-get update -qq # Mysql RUN apt-get install -y mysql-server-5.5 ADD my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 664 /etc/mysql/conf.d/my.cnf ADD run /usr/local/bin/run RUN chmod +x /usr/local/bin/run # Other stuff RUN apt-get -y install rabbitmq RUN apt-get -y install nodejs [...] VOLUME ["/var/lib/mysql"] EXPOSE 3306 EXPOSE ....... CMD ["/sbin/init"]
Then you would have to get all of them started automatically when the container starts.
You can use a process manager such as supervisord (Docker documentation here).
Alternatively, you could use a regular init system, check this base image : ubuntu-upstart. This one would allow you to only have to install the packages in your Dockerfile and get them started automatically without any effort, by specifying /sbin/init as
CMD in your Dockerfile.
The feature you’re looking for is Docker Compose.