Hi,

As described in the Isuru's email [1], wso2/dockerfiles[2] structure was
simplified to enable a single Docker image per WSO2 product. At the same
time, the approach that was used to build the Docker images was changed
from Puppet to an extensible approach.

Earlier only a "puppet apply" method was used to build the Docker images.
The Puppet modules from wso2/puppet-modules[3] were copied at the build
time into the build container and a puppet apply was executed to configure
the product. This approach created a dependency on Puppet, that was not
necessary. Dockerfiles should not be dependent on a single build approach.

Therefore, this step was changed in a way that allowed user defined
provisioning methods to be used when configuring the WSO2 product in the
Docker image. wso2/dockerfiles will ship "default" and "puppet"
provisioning methods.

[image: Inline image 1]

The default provisioning method simply copies the JDK and the product pack
in to the Docker image. The Puppet provisioning method offers the previous
Puppet related configuration option.

Users can introduce their own provisioning methods. For example if a user
already has a set of Chef recipes to configure a WSO2 product, they can
include the relevant validations (image-prep.sh) and config commands
(image-config.sh) in <DOCKERFILES_HOME>/common/provision/chef folder and
pass "-r chef" to the build.sh helper script.

The Dockerfiles only enforces a single RUN layer approach to keep the
resulting image size to a minimum. When multiple RUN layers are used,
especially on the same files, the existing layers will get duplicated each
time to apply the changes, increasing the image size uncontrollably.
Furthermore, file copying, modification, and cleaning has to be done in a
single layer to minimize unnecessary persistence [4]. Therefore, any
provisioning method has to prepare and validate a folder to serve the
necessary files from, be it a folder with the JDK and the product pack, or
the PUPPET_HOME folder. The needed files can then be downloaded in the
config script when building the image and cleaned afterwards in the same
build container.

[1] - [Docker] Creating a Single Docker Image for a Product - @architecture
[2] - https://github.com/wso2/dockerfiles
[3] - https://github.com/wso2/puppet-modules
[4] - [DEV][Dockerfiles] Reducing the image size - @dev

Regards,
Chamila de Alwis
Committer and PMC Member - Apache Stratos
Software Engineer | WSO2 | +94772207163
Blog: code.chamiladealwis.com
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to