{"id":21684962,"url":"https://github.com/corpusops/docker-images","last_synced_at":"2025-07-18T05:32:16.689Z","repository":{"id":46263479,"uuid":"162426879","full_name":"corpusops/docker-images","owner":"corpusops","description":"Wrap base images and add some deploy glue into them","archived":false,"fork":false,"pushed_at":"2024-10-18T14:39:34.000Z","size":5094,"stargazers_count":15,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-19T12:15:28.633Z","etag":null,"topics":["docker-images"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/corpusops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-19T11:19:08.000Z","updated_at":"2024-10-18T14:39:39.000Z","dependencies_parsed_at":"2024-08-06T14:31:14.368Z","dependency_job_id":"82f82ee1-e6e8-4327-ad55-ca6753afaa5c","html_url":"https://github.com/corpusops/docker-images","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusops%2Fdocker-images","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusops%2Fdocker-images/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusops%2Fdocker-images/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpusops%2Fdocker-images/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corpusops","download_url":"https://codeload.github.com/corpusops/docker-images/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226358649,"owners_count":17612405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-images"],"created_at":"2024-11-25T16:17:41.474Z","updated_at":"2025-07-18T05:32:16.666Z","avatar_url":"https://github.com/corpusops.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nDISCLAIMER - ABANDONED/UNMAINTAINED CODE / DO NOT USE\n=======================================================\nWhile this repository has been inactive for some time, this formal notice, issued on **December 10, 2024**, serves as the official declaration to clarify the situation. Consequently, this repository and all associated resources (including related projects, code, documentation, and distributed packages such as Docker images, PyPI packages, etc.) are now explicitly declared **unmaintained** and **abandoned**.\n\nI would like to remind everyone that this project’s free license has always been based on the principle that the software is provided \"AS-IS\", without any warranty or expectation of liability or maintenance from the maintainer.\nAs such, it is used solely at the user's own risk, with no warranty or liability from the maintainer, including but not limited to any damages arising from its use.\n\nDue to the enactment of the Cyber Resilience Act (EU Regulation 2024/2847), which significantly alters the regulatory framework, including penalties of up to €15M, combined with its demands for **unpaid** and **indefinite** liability, it has become untenable for me to continue maintaining all my Open Source Projects as a natural person.\nThe new regulations impose personal liability risks and create an unacceptable burden, regardless of my personal situation now or in the future, particularly when the work is done voluntarily and without compensation.\n\n**No further technical support, updates (including security patches), or maintenance, of any kind, will be provided.**\n\nThese resources may remain online, but solely for public archiving, documentation, and educational purposes.\n\nUsers are strongly advised not to use these resources in any active or production-related projects, and to seek alternative solutions that comply with the new legal requirements (EU CRA).\n\n**Using these resources outside of these contexts is strictly prohibited and is done at your own risk.**\n\nThis project has been transfered to Makina Corpus \u003cfreesoftware@makina-corpus.com\u003e ( https://makina-corpus.com ). This project and its associated resources, including published resources related to this project (e.g., from PyPI, Docker Hub, GitHub, etc.), may be removed starting **March 15, 2025**, especially if the CRA’s risks remain disproportionate.\n\n# library images on steroids\n\n## doc\n- Idea is to inject some tools inside base library images\n- We do not wrap ``ONBUILD`` based images.\n- For all we want:\n    -  the network swissknifes:\n        [socat](http://www.dest-unreach.org/socat/),\n        [netcat](http://netcat.sourceforge.net/),\n        [curl](https://curl.haxx.se/),\n        [wget](https://www.gnu.org/software/wget/).\n    - [cops_pkgmgr_install.sh](https://github.com/corpusops/corpusops.bootstrap/blob/master/bin/cops_pkgmgr_install.sh): arch agnostic package installer\n    - [setup_locales.sh](./helpers/setup_locales.sh): helper to build and setup the default locale\n    - [openssl](https://www.openssl.org/): The SSL toolkit.\n    - [cron](https://fr.wikipedia.org/wiki/Cron): isc cron on debian like, cronie on redhat, busybox cron on alpine (dcron).\n    - [rsyslog](https://www.rsyslog.com/): the system logger\n    - [logrotate](https://github.com/logrotate/logrotate): the venerable but still useful versatile logrotator\n    - [bash](https://www.gnu.org/software/bash/): the venerable shell\n    - ca certificates: bundle of ROOT cas for SSL connections.\n    - process supervisors:\n        - [forego](https://github.com/ddollar/forego): *foreman in go*, supervisord/runit/circus/foreman alike\n        - [supervisord-go](https://github.com/ochinchina/supervisord): *supervisord in go*, attention, it has bugs like PID1 proccess reaping issues, use with care and read [the tracker](https://github.com/ochinchina/supervisord/issues) and specially [#60](https://github.com/ochinchina/supervisord/issues/60)!\n        - [runit](http://smarden.org/runit/) (1)\n        - [monit](https://mmonit.com/monit/) (1)\n        - foreman(ruby) \u0026 supervisord (python) are not bundled\n          as they would add too much dependencies\n          therefore make images grow too much.\n    - [frep](https://github.com/subchen/frep): tool to generates configs from templates when envsubst or basic shell is just not enougth\n    - [confd](https://github.com/kelseyhightower/confd): tool to generates configs from templates when frep is just not enougth\n    - [remco](https://github.com/HeavyHorst/remco): tool to generates configs from templates when confd is just not enougth\n    - [dockerize](https://github.com/jwilder/dockerize): tool to orchestrate containers between themselves\n    - [gosu](https://github.com/tianon/gosu): tool to downgrade privileges, the perfect SUDO.\n    - [confenvsubst](./rootfs/bin/confenvsubst.sh): tool to generate configs from env vars with well knows prefixes\n    - [p7zip](http://p7zip.sourceforge.net/): the universal (un)archiver\n    - Except for alpine based images (using musl, so no locales): setup sensible locales for: ``fr``, ``en``, ``de``.\n\n- (1): if it is packaged on the underlying distrib (eg: runit is only on alpine\u003e3)\n- debian 6 (stretch) is not supported anymore (tags remain, but we wont provide active support).\n- To be sure to include new tags nearly as soon as they are out, and to also refresh images to include\n  their fixes including security patches, this repo has a Travis cron enabled to rebuild everything at least daily.\n- Note: All single binaries and scripts are installed inside `/cops_helpers`, you can them use any docker-images related image as a source to ignite a volume or use multistage builds to copy them.\n\n## Separatly mananged images\n- `corpusops/postgres`, `corpusops/pgrouting` \u0026 `corpusops/postgis` pipelines has been moved to [this repo](https://github.com/corpusops/docker-postgresql)\n   and those 2 children `postgis-bare` \u0026\u0026 `pgrouring-bare` images : [postgis](https://github.com/corpusops/docker-postgis) / [pgrouting](https://github.com/corpusops/docker-pgrouting)\n\n| repo  | status  |\n|------------|-----------|\n| [docker-images](https://github.com/corpusops/docker-images)    | [![images](https://github.com/corpusops/docker-images/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-images/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster) |\n| [docker-postgis](https://github.com/corpusops/docker-postgis)   | [![postgis](https://github.com/corpusops/docker-postgis/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-postgis/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster) |\n| [docker-pgrouting](https://github.com/corpusops/docker-pgrouting) | [![pgrouting](https://github.com/corpusops/docker-pgrouting/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-pgrouting/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster) |\n| [docker-postgres](https://github.com/corpusops/docker-postgresql)  | [![postgres](https://github.com/corpusops/docker-postgresql/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-postgresql/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster)  |\n\n- other images managed separatly\n\n| repo  | status  |\n|------------|-----------|\n| [docker-alpine](https://github.com/corpusops/docker-alpine)  | [![alpine](https://github.com/corpusops/docker-alpine/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-alpine/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-amazonlinux](https://github.com/corpusops/docker-amazonlinux)  | [![amazonlinux](https://github.com/corpusops/docker-amazonlinux/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-amazonlinux/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-amazonlinux-bare](https://github.com/corpusops/docker-amazonlinux-bare)  | [![amazonlinux-bare](https://github.com/corpusops/docker-amazonlinux-bare/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-amazonlinux-bare/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-archlinux](https://github.com/corpusops/docker-archlinux)  | [![archlinux](https://github.com/corpusops/docker-archlinux/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-archlinux/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-centos](https://github.com/corpusops/docker-centos)  | [![centos](https://github.com/corpusops/docker-centos/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-centos/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-dbsmartbackup](https://github.com/corpusops/docker-dbsmartbackup)  | [![dbsmartbackup](https://github.com/corpusops/docker-dbsmartbackup/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-dbsmartbackup/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster)  |\n| [docker-debian](https://github.com/corpusops/docker-debian)  | [![debian](https://github.com/corpusops/docker-debian/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-debian/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-docker](https://github.com/corpusops/docker-docker)  | [![docker](https://github.com/corpusops/docker-docker/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-docker/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-elasticsearch](https://github.com/corpusops/docker-elasticsearch)  | [![elasticsearch](https://github.com/corpusops/docker-elasticsearch/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-elasticsearch/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-gitlabtools](https://github.com/corpusops/docker-gitlabtools)  | [![gitlabtools](https://github.com/corpusops/docker-gitlabtools/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-gitlabtools/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-golang](https://github.com/corpusops/docker-golang)  | [![golang](https://github.com/corpusops/docker-golang/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-golang/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-mailhog](https://github.com/corpusops/docker-mailhog)  | [![mailhog](https://github.com/corpusops/docker-mailhog/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-mailhog/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-mailu](https://github.com/corpusops/docker-mailu)  | [![mailu](https://github.com/corpusops/docker-mailu/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-mailu/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-mariadb](https://github.com/corpusops/docker-mariadb)  | [![mariadb](https://github.com/corpusops/docker-mariadb/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-mariadb/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-memcached](https://github.com/corpusops/docker-memcached)  | [![memcached](https://github.com/corpusops/docker-memcached/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-memcached/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-mongo](https://github.com/corpusops/docker-mongo)  | [![mongo](https://github.com/corpusops/docker-mongo/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-mongo/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-mysql](https://github.com/corpusops/docker-mysql)  | [![mysql](https://github.com/corpusops/docker-mysql/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-mysql/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-nginx](https://github.com/corpusops/docker-nginx)  | [![nginx](https://github.com/corpusops/docker-nginx/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-nginx/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-node](https://github.com/corpusops/docker-node)  | [![node](https://github.com/corpusops/docker-node/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-node/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-opensearch](https://github.com/corpusops/docker-opensearch)  | [![opensearch](https://github.com/corpusops/docker-opensearch/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-opensearch/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-pureftpd](https://github.com/corpusops/docker-pureftpd)  | [![pureftpd](https://github.com/corpusops/docker-pureftpd/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-pureftpd/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster)  |\n| [docker-php](https://github.com/corpusops/docker-php)  | [![php](https://github.com/corpusops/docker-php/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-php/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-project](https://github.com/corpusops/docker-project)  | [![project](https://github.com/corpusops/docker-project/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-project/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-python](https://github.com/corpusops/docker-python)  | [![python](https://github.com/corpusops/docker-python/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-python/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-rabbitmq](https://github.com/corpusops/docker-rabbitmq)  | [![rabbitmq](https://github.com/corpusops/docker-rabbitmq/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-rabbitmq/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-redis](https://github.com/corpusops/docker-redis)  | [![redis](https://github.com/corpusops/docker-redis/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-redis/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-redmine](https://github.com/corpusops/docker-redmine)  | [![redmine](https://github.com/corpusops/docker-redmine/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-redmine/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-rsync](https://github.com/corpusops/docker-rsync)  | [![rsync](https://github.com/corpusops/docker-rsync/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-rsync/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-ruby](https://github.com/corpusops/docker-ruby)  | [![ruby](https://github.com/corpusops/docker-ruby/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-ruby/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-seafile](https://github.com/corpusops/docker-seafile)  | [![seafile](https://github.com/corpusops/docker-seafile/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-seafile/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-slapd](https://github.com/corpusops/docker-slapd)  | [![slapd](https://github.com/corpusops/docker-slapd/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-slapd/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-solr](https://github.com/corpusops/docker-solr)  | [![solr](https://github.com/corpusops/docker-solr/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-solr/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-sshd](https://github.com/corpusops/docker-sshd)  | [![sshd](https://github.com/corpusops/docker-sshd/actions/workflows/cicd.yml/badge.svg?branch=master)](https://github.com/corpusops/docker-sshd/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amaster)  |\n| [docker-tensorflow](https://github.com/corpusops/docker-tensorflow)  | [![tensorflow](https://github.com/corpusops/docker-tensorflow/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-tensorflow/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-traefik](https://github.com/corpusops/docker-traefik)  | [![traefik](https://github.com/corpusops/docker-traefik/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-traefik/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-ubuntu](https://github.com/corpusops/docker-ubuntu)  | [![ubuntu](https://github.com/corpusops/docker-ubuntu/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-ubuntu/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n\u003c!-- for now, no longer maintained\n| [docker-minio](https://github.com/corpusops/docker-minio)  | [![minio](https://github.com/corpusops/docker-minio/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-minio/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-fedora](https://github.com/corpusops/docker-fedora)  | [![fedora](https://github.com/corpusops/docker-fedora/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-fedora/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-opensuse](https://github.com/corpusops/docker-opensuse)  | [![opensuse](https://github.com/corpusops/docker-opensuse/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-opensuse/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-vault](https://github.com/corpusops/docker-vault)  | [![vault](https://github.com/corpusops/docker-vault/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-vault/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n| [docker-wordpress](https://github.com/corpusops/docker-wordpress)  | [![wordpress](https://github.com/corpusops/docker-wordpress/actions/workflows/cicd.yml/badge.svg?branch=main)](https://github.com/corpusops/docker-wordpress/actions?query=workflow%3A.github%2Fworkflows%2Fcicd.yml+branch%3Amain)  |\n--\u003e\n\n- Those helpers (docker entrypoints) are added:\n\n\n## Refresh some files in this repository\n- Think time to time to refresh ``cops_pkgmgr_install.sh`` comes from [corpusops.bootstrap/bin](https://github.com/corpusops/corpusops.bootstrap/blob/master/bin/cops_pkgmgr_install.sh)\n- Then run\n\n    ```sh\n    ./main.sh gen\n    ```\n- Commit the whole and check build status on [travis](https://travis-ci.org/corpusops/docker-images/builds)\n- Image can override any of the hooks in this order (placing a ``Dockerfile.\u003chook_name\u003e`` in the image folder (precedence: tag folder itself, imagefolder (for all tags), and the default ones)\n    - [from](./Dockerfile.from)\n    - [args](./Dockerfile.args)\n    - ``argspost``: just a hook (empty by default)\n    - [helpers](./Dockerfile.helpers)\n    - ``pre``: just a hook (empty by default)\n    - [base](./Dockerfile.base)\n    - ``post``: just a hook (empty by default)\n    - [clean](./Dockerfile.clean)\n    - ``cleanpost``: just a hook (empty by default)\n\n## Zoom on entryoints\nYou better have to read the entrypoints to understand how they work.\n\n### supervisord helper: /bin/supervisord.sh\n- [/bin/supervisord.sh](./rootfs/bin/supervisord.sh): helper to dockerize supervisord-go\n    - generates its config (read the helper) by concatenating all config (.conf, .ini) files\n      found inside subdirectories of \u003cbr/\u003e\n      ``/etc/supervisor.d``(`$SUPERVISORD_CONFIGS_DIR`), ``/etc/supervisor``, ``/etc/supervisord``.\n    - frep is done on config files for all vars beginning by ``SUPERVISORD_``\n    - ``SUPERVISORD_CONFIGS`` can be set to alternate configs to aggregate to supervisord config, if the file is with a relative path, it will be searched inside `/etc/supervisor.d`\n    - ``SUPERVISORD_LOGFILE`` can be set up to another path, as we set it to stdout by defaut\n- One usual way to use this providen entrypoint is to launch it through supervisor to gain also logrotate support for free.\u003cbr/\u003e\n\n    ```yaml\n    # configs can be given on CLI, v2\n    supervisord:\n      image: \"corpusops/supervisord\"\n      command:  /bin/supervisord.sh s.conf\n    # configs can be given on CLI, v1\n    supervisord:\n      image: \"corpusops/supervisord\"\n      entrypoint: /bin/supervisord.sh\n      command: [s.conf]\n    # /etc/supervisor.d/s.conf is a valid supervisord config snippet\n    supervisord:\n      image: \"corpusops/supervisord\"\n      entrypoint: /bin/supervisord.sh\n      environment:\n      - SUPERVISORD_CONFIGS=s.conf\n    # /foo/s.conf is a valid supervisord config snippet\n    supervisord:\n      image: \"corpusops/supervisord\"\n      entrypoint: /bin/supervisord.sh\n      environment:\n      - SUPERVISORD_CONFIGS=/foo/s.conf\n    ```\n\n### forego helper: /bin/forego.sh\n- [/bin/forego.sh](./rootfs/bin/forego.sh): helper to dockerize forego :\n    - envsubst is done on Procfiles for all vars beginning by ``FOREGO_``\n- As you may know, forego uses a Procfile to configure itself.\n    - You can either use this entrypoint directly by giving args including the Procfile\n    - Or, easier, you can use The ``PROCFILE`` env var pointing to your config.\n\n      - This config file will be parsed by envsubst.\n\n    ```yaml\n    nginx:\n      command: \"corpusops/nginx\"\n      entrypoint: /bin/forego.sh -d /my/path\n      environment:\n      # This way your procfile can be processed by envsubst !\n      - FOREGO_PROCFILE=/my/path/.Procfile\n    ```\n\n### cron helper: /bin/cron.sh\n- [/bin/cron.sh](./rootfs/bin/cron.sh): helper to dockerize cron\n- When you use a debian/ubuntu based image, it's impossible to use cron base logging as it is based on syslog.\u003cbr\u003e\n    - see [this bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=887035)\n- When you use other implementation, you can redirect to a file, but it won't end up into docker logs.\n- So we made an entrypoint\n    - 1. to handle different implementation startup arguments\n    - 2. to handle a named pipe to escalate cron logs up to docker logs instead of a regular log file.\n- What you have to do to log is to redirect output to ``/var/log/cron.log``.\n    - Usage is as easy as putting this in your docker-compose file\n\n        ```yaml\n        ```\n    - ALT: (not recommanded) without supervisor:\n\n        ```yaml\n        ---\n        version: \"3.6\"\n        services:\n          # for alpine\n          alpinecron:\n            image: corpusops/alpine-bare\n            command:\n            - /bin/sh\n            - \"-c\"\n            - \u003e-\n              frep /mycrontab.frep:/etc/crontabs/mycrontab --overwrite\n              \u0026\u0026 chmod 0700 /etc/crontabs/mycrontab\n              \u0026\u0026 exec /bin/supervisord.sh\n            environment:\n            - SUPERVISORD_CONFIGS=/etc/supervisor.d/cron /etc/supervisor.d/rsyslog\n            volumes:\n            - ./mycrontab:/mycrontab.frep\n            - ../rootfs/etc/rsyslog.conf.frep:/etc/rsyslog.conf.frep\n          # for debian/redhat alike\n          ubuntucron:\n            image: corpusops/ubuntu-bare\n            command:\n            - /bin/sh\n            - \"-c\"\n            - \u003e-\n              frep /mycrontab.frep:/etc/cron.d/mycrontab --overwrite\n              \u0026\u0026 chmod 0700 /etc/cron.d/mycrontab\n              \u0026\u0026 exec /bin/supervisord.sh\n            environment:\n            - SUPERVISORD_CONFIGS=/etc/supervisor.d/cron /etc/supervisor.d/rsyslog\n            volumes:\n            - ./umycrontab:/mycrontab.frep\n            - ../rootfs/etc/rsyslog.conf.frep:/etc/rsyslog.conf.frep\n        ```\n    - mycrontab\n\n        ```cron\n        # debian / ubuntu / centos: /etc/crond.d/mycrontab\n        1 * * * * * root gosu myuser /bin/sh -c \"backup 2\u003e\u00261 | tee -a /var/log/cron.log\"\n        # alpine: /etc/crontabs/mycrontab\n        1 * * * * * gosu myuser /bin/sh -c \"backup 2\u003e\u00261 | tee -a /var/log/cron.log\"\n        ```\n\n### nginx helper: /bin/nginx.sh\n- [/bin/nginx.sh](./rootfs/bin/nginx.sh): helper to dockerize nginx\n- Helper image built by [docker-project](https://github.com/corpusops/docker-project/), tags:\n    - `corpusops/project:{nginx,nginx-alpine,nginx-stable,nginx-stable-alpine}`\n- One usual way to use this providen entrypoint is to launch it through supervisord-go to gain also logrotate support for free.\n- Remember also that all files in ``/etc/nginx`` will be proccessed by frep\u003cbr/\u003e\n- Remember also that all files in ``/nginx.d`` if existing will be proccessed by frep with same rules and copied to /etc/nginx\u003cbr/\u003e\n- Also \".skip|.template\" files will be skipped from processing (eg: /etc/nginx/foo.template) but you can adapt the `NGINX_FREP_SKIP` envvar to any regex to skip other files from frep processing\n- if `NO_SSL` is not set, generate a self signed certificate if the certificate provided path is not already existing.\n- Useful vars:\n    - `NGINX_FREP_SKIP=.skip|.template|.skipped`: skip rendering files matching regex\n    - `SKIP_EXTRA_CONF=`: set to 1 to skip extra conf in /nginx.d copy\n    - `SKIP_CONF_RENDER=`: set to 1 skip frep rendering\n    - `SKIP_OPENSSL_INSTALL=`: set to 1 skip openssl autoinstall if not installed\n    - **ALL** `XXX_HTTP_PROTECT_USER/XXX_HTTP_PROTECT_PASSWORD/XXX_HTTP_PROTECT_FILE`: generate `$XXX_HTTP_PROTECT_FILE` \u0026 `/etc/htpasswd/protect` htpasswd files with those credentials\n        - if `$XXX_HTTP_PROTECT_FILE` isnt set, it defaults to `/etc/htpasswd/xxxprotect`\n        - if `$XXX_HTTP_PROTECT_USER` isnt set, it defaults to `root`\n        - `/etc/htpasswd/protect` will contain all defined users\n        - Symlinks from `/etc/htpasswd-xxxprotect` are done for convenience (retrocompat)\n    - `VHOST_TEMPLATES`: list of vhost template to render through frep. (default: `/etc/nginx/conf.d/default.conf`)\n    - `VHOST_TEMPLATE_EXTS`: exts to search for templates\n    - `NO_SSL=1`: set to 1 not to generate a selfisgned certificate for `SSL_CERT_BASENAME` and `SSL_ALT_NAMES` (space sparated)\n    - `SSL_CERT_PATH=/certs/cert.pem`: ssl certificate path (also used when using the selfsigned certificate generator)\n    - `SSL_KEY_PATH=/certs/cert.key`: ssl certificate key path\n- examples\n    - supervisord example\n\n        ```yaml\n        nginx:\n          image: corpusops/nginx:1-alpine\n          command: /bin/supervisord.sh\n          environment: [SUPERVISORD_CONFIGS=cron nginx rsyslog]\n          volumes:\n          - ./nginx:/nginx.d\n\n        ```\n\n    - supervisord custom example\n\n        ```yaml\n        nginx:\n          image: corpusops/nginx:1-alpine\n          command: \u003e\n            /bin/sh -exc \"\n            frep /etc/nginx/conf.d/default.conf.template:/etc/nginx/conf.d/default.conf --overwrite\n            \u0026\u0026 exec /bin/supervisord.sh\"\n          environment: [SUPERVISORD_CONFIGS=cron nginx rsyslog]\n          volumes:\n          - ./myvhost.conf:/etc/nginx/conf.d/default.conf.template\n\n        ```\n\n### CopsHelpers installer: /bin/install_cops_helpers.sh\n- Helper image built by [docker-project](https://github.com/corpusops/docker-project/), tags:\n    - `corpusops/project:helpers-ubuntu`\n    - `corpusops/project:helpers-ubuntu-{22,20,16,14,16}.04`\n    - `corpusops/project:helpers-debian`\n    - `corpusops/project:helpers-debian-{11,10,9,8}`\n    - `corpusops/project:helpers-alpine`\n    - `corpusops/project:helpers-alpine{3}`\n    - `corpusops/project:helpers-centos`\n    - `corpusops/project:helpers-centos-{9,8,7}`\n    - `corpusops/project:helpers-centos-stream`\n    - `corpusops/project:helpers-centos-stream{9,8,7}`\n- Install all helpers from `/cops_helpers` to `$HELPERS_DIR` (`/helpers`)\n- It will start a dummy http server to work in pair with sidekar containers which use dockerize, unless you set `SKIP_HELPERS_SERVICE=1`, eg\n\n```yaml\nhelpers:\n  image: corpusops/project:helpers-ubuntu-22.04\n  volumes: [helpers:/helpers]\nredmine:\n  volumes: [helpers:/helpers]\n  entrypoint:\n  - /bin/bash\n  - '-exc'\n  - |-\n    export PATH=\"/helpers:$PATH\";until [ -e /helpers/frep ];do sleep 1;done;dockerize -wait http://helpers -timeout 120s\n    # now frep is available\n    frep /conf/foo:/conf/bar --overwrite\n    /start\n```\n\n### SSL Certificate Helper: /bin/cops_gen_cert.sh\n- see [script](./rootfs/bin/cops_gen_cert.sh)\n- controlled via env vars:\n\n    ```sh\n    SSL_COMMON_NAME=  # default: $hostname\n    SSL_ALT_NAMES=  # default: $hostname www.$hostname\n    SSL_CERT_BASENAME=  # default to hostname and \"cert\" through nginx script\n    SSL_CERT_PATH=\n    SSL_KEY_PATH=\n\tSSL_KEY_VALIDITY=  # cert validity in days\n\tSSL_CERT_VALIDITY=  # cert validity in days\n\tSSL_DIR_MODuE=  # directory perms mode\n\tSSL_CERT_MODE=  # cert perms mode\n\tSSL_KEY_MODE=  # key perms mode\n    SSL_CERT=  # x509 cert value if you want to give it\n    SSL_KEY=   # x509 cert key value if you want to give it\n    ```\n\n- If ``SSL_CERT`` is empty, a SSL key will be generated\n- If ``SSL_KEY`` is empty, a selfsigned cert will be generated\n\n### traefik helper: /bin/traefik.sh\n- [/bin/traefik.sh](./rootfs/bin/traefik.sh): helper to dockerize traefik\n- As you may know, forego uses a Procfile to configure itself.\n    - You can either use this entrypoint directly by giving args including the traefik config\n    - Or, easier, you can use either\n        - the ``TRAEFIK_CONFIG`` env var pointing to your config.\n        - mount a file to ``/traefik.toml``\n    - This config file will be parsed by envsubst for any env var prefixed by ``TRAEFIK_``.\n\n        ```yaml\n        traefik:\n          image: \"corpusops/traefik\"\n          entrypoint: /bin/traefik.sh\n          environment:\n          # if this file exists, it will be used as the config automatically\n          - TRAEFIK_CONFIG=/traefik.toml\n        ```\n\n\n### Use rsyslog image\n- See [./corpusops/rsyslog](./corpusops/rsyslog).\n- tag is ``corpusops/rsyslog``\n    - OS based variants:\n        - ``corpusops/rsyslog:{debian,alpîne,ubuntu}``\n- this image exposes a syslog daemon on port ``10514``\n- It will split with its default config every log inside ``/var/log/docker/\u003cprog_name\u003e.log``\n- logs also go to stdout\n- env vars (mainly to control log retention) [[see logrotate](./rootfs/etc/logrotate.d/rsyslog)]:\n    - ``RSYSLOG_PORT=10514``: rsyslog port\n    - ``LOGROTATE_SIZE=5M``: size to trigger a logrotate from.\n    - ``LOGROTATE_DAYS=30``: number of days to keep logs for.\n    - ``LOGROTATE_LONGRETENTION_DAYS=365``: number of days to keep long retention (web \u0026 loadbalancers) logs for.\n    - ``RSYSLOG_DOCKER_LOGS_PATH=/var/log/docker``: path to logs\n    - ``RSYSLOG_DOCKER_LONGRETENTION_LOGS_PATH=/var/log/docker/longretention``: path to logs with long retention\n    - ``RSYSLOG_DOCKER_LONGRETENTION_PATTERN=^(lb|nginx|proxy|traefik|haproxy|apache)``: regex to know which tagnames can be treated as long retention logs\n    - ``RSYSLOG_SPLITTED_CONFIGS=1``:\n        - if ``1``: logs are splitted under ``/var/log/docker/\u003cprog_name\u003e.log``\n        - else things go inside like usually in ``/var/log``\n- Any file inside ``/entry`` will be copied to ``/etc`` with same location\n- Any file named ``*.frep`` into ``/etc/logrotate.d`` \u0026\u0026 ``/etc/rsyslog.d`` will be processed through frep\n\nOne current pattern is to redirect docker logs through a local syslog this way:\n\n```yaml\nx-vars:\n  base: \u0026base\n    restart: always\n    # this will configure the baremetal host to reroute logs\n    # through localhost:1514 which forwards to ``log`` container itself\n    logging:\n      driver: \"syslog\"\n      options:\n        syslog-address: \"tcp://localhost:1514\"\n        tag: \"someservice\"\nservices:\n  log:\n    \u003c\u003c: [ *base ]\n    image: corpuspops/rsyslog\n    ports: [\"127.0.0.1:1514:10514\"]\n    # ensure no syslog log loop\n    logging: {driver: \"json-file\", options: {max-size: \"10M\", max-file: \"50\"}}\n  someservice:\n    \u003c\u003c: [ *base ]\n    image: some/service\n```\n\n## mailhog helper: /bin/project_mailhog.sh\n- Helper image built by [docker-project](https://github.com/corpusops/docker-project/), tags:\n    - `corpusops/project:mailhog`\n\n- `corpusops/project:mailhog`: mailhog wrapper to setup a user/password file from envvars:\n    - `MAILCATCHER_PASSWORD`\n    - `MAILCATCHER_USER`\n- smtp_port is on port `1025`, UI/API on port `8025`\n\n```yaml\n  mailcatcher:\n    image: \"corpusops/project:mailhog\"\n    hostname: mailcatcher\n    volumes: [\"mails:/mails\"]\n```\n\n# dbsetup : /bin/project_db_setup.sh\n- Helper image built by [docker-project](https://github.com/corpusops/docker-project/), tags:\n    - `corpusops/project:dbsetup`\n- helper to wait for db availability and then setup a dummy webserver to help dependent services orchestration\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorpusops%2Fdocker-images","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcorpusops%2Fdocker-images","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorpusops%2Fdocker-images/lists"}