Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
  • RabbitMQ
  • Java8
  • Node.js
  • Xvfb
  • Firefox
  • Chrome

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"] 
like image 969
user3633313 Avatar asked May 13 '14 16:05

user3633313


People also ask

Can a Docker container have multiple images?

Multiple containers can run simultaneously, each based on the same or different images. Docker is similar to virtual machines in the way it creates multiple instances of an operating system.

How many images can be in a Docker container?

You can create an unlimited number of Docker images from one image base.

Can a Docker container have multiple applications?

It's ok to have multiple processes, but to get the most benefit out of Docker, avoid one container being responsible for multiple aspects of your overall application. You can connect multiple containers using user-defined networks and shared volumes.


2 Answers

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 EntryPoint or CMD in your Dockerfile.

like image 163
mbarthelemy Avatar answered Nov 09 '22 11:11

mbarthelemy


The feature you're looking for is Docker Compose.

like image 2
jasonslyvia Avatar answered Nov 09 '22 09:11

jasonslyvia