Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rebuild container after each change?

Tags:

docker

The Docker documentation suggests to use the ONBUILD instruction if you have the following scenario:

For example, if your image is a reusable python application builder, it will require application source code to be added in a particular directory, and it might require a build script to be called after that. You can't just call ADD and RUN now, because you don't yet have access to the application source code, and it will be different for each application build. You could simply provide application developers with a boilerplate Dockerfile to copy-paste into their application, but that is inefficient, error-prone and difficult to update because it mixes with application-specific code.

Basically, this all sounds nice and good, but that does mean that I have to re-create the app container every single time I change something, even if it's only a typo.

This doesn't seem to be very efficient, e.g. when creating web applications where you are used to change something, save, and hit refresh in the browser.

How do you deal with this?

like image 362
Golo Roden Avatar asked Jun 17 '14 20:06

Golo Roden


1 Answers

does mean that I have to re-create the app container every single time I change something, even if it's only a typo

not necessarily, you could use the -v option for the docker run command to inject your project files into a container. So you would not have to rebuild a docker image.

Note that the ONBUILD instruction is meant for cases where a Dockerfile inherits FROM a parent Dockerfile. The ONBUILD instructions found in the parent Dockerfile would be run when Docker builds an image of the child Dockerfile.


This doesn't seem to be very efficient, e.g. when creating web applications where you are used to change something, save, and hit refresh in the browser.

If you are using a Docker container to serve a web application while you are iterating on that application code, then I suggest you make a special Docker image which only contains everything to run your app but the app code.

Then share the directory that contains your app code on your host machine with the directory from which the application files are served within the docker container.

For instance, if I'm developing a static web site and my workspace is at /home/thomas/workspace/project1/, then I would start a container running nginx with:

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx

That way I can change files in /home/thomas/workspace/project1/ and the changes are reflected live without having to rebuild the docker image or even restart the docker container.

like image 157
Thomasleveil Avatar answered Nov 01 '22 05:11

Thomasleveil