[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Debian/Ubuntu Package Developing with Docker



Hi, 

I found that Docker is the best tool for developing Debian/Ubuntu 
packages, but seems no one has talked about it in Debian world. So here 
is mine [1].

[1]
http://sfxpt.wordpress.com/2013/11/10/debianubuntu-package-developing-
with-docker/

If you build your packages with pbuilder, then you will love Docker, 
because it is using the same concept, but is much more controllable, and 
it gives you much more freedom.

Docker uses the same concept of pbuilder, which gives you an isolated 
pure & pristine environment to build packages. The reason that I think 
Docker is the best tool for *developing* Debian/Ubuntu packages is that, 
suppose you find some minor problems when building a package and you want 
to fix it, then pbuilder is not a good help here. Sure you can go all the 
nine yards building from the pure & pristine environment every time you 
make a tiny change, but it would not be ideal, because when we do quick 
fixes and tests, the DRY (Do-not Repeat Yourself) principle will be more 
important -- the rebuilds for the quick fixes and tests should not do 
more than a make do. I.e., only build things that need to be built, and 
do not waste a single second on compiling something do not need to be 
compiled again, let alone starting from package downloading and 
installing. However, when the quick fixes and tests are done, we do need 
the ability to backtrack all the way to test installation from a bare-
minimum system. This is where Docker comes shining.

The concept of Docker is far superior than pbuilder in that, it allows 
you to build layers on top of each other, while giving you the freedom to 
play in any layer at any given time. The best part is that you can 
discard your changes you made to the layer at your will. So that you can 
always go back to the pristine stage of your layer and start over again. 
Let’s put that concept into Debian packages developing.

- The first layer would be the bare-minimum installed system that 
contains not much more packages than a net-install or deb-bootstrap. We 
will be using this layer to test our final package installation, to 
verify that the package install well on a bare-minimum system.

- The second layer would be the one that contains our package’s 
dependants. We will be using this layer to test if our built package runs 
fine.

- The third layer would have our package’s build dependants installed. We 
can always do a fresh build from here without downloading and installing 
any dependant packages.

- The forth layer would contains our package’s build caches. I.e., if I 
want to do a quick fixes and tests, I do not need to do more than a make 
will do. No need to compile something that does not need to be compiled 
again, and definitely no need to start from configure again.

- The best part is that if you are maintaining several packages, you can 
share the aforementioned layers between your packages if possible. This 
will be a big saver for both space and time. Even if some packages have 
some unique dependants that you think it is better not to use a shared 
environment, it can still save a huge amount of disk space because you 
can base it on a similar existing layer.

- Sounds too good to be true? Well, here is more -- the Docker layers can 
be defined in Docker files. The Docker files are easy to understand and 
easy to write. Once written, your pristine Docker environments will 
always be one command away. It doesn’t take long to finish, and your 
Docker isolated environment can starts in seconds.

- Moreover, if you find a bug but someone/upstream say he can’t duplicate 
it, all you need to do is to give him your Docker file. The Docker was 
meant for a reliable deploy system originally after all.

Sound very charming to me. What do you think? 
Please comment or share your insights.

Thanks

PS. 

For more information on Docker, check these out:

About Docker
http://sfxpt.wordpress.com/2013/11/02/docker-installation/#refs

Docker Intro & Installation
https://docs.google.com/document/
d/1IDdp1y0oAkDwIXSg4_l3TjNFBPps7MotCAmMywEV4Lc/edit

Docker Image Building
https://docs.google.com/document/
d/1f8iflnFSZxAU9FhoLQPEVlSKhVPXbtCaqTVPTTJb9yo/edit

Docker Advanced Volumes
https://docs.google.com/document/d/1tgzbbc76tV82nxJCpHTSb-
Y5tns8Uim8sLDExy12e5k/edit


Reply to: