user3633313
user3633313

Reputation: 71

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.

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"] 

Upvotes: 6

Views: 39948

Answers (2)

jasonslyvia
jasonslyvia

Reputation: 2535

The feature you're looking for is Docker Compose.

Upvotes: 0

mbarthelemy
mbarthelemy

Reputation: 12913

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.

Upvotes: 7

Related Questions