-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] s2i and general extendability support #45
Conversation
This is very similar to the MongoDB PoC: sclorg/mongodb-container#239 It adds extending support using [source-to-image](https://github.com/openshift/source-to-image). For example to build customized MariaDB database image `my-mariadb-centos7` with configuration in `~/image-configuration/` run: ``` $ s2i build ~/image-configuration/ centos/mariadb-101-centos7 my-mariadb-centos7 ``` The directory passed to `s2i build` can contain these directories: - `mysql-cfg/` - when starting the container, files from this directory will be used as a configuration for the `mysqld` daemon - `envsubst` command is run on this file to still allow customization of the image using environmental variables - `mysql-pre-init/` - shell scripts (`*.sh`) available in this directory are sourced before `mysqld` daemon is started - `mysql-init/` - shell scripts (`*.sh`) available in this directory are sourced when `mysqld` daemon is started locally - in this phase, use `${mysql_flags}` to connect to the locally running daemon, for example `mysql $mysql_flags < dump.sql` Variables that can be used in the scripts provided to s2i: - `$mysql_flags` -- arguments for the `mysql` tool that will connect to the locally running `mysqld` during initialization - `$MYSQL_RUNNING_AS_MASTER` -- variable defined when the container is run with `run-mysqld-master` command - `$MYSQL_RUNNING_AS_SLAVE` -- variable defined when the container is run with `run-mysqld-slave` command - `$MYSQL_DATADIR_FIRST_INIT` -- variable defined when the container was initialized from the empty data dir During `s2i build` all provided files are copied into `/opt/app-root/src` directory into the resulting image. If some configuration files are present in the destination directory, files with the same name are overwritten. Also only one file with the same name can be used for customization and user provided files are preferred over default files in `/usr/share/container-scripts/mysql/`- so it is possible to overwrite them. Same configuration directory structure can be used to customize the image every time the image is started using `docker run`. The directory has to be mounted into `/opt/app-root/src/` in the image (`-v ./image-configuration/:/opt/app-root/src/`). This overwrites customization built into the image.
This is very similar to the MongoDB PoC: sclorg/mongodb-container#239 It adds extending support using [source-to-image](https://github.com/openshift/source-to-image). For example to build customized MariaDB database image `my-mariadb-centos7` with configuration in `~/image-configuration/` run: ``` $ s2i build ~/image-configuration/ centos/mariadb-101-centos7 my-mariadb-centos7 ``` The directory passed to `s2i build` can contain these directories: - `mysql-cfg/` - when starting the container, files from this directory will be used as a configuration for the `mysqld` daemon - `envsubst` command is run on this file to still allow customization of the image using environmental variables - `mysql-pre-init/` - shell scripts (`*.sh`) available in this directory are sourced before `mysqld` daemon is started - `mysql-init/` - shell scripts (`*.sh`) available in this directory are sourced when `mysqld` daemon is started locally - in this phase, use `${mysql_flags}` to connect to the locally running daemon, for example `mysql $mysql_flags < dump.sql` Variables that can be used in the scripts provided to s2i: - `$mysql_flags` -- arguments for the `mysql` tool that will connect to the locally running `mysqld` during initialization - `$MYSQL_RUNNING_AS_MASTER` -- variable defined when the container is run with `run-mysqld-master` command - `$MYSQL_RUNNING_AS_SLAVE` -- variable defined when the container is run with `run-mysqld-slave` command - `$MYSQL_DATADIR_FIRST_INIT` -- variable defined when the container was initialized from the empty data dir During `s2i build` all provided files are copied into `/opt/app-root/src` directory into the resulting image. If some configuration files are present in the destination directory, files with the same name are overwritten. Also only one file with the same name can be used for customization and user provided files are preferred over default files in `/usr/share/container-scripts/mysql/`- so it is possible to overwrite them. Same configuration directory structure can be used to customize the image every time the image is started using `docker run`. The directory has to be mounted into `/opt/app-root/src/` in the image (`-v ./image-configuration/:/opt/app-root/src/`). This overwrites customization built into the image.
File test-lib-openshift.sh is a candidate for container-common-scripts.
As @TomasTomecek suggested in #32, we should document extending images in the Dockerfile, so one can e.g. change USER to 0 to be able to install RPMs.. |
We should also include an SSL example as part of the documentatoin/test. |
@mkocka promised he would review this PR |
[mkocka@warp mariadb-container]$ make build TARGET=centos7 VERSIONS=10.1 I am having trouble to test this, see ^^ [mkocka@warp mariadb-container]$ git branch
|
You should install the package: |
@mkocka Or you can run |
Testing s2i mount Tests failed. |
@mkocka what permission the '/tmp/tmp.V1N7QPOHRE/test-app/mysql-data/init.sql' file has? |
[test] |
1 similar comment
[test] |
This is very similar to the MariaDB: sclorg/mariadb-container#45 It adds extending support using [source-to-image](https://github.com/openshift/source-to-image). For example to build customized MySQL database image `my-mysql-centos7` with configuration in `~/image-configuration/` run: ``` $ s2i build ~/image-configuration/ centos/mysql-57-centos7 my-mysql-centos7 ``` The directory passed to `s2i build` can contain these directories: - `mysql-cfg/` - when starting the container, files from this directory will be used as a configuration for the `mysqld` daemon - `envsubst` command is run on this file to still allow customization of the image using environmental variables - `mysql-pre-init/` - shell scripts (`*.sh`) available in this directory are sourced before `mysqld` daemon is started - `mysql-init/` - shell scripts (`*.sh`) available in this directory are sourced when `mysqld` daemon is started locally - in this phase, use `${mysql_flags}` to connect to the locally running daemon, for example `mysql $mysql_flags < dump.sql` Variables that can be used in the scripts provided to s2i: - `$mysql_flags` -- arguments for the `mysql` tool that will connect to the locally running `mysqld` during initialization - `$MYSQL_RUNNING_AS_MASTER` -- variable defined when the container is run with `run-mysqld-master` command - `$MYSQL_RUNNING_AS_SLAVE` -- variable defined when the container is run with `run-mysqld-slave` command - `$MYSQL_DATADIR_FIRST_INIT` -- variable defined when the container was initialized from the empty data dir During `s2i build` all provided files are copied into `/opt/app-root/src` directory into the resulting image. If some configuration files are present in the destination directory, files with the same name are overwritten. Also only one file with the same name can be used for customization and user provided files are preferred over default files in `/usr/share/container-scripts/mysql/`- so it is possible to overwrite them. Same configuration directory structure can be used to customize the image every time the image is started using `docker run`. The directory has to be mounted into `/opt/app-root/src/` in the image (`-v ./image-configuration/:/opt/app-root/src/`). This overwrites customization built into the image.
This implements a similar approach to extend the image either using s2i, or by mounting the extending files into
/opt/app-root
. It also adds some OpenShift tests, together withtest-lib-openshift.sh
that should be moved to https://github.com/sclorg/container-common-scripts/.