This is page 19 of 25. Use http://codebase.md/id/docs/get_started/create/basic_markup.html?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .ci
│ ├── check-markdownfmt.sh
│ ├── check-metadata.sh
│ ├── check-pr-no-readme.sh
│ ├── check-required-files.sh
│ ├── check-short.sh
│ ├── check-ymlfmt.sh
│ └── get-markdownfmt.sh
├── .common-templates
│ ├── maintainer-community.md
│ ├── maintainer-docker.md
│ ├── maintainer-hashicorp.md
│ └── maintainer-influxdata.md
├── .dockerignore
├── .github
│ └── workflows
│ └── ci.yml
├── .template-helpers
│ ├── arches.sh
│ ├── autogenerated-warning.md
│ ├── compose.md
│ ├── generate-dockerfile-links-partial.sh
│ ├── generate-dockerfile-links-partial.tmpl
│ ├── get-help.md
│ ├── issues.md
│ ├── license-common.md
│ ├── template.md
│ ├── variant-alpine.md
│ ├── variant-default-buildpack-deps.md
│ ├── variant-default-debian.md
│ ├── variant-default-ubuntu.md
│ ├── variant-onbuild.md
│ ├── variant-slim.md
│ ├── variant-windowsservercore.md
│ ├── variant.md
│ └── variant.sh
├── adminer
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── aerospike
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── almalinux
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── alpine
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── alt
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── amazoncorretto
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── amazonlinux
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── api-firewall
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── arangodb
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── archlinux
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── backdrop
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── bash
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── bonita
│ ├── compose.yaml
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── buildpack-deps
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── busybox
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-glibc.md
│ ├── variant-musl.md
│ ├── variant-uclibc.md
│ └── variant.md
├── caddy
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo-120.png
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── cassandra
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── chronograf
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── cirros
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── clearlinux
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── clefos
│ ├── content.md
│ ├── deprecated.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── clickhouse
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── clojure
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── composer
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── convertigo
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── couchbase
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── couchdb
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── crate
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── dart
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── debian
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-slim.md
│ └── variant.md
├── docker
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-rootless.md
│ └── variant-windowsservercore.md
├── Dockerfile
├── drupal
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-fpm.md
├── eclipse-mosquitto
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── eclipse-temurin
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── eggdrop
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── elasticsearch
│ ├── compose.yaml
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-alpine.md
├── elixir
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── emqx
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── erlang
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── fedora
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── flink
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── fluentd
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── friendica
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── gazebo
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── gcc
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── generate-repo-stub-readme.sh
├── geonetwork
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-postgres.md
│ └── variant.md
├── get-categories.sh
├── ghost
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── golang
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-alpine.md
│ └── variant-tip.md
├── gradle
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── groovy
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── haproxy
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── haskell
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-slim.md
├── haxe
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── hello-world
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── update.sh
├── hitch
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── httpd
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── hylang
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── ibm-semeru-runtimes
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── ibmjava
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── influxdb
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-data.md
│ └── variant-meta.md
├── irssi
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── jetty
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── joomla
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── jruby
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── julia
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── kapacitor
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── kibana
│ ├── compose.yaml
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── kong
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── krakend
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo-120.png
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── LICENSE
├── lightstreamer
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── liquibase
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── logstash
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-alpine.md
├── mageia
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── mariadb
│ ├── compose.yaml
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── markdownfmt.sh
├── matomo
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── maven
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── mediawiki
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── memcached
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── metadata.json
├── metadata.sh
├── mongo
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── mongo-express
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── monica
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── mono
│ ├── content.md
│ ├── deprecated.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── mysql
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── nats
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── neo4j
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── neurodebian
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── nextcloud
│ ├── content.md
│ ├── deprecated.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── nginx
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-perl.md
├── node
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── notary
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── odoo
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── open-liberty
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── openjdk
│ ├── content.md
│ ├── deprecated.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-alpine.md
│ ├── variant-oracle.md
│ └── variant-slim.md
├── oraclelinux
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-slim.md
├── orientdb
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── parallel-update.sh
├── percona
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── perl
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── photon
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── php
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-apache.md
│ ├── variant-cli.md
│ ├── variant-fpm.md
│ └── variant.md
├── php-zendserver
│ ├── content.md
│ ├── deprecated.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── phpmyadmin
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── plone
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── postfixadmin
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-apache.md
│ ├── variant-fpm-alpine.md
│ └── variant-fpm.md
├── postgres
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── push.pl
├── push.sh
├── pypy
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── python
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-slim.md
├── r-base
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rabbitmq
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rakudo-star
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── README.md
├── redis
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── redmine
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── registry
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rethinkdb
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rocket.chat
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rockylinux
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── ros
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── ruby
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── rust
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── sapmachine
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── satosa
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── scratch
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── silverpeas
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── solr
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── sonarqube
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── spark
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── spiped
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── storm
│ ├── compose.yaml
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── swift
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── swipl
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── teamspeak
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── telegraf
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── tomcat
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── tomee
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── traefik
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-alpine.md
├── ubuntu
│ ├── content.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── unit
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── update.sh
├── varnish
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── websphere-liberty
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── wordpress
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ ├── variant-cli.md
│ └── variant-fpm.md
├── xwiki
│ ├── content.md
│ ├── get-help.md
│ ├── github-repo
│ ├── issues.md
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ └── README.md
├── ymlfmt.sh
├── yourls
│ ├── compose.yaml
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.svg
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-fpm.md
├── znc
│ ├── content.md
│ ├── github-repo
│ ├── license.md
│ ├── logo.png
│ ├── maintainer.md
│ ├── metadata.json
│ ├── README-short.txt
│ ├── README.md
│ └── variant-slim.md
└── zookeeper
├── compose.yaml
├── content.md
├── github-repo
├── license.md
├── logo.png
├── maintainer.md
├── metadata.json
├── README-short.txt
└── README.md
```
# Files
--------------------------------------------------------------------------------
/monica/logo.svg:
--------------------------------------------------------------------------------
```
1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="192" height="192" version="1.1" viewBox="0 0 500 500"><title>Artboard 3.1</title><desc>Created using Figma</desc><g id="Canvas" transform="translate(-2984 68)"><clipPath id="clip-0" clip-rule="evenodd"><path fill="#FFF" d="M 2984 -68L 3484 -68L 3484 432L 2984 432L 2984 -68Z"/></clipPath><g id="Artboard 3.1" clip-path="url(#clip-0)"><g id="Group 2"><g id="Oval"><use fill="#2C2B29" transform="translate(3002.51 -26.4788)" xlink:href="#path0_fill"/></g><g id="Oval"><use fill="#FFF" transform="translate(3047.56 17.3456)" xlink:href="#path1_fill"/></g><g id="Oval 2"><use fill="#2C2B29" transform="translate(2990 -39)" xlink:href="#path2_fill"/></g><g id="Oval 2"><use fill="#2C2B29" transform="matrix(-1 0 0 1 3478 -39)" xlink:href="#path2_fill"/></g><g id="Group"><g id="Oval 4"><use fill="#2B2A28" transform="translate(3265.32 122.647)" xlink:href="#path3_fill"/></g><g id="Oval 3"><use fill="#FFF" transform="translate(3292.63 154.768)" xlink:href="#path4_fill"/></g></g><g id="Group"><g id="Oval 4"><use fill="#2B2A28" transform="matrix(-1 0 0 1 3203.93 122.647)" xlink:href="#path3_fill"/></g><g id="Oval 3"><use fill="#FFF" transform="matrix(-1 0 0 1 3176.62 154.768)" xlink:href="#path4_fill"/></g></g><g id="Oval 5"><use fill="#2C2B29" transform="translate(3200.22 256.501)" xlink:href="#path5_fill"/></g></g></g></g><defs><path id="path0_fill" fill-rule="evenodd" d="M 235.425 429.479C 349.64 429.479 476.369 356.022 460.345 214.739C 444.321 73.4567 349.64 0 235.425 0C 121.21 0 27.2705 64.3949 2.77082 214.739C -21.7289 365.084 121.21 429.479 235.425 429.479Z"/><path id="path1_fill" fill-rule="evenodd" d="M 188.85 344.334C 280.47 344.334 382.128 285.44 369.274 172.167C 356.42 58.8939 280.47 0 188.85 0C 97.2312 0 21.8755 51.6286 2.22266 172.167C -17.4302 292.706 97.2312 344.334 188.85 344.334Z"/><path id="path2_fill" fill-rule="evenodd" d="M 65.5865 165.28C 78.0014 165.322 83.3945 120.9 105.565 100.675C 125.919 82.1083 172.677 75.742 172.677 54.2762C 172.677 9.42729 124.055 0 81.1199 0C 38.1853 0 0 45.4903 0 90.3392C 0 135.188 41.7747 165.201 65.5865 165.28Z"/><path id="path3_fill" fill-rule="evenodd" d="M 69.6 154.572C 102.094 146.823 115.643 133.157 115.643 88.997C 115.643 44.8368 94.944 0 59.3049 0C 23.6657 0 0 31.8863 0 76.0465C 0 120.207 37.106 162.32 69.6 154.572Z"/><path id="path4_fill" fill-rule="evenodd" d="M 30.3863 66.4287C 39.2286 66.4287 41.8586 64.1715 45.8555 59.1037C 50.3374 53.421 53.6797 46.8294 52.5868 33.2144C 50.7608 10.465 41.1736 0 22.4162 0C 3.6587 0 -3.78365e-16 14.4228 0 33.2144C -3.78365e-16 52.0059 11.6288 66.4287 30.3863 66.4287Z"/><path id="path5_fill" fill-rule="evenodd" d="M 35.2906 50.085C 52.9487 50.085 70.0718 24.0956 70.0718 12.9499C 70.0718 1.80416 52.6939 0 35.0359 0C 17.3779 0 0 1.80416 0 12.9499C 0 24.0956 17.6326 50.085 35.2906 50.085Z"/></defs></svg>
```
--------------------------------------------------------------------------------
/r-base/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is R?
2 |
3 | R is a system for statistical computation and graphics. It consists of a language plus a run-time environment with graphics, a debugger, access to certain system functions, and the ability to run programs stored in script files.
4 |
5 | The R language is widely used among statisticians and data miners for developing statistical software and data analysis. Polls and surveys of data miners are showing R's popularity has increased substantially in recent years.
6 |
7 | R is an implementation of the S programming language combined with lexical scoping semantics inspired by Scheme. S was created by John Chambers while at Bell Labs. R was created by Ross Ihaka and Robert Gentleman at the University of Auckland, New Zealand, and is currently developed by the R Development Core Team, of which Chambers is a member. R is named partly after the first names of the first two R authors and partly as a play on the name of S.
8 |
9 | R is a GNU project. The source code for the R software environment is written primarily in C, Fortran, and R. R is freely available under the GNU General Public License, and pre-compiled binary versions are provided for various operating systems. R uses a command line interface; however, several graphical user interfaces are available for use with R.
10 |
11 | > [R FAQ](http://cran.r-project.org/doc/FAQ/R-FAQ.html#What-is-R_003f), [wikipedia.org/wiki/R_(programming_language)](http://en.wikipedia.org/wiki/R_%28programming_language%29)
12 |
13 | %%LOGO%%
14 |
15 | # How to use this image
16 |
17 | ## Interactive R
18 |
19 | Launch R directly for interactive work:
20 |
21 | ```console
22 | $ docker run -ti --rm %%IMAGE%%
23 | ```
24 |
25 | ## Batch mode
26 |
27 | Link the working directory to run R batch commands. We recommend specifying a non-root user when linking a volume to the container to avoid permission changes, as illustrated here:
28 |
29 | ```console
30 | $ docker run -ti --rm -v "$PWD":/home/docker -w /home/docker -u docker %%IMAGE%% R CMD check .
31 | ```
32 |
33 | Alternatively, just run a bash session on the container first. This allows a user to run batch commands and also edit and run scripts:
34 |
35 | ```console
36 | $ docker run -ti --rm %%IMAGE%% bash
37 | $ vim.tiny myscript.R
38 | ```
39 |
40 | Write the script in the container, exit `vim` and run `Rscript`
41 |
42 | ```console
43 | $ Rscript myscript.R
44 | ```
45 |
46 | ## Dockerfiles
47 |
48 | Use `r-base` as a base for your own Dockerfiles. For instance, something along the lines of the following will compile and run your project:
49 |
50 | ```dockerfile
51 | FROM %%IMAGE%%
52 | COPY . /usr/local/src/myscripts
53 | WORKDIR /usr/local/src/myscripts
54 | CMD ["Rscript", "myscript.R"]
55 | ```
56 |
57 | Build your image with the command:
58 |
59 | ```console
60 | $ docker build -t myscript /path/to/Dockerfile
61 | ```
62 |
63 | Running this container with no command will execute the script. Alternatively, a user could run this container in interactive or batch mode as described above, instead of linking volumes.
64 |
65 | Further documentation and example use cases can be found at the [rocker-org](https://github.com/rocker-org/rocker/wiki) project wiki.
66 |
```
--------------------------------------------------------------------------------
/maven/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Maven?
2 |
3 | [Apache Maven](http://maven.apache.org) is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
4 |
5 | %%LOGO%%
6 |
7 | # How to use this image
8 |
9 | You can run a Maven project by using the Maven Docker image directly, passing a Maven command to `docker run`:
10 |
11 | ```console
12 | $ docker run -it --rm --name my-maven-project -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven %%IMAGE%%:3.3-jdk-8 mvn clean install
13 | ```
14 |
15 | ## Building local Docker image (optional)
16 |
17 | This is a base image that you can extend, so it has the bare minimum packages needed. If you add custom package(s) to the `Dockerfile`, then you can build your local Docker image like this:
18 |
19 | ```console
20 | $ docker build --tag my_local_%%IMAGE%%:3.5.2-jdk-8 .
21 | ```
22 |
23 | # Reusing the Maven local repository
24 |
25 | The local Maven repository can be reused across containers by creating a volume and mounting it in `/root/.m2`.
26 |
27 | ```console
28 | $ docker volume create --name maven-repo
29 | $ docker run -it -v maven-repo:/root/.m2 %%IMAGE%% mvn archetype:generate # will download artifacts
30 | $ docker run -it -v maven-repo:/root/.m2 %%IMAGE%% mvn archetype:generate # will reuse downloaded artifacts
31 | ```
32 |
33 | Or you can just use your home .m2 cache directory that you share e.g. with your Eclipse/IDEA:
34 |
35 | ```console
36 | $ docker run -it --rm -v "$PWD":/usr/src/mymaven -v "$HOME/.m2":/root/.m2 -v "$PWD/target:/usr/src/mymaven/target" -w /usr/src/mymaven %%IMAGE%% mvn clean package
37 | ```
38 |
39 | # Packaging a local repository with the image
40 |
41 | The `$MAVEN_CONFIG` dir (default to `/root/.m2`) could be configured as a volume so anything copied there in a Dockerfile at build time is lost. For that reason the dir `/usr/share/maven/ref/` exists, and anything in that directory will be copied on container startup to `$MAVEN_CONFIG`.
42 |
43 | To create a pre-packaged repository, create a `pom.xml` with the dependencies you need and use this in your `Dockerfile`. `/usr/share/maven/ref/settings-docker.xml` is a settings file that changes the local repository to `/usr/share/maven/ref/repository`, but you can use your own settings file as long as it uses `/usr/share/maven/ref/repository` as local repo.
44 |
45 | ```dockerfile
46 | COPY pom.xml /tmp/pom.xml
47 | RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
48 | ```
49 |
50 | To add your custom `settings.xml` file to the image use
51 |
52 | ```dockerfile
53 | COPY settings.xml /usr/share/maven/ref/
54 | ```
55 |
56 | For an example, check the `tests` dir
57 |
58 | # Running as non-root
59 |
60 | Maven needs the user home to download artifacts to, and if the user does not exist in the image an extra `user.home` Java property needs to be set.
61 |
62 | For example, to run as user `1000` mounting the host' Maven repo
63 |
64 | ```console
65 | $ docker run -v ~/.m2:/var/maven/.m2 -ti --rm -u 1000 -e MAVEN_CONFIG=/var/maven/.m2 %%IMAGE%% mvn -Duser.home=/var/maven archetype:generate
66 | ```
67 |
```
--------------------------------------------------------------------------------
/ruby/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Ruby?
2 |
3 | Ruby is a dynamic, reflective, object-oriented, general-purpose, open-source programming language. According to its authors, Ruby was influenced by Perl, Smalltalk, Eiffel, Ada, and Lisp. It supports multiple programming paradigms, including functional, object-oriented, and imperative. It also has a dynamic type system and automatic memory management.
4 |
5 | > [wikipedia.org/wiki/Ruby_(programming_language)](https://en.wikipedia.org/wiki/Ruby_%28programming_language%29)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | ## Create a `Dockerfile` in your Ruby app project
12 |
13 | ```dockerfile
14 | FROM %%IMAGE%%:3.3
15 |
16 | # throw errors if Gemfile has been modified since Gemfile.lock
17 | RUN bundle config --global frozen 1
18 |
19 | WORKDIR /usr/src/app
20 |
21 | COPY Gemfile Gemfile.lock ./
22 | RUN bundle install
23 |
24 | COPY . .
25 |
26 | CMD ["./your-daemon-or-script.rb"]
27 | ```
28 |
29 | Put this file in the root of your app, next to the `Gemfile`.
30 |
31 | You can then build and run the Ruby image:
32 |
33 | ```console
34 | $ docker build -t my-ruby-app .
35 | $ docker run -it --name my-running-script my-ruby-app
36 | ```
37 |
38 | ### Generate a `Gemfile.lock`
39 |
40 | The above example `Dockerfile` expects a `Gemfile.lock` in your app directory. This `docker run` will help you generate one. Run it in the root of your app, next to the `Gemfile`:
41 |
42 | ```console
43 | $ docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app %%IMAGE%%:3.3 bundle install
44 | ```
45 |
46 | ## Run a single Ruby script
47 |
48 | For many simple, single file projects, you may find it inconvenient to write a complete `Dockerfile`. In such cases, you can run a Ruby script by using the Ruby Docker image directly:
49 |
50 | ```console
51 | $ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:3.3 ruby your-daemon-or-script.rb
52 | ```
53 |
54 | ## Encoding
55 |
56 | By default, Ruby inherits the locale of the environment in which it is run. For most users running Ruby on their desktop systems, that means it's likely using some variation of `*.UTF-8` (`en_US.UTF-8`, etc). In Docker however, the default locale is `C`, which can have unexpected results. If your application needs to interact with UTF-8, it is recommended that you explicitly adjust the locale of your image/container via `-e LANG=C.UTF-8` or `ENV LANG C.UTF-8`.
57 |
58 | ## Image assumptions
59 |
60 | This image sets several environment variables which change the behavior of Bundler and Gem for running a single application within a container (especially in such a way that the development sources of the application can be bind-mounted inside a container and not have `.bundle` from the host interfere with the proper functionality of the container).
61 |
62 | The environment variables we set are canonically listed in the above-linked `Dockerfiles`, but some of them include `GEM_HOME`, `BUNDLE_SILENCE_ROOT_WARNING`, and `BUNDLE_APP_CONFIG`.
63 |
64 | If these cause issues for your use case (running multiple Ruby applications in a single container, for example), setting them to the empty string *should* be sufficient for undoing their behavior.
65 |
```
--------------------------------------------------------------------------------
/crate/logo.svg:
--------------------------------------------------------------------------------
```
1 | <svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 436 58" width="436" height="58"><style>.a{fill:#009dc7}</style><title>CrateDB</title><path class="a" d="m3.6 0h14.5v14.5h-14.5z"/><path class="a" d="m25.4 0h14.5v14.5h-14.5z"/><path class="a" d="m47.2 0h14.5v36.2h-14.5z"/><path class="a" d="m3.6 21.7h36.3v14.5h-36.3z"/><path class="a" d="m3.6 43.4h58.1v14.5h-58.1z"/><path d="m249.5 16.9h12.1v8.4h-12.1v19.3h12.1v8.4h-10.4c-1.5 0.1-2.9-0.2-4.3-0.7-1.3-0.6-2.6-1.3-3.6-2.3-1.1-1-1.9-2.2-2.5-3.6-0.6-1.3-1-2.7-1-4.2v-16.9h-9.7v-8.4h9.7v-12.1h9.7z"/><path d="m159.8 22.9q0-1.2 0.5-2.3 0.4-1.1 1.3-2 0.9-0.8 2-1.3 1.1-0.4 2.3-0.4h12.1v8.4h-13.3q-1 0-1.9 0.4-0.8 0.4-1.5 1-0.7 0.7-1.1 1.6-0.3 0.9-0.3 1.9v22.9h-9.7v-36.2h7.2l1.2 6h1.2z"/><path d="m90.8 16.9c0-1.6 0.3-3.2 0.9-4.6 0.6-1.5 1.5-2.8 2.7-3.9 1.1-1.2 2.4-2 3.9-2.7 1.5-0.6 3-0.9 4.6-0.9h36.4v9.7h-38.8v28.9h38.8v9.7h-36.4c-1.6 0-3.1-0.3-4.6-0.9-1.5-0.6-2.8-1.5-3.9-2.6-1.2-1.2-2.1-2.5-2.7-4-0.6-1.4-0.9-3-0.9-4.6v-24.1z"/><path fill-rule="evenodd" d="m358.9 6.1c2.1 0.9 4 2.1 5.5 3.7 1.6 1.5 2.9 3.4 3.7 5.5 0.9 2 1.3 4.2 1.3 6.4v14.5c0 2.2-0.4 4.4-1.3 6.5-0.8 2-2.1 3.9-3.7 5.4-1.5 1.6-3.4 2.8-5.5 3.7-2 0.8-4.2 1.3-6.4 1.3h-34v-48.3h34c2.2 0 4.4 0.5 6.4 1.3zm0.3 12.8q-0.6-1.3-1.6-2.3-1-1-2.4-1.6-1.3-0.5-2.7-0.5h-24.3v28.9h24.3q1.4 0 2.7-0.5 1.4-0.6 2.4-1.6 1-1 1.6-2.3 0.5-1.4 0.5-2.8v-14.5q0-1.4-0.5-2.8z"/><path fill-rule="evenodd" d="m212.7 16.9c1.3 0 2.5 0.2 3.7 0.7 1.2 0.5 2.3 1.2 3.2 2.1 0.9 0.9 1.7 1.9 2.2 3.1 0.4 1.2 0.7 2.5 0.7 3.7v26.6h-7.3l-1.2-4.8h-1.2q0 0.9-0.4 1.8-0.3 0.9-1 1.6-0.7 0.7-1.6 1-0.9 0.4-1.8 0.4h-14c-1.5 0.1-2.9-0.2-4.3-0.7-1.4-0.5-2.6-1.3-3.7-2.3-1.1-1-1.9-2.2-2.5-3.5-0.6-1.3-1-2.8-1-4.2 0-1.4 0.3-2.8 0.9-4.1 0.6-1.2 1.4-2.4 2.4-3.4 1-0.9 2.2-1.7 3.5-2.2 1.3-0.5 2.6-0.7 4-0.7h19.4v-7.3h-25.4v-7.8zm-3.6 28.9q0.7 0 1.3-0.2 0.7-0.3 1.2-0.8 0.5-0.5 0.8-1.2 0.3-0.7 0.3-1.4v-3.6h-17.6c-0.9 0-1.8 0.4-2.5 1.1-0.7 0.6-1.1 1.6-1.1 2.5 0 1 0.4 1.9 1.1 2.6 0.6 0.7 1.6 1 2.5 1.1h14z"/><path fill-rule="evenodd" d="m296.7 16.9c1.6 0 3.2 0.3 4.7 0.9 1.4 0.6 2.8 1.5 3.9 2.6 1.1 1.1 2 2.5 2.6 3.9 0.6 1.5 0.9 3.1 0.9 4.7v9.6h-30.2v6.6h27.8v7.9h-25.4c-1.6 0-3.2-0.3-4.6-0.9-1.5-0.6-2.8-1.5-4-2.6-1.1-1.2-2-2.5-2.6-4-0.6-1.4-0.9-3-0.9-4.6v-12c0-1.6 0.3-3.2 0.9-4.7 0.6-1.4 1.5-2.8 2.6-3.9 1.2-1.1 2.5-2 4-2.6 1.4-0.6 3-0.9 4.6-0.9h15.7zm3.7 15.1v-3.7q0-0.7-0.3-1.4-0.3-0.6-0.8-1.1-0.5-0.5-1.2-0.8-0.6-0.3-1.3-0.3h-14.6q-0.7 0-1.4 0.3-0.6 0.3-1.1 0.8-0.6 0.5-0.8 1.2-0.3 0.6-0.3 1.4v3.6z"/><path fill-rule="evenodd" d="m427.3 27.7q0 0 0 0 0 0 0 0.1zm0 0c2.3 1.9 3.9 4.4 4.6 7.3 0.8 2.9 0.6 5.9-0.4 8.7-1.1 2.7-2.9 5.1-5.3 6.8-2.5 1.7-5.4 2.6-8.3 2.6h-38.8v-48.2h36.3c2.7 0 5.3 0.7 7.6 2.1 2.3 1.3 4.1 3.3 5.3 5.7 1.3 2.3 1.8 5 1.6 7.6-0.2 2.6-1.1 5.2-2.6 7.4zm-38.5-3.7h26.6c1.3 0 2.5-0.5 3.4-1.4 0.9-0.9 1.4-2.1 1.4-3.4 0-1.2-0.5-2.5-1.4-3.4-0.9-0.9-2.1-1.4-3.4-1.4h-26.6zm32.5 17.5c0.9-1 1.3-2.3 1.3-3.6 0-1.4-0.4-2.6-1.3-3.6-0.9-1-2.1-1.7-3.4-1.9h-29.1v10.9h29.1c1.3-0.2 2.5-0.8 3.4-1.8z"/></svg>
```
--------------------------------------------------------------------------------
/redis/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Redis?
2 |
3 | Redis is the world’s fastest data platform. It provides cloud and on-prem solutions for caching, vector search, and NoSQL databases that seamlessly fit into any tech stack—making it simple for digital customers to build, scale, and deploy the fast apps our world runs on.
4 |
5 | > [redis.io](https://redis.io)
6 |
7 | %%LOGO%%
8 |
9 | # Security
10 |
11 | For the ease of accessing Redis from other containers via Docker networking, the "Protected mode" is turned off by default. This means that if you expose the port outside of your host (e.g., via `-p` on `docker run`), it will be open without a password to anyone. It is **highly** recommended to set a password (by supplying a config file) if you plan on exposing your Redis instance to the internet. For further information, see the following links about Redis security:
12 |
13 | - [Redis documentation on security](https://redis.io/docs/latest/operate/oss_and_stack/management/security/)
14 | - [Protected mode](https://redis.io/docs/latest/operate/oss_and_stack/management/security/#protected-mode)
15 | - [A few things about Redis security by antirez](http://antirez.com/news/96)
16 |
17 | # How to use this image
18 |
19 | ## Start a redis instance
20 |
21 | ```console
22 | $ docker run --name some-redis -d %%IMAGE%%
23 | ```
24 |
25 | ## Start with persistent storage
26 |
27 | ```console
28 | $ docker run --name some-redis -d %%IMAGE%% redis-server --save 60 1 --loglevel warning
29 | ```
30 |
31 | There are several different persistence strategies to choose from. This one will save a snapshot of the DB every 60 seconds if at least 1 write operation was performed (it will also lead to more logs, so the `loglevel` option may be desirable). If persistence is enabled, data is stored in the `VOLUME /data`, which can be used with `--volumes-from some-volume-container` or `-v /docker/host/dir:/data` (see [docs.docker volumes](https://docs.docker.com/engine/tutorials/dockervolumes/)).
32 |
33 | For more about Redis persistence, see [the official Redis documentation](https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/).
34 |
35 | ## Connecting via `redis-cli`
36 |
37 | ```console
38 | $ docker run -it --network some-network --rm %%IMAGE%% redis-cli -h some-redis
39 | ```
40 |
41 | ## Additionally, if you want to use your own redis.conf ...
42 |
43 | You can create your own Dockerfile that adds a redis.conf from the context into /data/, like so.
44 |
45 | ```dockerfile
46 | FROM %%IMAGE%%
47 | COPY redis.conf /usr/local/etc/redis/redis.conf
48 | CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
49 | ```
50 |
51 | Alternatively, you can specify something along the same lines with `docker run` options.
52 |
53 | ```console
54 | $ docker run -v /myredis/conf:/usr/local/etc/redis --name myredis %%IMAGE%% redis-server /usr/local/etc/redis/redis.conf
55 | ```
56 |
57 | Where `/myredis/conf/` is a local directory containing your `redis.conf` file. Using this method means that there is no need for you to have a Dockerfile for your redis container.
58 |
59 | The mapped directory should be writable, as depending on the configuration and mode of operation, Redis may need to create additional configuration files or rewrite existing ones.
60 |
```
--------------------------------------------------------------------------------
/metadata.sh:
--------------------------------------------------------------------------------
```bash
1 | #!/usr/bin/env bash
2 | set -Eeuo pipefail
3 |
4 | workdir="$(readlink -f "$BASH_SOURCE")"
5 | workdir="$(dirname "$workdir")"
6 | cd "$workdir"
7 |
8 | jsonFile='metadata.json'
9 | canonicalMetadataFile="./$jsonFile"
10 | export maxCategories=3
11 |
12 | self="$(basename "$0")"
13 |
14 | usage() {
15 | cat <<EOUSAGE
16 |
17 | usage: $self [--write] REPO[...]
18 | eg: $self debian
19 | $self -w python
20 |
21 | This script checks a givens repo's metadata.json. It checks formating (providing a diff), checks categories, and can write the formatting changes.
22 |
23 | -h, --help Print this help output and exit.
24 | -w, --write Apply json formatting (run without to see the diff that would be applied).
25 |
26 | Arguments are the list of repos with a 'metadata.json' in them. 'metadata.json' is expected in every repo.
27 | '.' can also be passed to check the format of the canonical './metadata.json' at
28 | the root of the repo, but the max categories of '-c' is skipped for it.
29 | EOUSAGE
30 | }
31 |
32 | # arg handling
33 | opts="$(getopt -o 'hw' --long 'help,write' -- "$@" || { usage >&2 && false; })"
34 | eval set -- "$opts"
35 |
36 | write=
37 |
38 | while :; do
39 | flag="$1"
40 | shift
41 | case "$flag" in
42 | --help | -h) usage && exit 0 ;;
43 | --write | -w) write=1 ;;
44 | --) break ;;
45 | *)
46 | {
47 | echo "error: unknown flag: $flag"
48 | usage
49 | } >&2
50 | exit 1
51 | ;;
52 | esac
53 | done
54 |
55 | repos=( "$@" )
56 | if [ "${#repos[@]}" -eq 0 ]; then
57 | repos=( */ )
58 | fi
59 | repos=( "${repos[@]%/}" )
60 |
61 | failures=0
62 | for repo in "${repos[@]}"; do
63 | repoFile="$repo/$jsonFile"
64 | if [ ! -s "$repoFile" ]; then
65 | echo >&2 "error: $repoFile does not exist or is empty"
66 | (( failures++ )) || :
67 | continue
68 | fi
69 |
70 | # sort object keys and pretty print with jq as our "cannonical json"
71 | # sort categories array, no duplicates
72 | if ! repoFileJson="$(jq -s --sort-keys '.[0] | .hub.categories |= unique' "$repoFile")"; then
73 | echo >&2 "error parsing '$repoFile'; invalid JSON?"
74 | (( failures++ )) || :
75 | continue
76 | fi
77 | if ! filediff="$(diff -u "$repoFile" <(cat <<<"$repoFileJson"))"; then
78 | cat <<<"$filediff"
79 | if [ -n "$write" ]; then
80 | cat <<<"$repoFileJson" > "$repoFile"
81 | else
82 | (( failures++ )) || :
83 | fi
84 | fi
85 |
86 | # TODO also check for required keys and/or types?
87 | # the canonicalMetadataFile doesn't have too many categories since it is the source of categories
88 | # all other metadata.json files must not be more than maxCategories or have categories that aren't in the canonical set
89 | if [ "$repoFile" != "$canonicalMetadataFile" ]; then
90 | export repoFile
91 | if errorText="$(jq -r --slurpfile canonical "$canonicalMetadataFile" '
92 | .hub.categories
93 | | (
94 | length
95 | | if . > (env.maxCategories | tonumber) then
96 | "error: \(env.repoFile): too many categories: \(.) (max \(env.maxCategories))"
97 | else empty end
98 | ),
99 | (
100 | . - $canonical[0].hub.categories
101 | | if length > 0 then
102 | "error: \(env.repoFile): unknown categories \(.)"
103 | else empty end
104 | )
105 | ' "$repoFile")"; then
106 | if [ -n "$errorText" ]; then
107 | echo >&2 "$errorText"
108 | (( failures++ )) || :
109 | fi
110 | else
111 | echo >&2 "error parsing '$repoFile'; invalid JSON?"
112 | (( failures++ )) || :
113 | continue
114 | fi
115 | fi
116 | done
117 |
118 | exit "$failures"
119 |
```
--------------------------------------------------------------------------------
/orientdb/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is OrientDB?
2 |
3 | [OrientDB](http://www.orientdb.org) is the first Multi-Model Open Source NoSQL DBMS that combines the power of graphs and the flexibility of documents into one scalable, high-performance operational database.
4 |
5 | %%LOGO%%
6 |
7 | ## How to use this image
8 |
9 | When OrientDB starts it asks for the root password. The root user is able to manage the OrientDB server: create new databases, manage users and roles. The root password can be passed to the container using an environment property:
10 |
11 | ```console
12 | $ docker run -d --name orientdb -p 2424:2424 -p 2480:2480 -e ORIENTDB_ROOT_PASSWORD=rootpwd %%IMAGE%%
13 | ```
14 |
15 | The [Studio](http://orientdb.com/docs/last/Studio-Home-page.html) is accessible to http://<docker-host>:2480 (e.g.: http://localhost:2480)
16 |
17 | ### Attach persistent volumes
18 |
19 | The docker image contains an OrientDB installation with basic configuration. If you need to provide **your own** config folder to **override** the one included in the OrientDB container, simply attach a persistent volume for configuration folder. Providing a configuration folder enables integration with software configuration tools such as Ansible, Chef or Puppet.
20 |
21 | The same applies for the databases folder, which if local to the running container would go away as soon as it died/you killed it. Obviously use volumes from dedicated data container is another option.
22 |
23 | ```console
24 | $ docker run -d --name orientdb -p 2424:2424 -p 2480:2480 \
25 | -v <config_path>:/orientdb/config \
26 | -v <databases_path>:/orientdb/databases \
27 | -v <backup_path>:/orientdb/backup \
28 | -e ORIENTDB_ROOT_PASSWORD=rootpwd \
29 | %%IMAGE%%
30 | ```
31 |
32 | **NOTE**: don't provide an **empty** config folder as volume, because OrientDB will startup with a very minimal configuration.
33 |
34 | ### Running OrientDB tools
35 |
36 | The OrientDB image contains a full fledge installation, so it is possible to run the [console](http://orientdb.com/docs/last/Console-Commands.html)
37 |
38 | ```console
39 | $ docker run --rm -it %%IMAGE%% /orientdb/bin/console.sh
40 | ```
41 |
42 | or even the etl
43 |
44 | ```console
45 | $ docker run --rm -it -v <config_path>:/orientdb/config %%IMAGE%% /orientdb/bin/oetl.sh ../config/oetl-config.json
46 | ```
47 |
48 | ### Override configuration parameters
49 |
50 | Any configuration settings may be specified upon startup using the `-D` option prefix. For example, starting OrientDB in distributed configuration will work this way:
51 |
52 | ```console
53 | $ docker run -d --name orientdb -p 2424:2424 -p 2480:2480 \
54 | -v <config_path>:/orientdb/config \
55 | -v <databases_path>:/orientdb/databases \
56 | -v <backup_path>:/orientdb/backup \
57 | -e ORIENTDB_ROOT_PASSWORD=rootpwd \
58 | -e ORIENTDB_NODE_NAME=odb1 \
59 | %%IMAGE%% /orientdb/bin/server.sh -Ddistributed=true
60 | ```
61 |
62 | For further configuration options please refer to the [Configuration](http://orientdb.com/docs/last/Configuration.html) section of the online documentation.
63 |
64 | ### Environment
65 |
66 | Environment parameters such as heap size could be passed via command line:
67 |
68 | ```console
69 | $ docker run -d --name orientdb -p 2424:2424 -p 2480:2480 \
70 | -e ORIENTDB_ROOT_PASSWORD=rootpwd \
71 | %%IMAGE%% /orientdb/bin/server.sh -Xmx8g
72 | ```
73 |
```
--------------------------------------------------------------------------------
/clojure/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Clojure?
2 |
3 | Clojure is a dialect of the Lisp programming language. It is a general-purpose programming language with an emphasis on functional programming. It runs on the Java Virtual Machine, Common Language Runtime, and JavaScript engines. Like other Lisps, Clojure treats code as data and has a macro system.
4 |
5 | > [wikipedia.org/wiki/Clojure](http://en.wikipedia.org/wiki/Clojure)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | ## Build tools
12 |
13 | Clojure has three major approaches to building and running projects:
14 |
15 | 1. [leiningen](https://leiningen.org)
16 | 1. The oldest and probably most common tool
17 | 2. [boot](http://boot-clj.com)
18 | 1. An alternative approach that solves similar problems as leiningen
19 | 3. [tools-deps](https://clojure.org/guides/deps_and_cli)
20 | 1. A more recent official tool for some of the lein/boot use cases
21 |
22 | There are variants of this image for all three of these tools and their respective releases. The most basic form of these tags is:
23 |
24 | 1. `clojure:lein`
25 | 2. `clojure:boot`
26 | 3. `clojure:tools-deps`
27 |
28 | But you can also append a hyphen and the version of that tool you'd like to use. For example, for lein 2.8.1 you can use this image: `clojure:lein-2.8.1`.
29 |
30 | ## Run your app with leiningen
31 |
32 | Add a `Dockerfile` to an existing Leiningen/Clojure project with the following contents:
33 |
34 | ```dockerfile
35 | FROM %%IMAGE%%
36 | COPY . /usr/src/app
37 | WORKDIR /usr/src/app
38 | CMD ["lein", "run"]
39 | ```
40 |
41 | Then, run these commands to build and run the image:
42 |
43 | ```console
44 | $ docker build -t my-clojure-app .
45 | $ docker run -it --rm --name my-running-app my-clojure-app
46 | ```
47 |
48 | While the above is the most straightforward example of a `Dockerfile`, it does have some drawbacks. The `lein run` command will download your dependencies, compile the project, and then run it. That's a lot of work, all of which you may not want done every time you run the image. To get around this, you can download the dependencies and compile the project ahead of time. This will significantly reduce startup time when you run your image.
49 |
50 | ```dockerfile
51 | FROM %%IMAGE%%
52 | RUN mkdir -p /usr/src/app
53 | WORKDIR /usr/src/app
54 | COPY project.clj /usr/src/app/
55 | RUN lein deps
56 | COPY . /usr/src/app
57 | RUN mv "$(lein uberjar | sed -n 's/^Created \(.*standalone\.jar\)/\1/p')" app-standalone.jar
58 | CMD ["java", "-jar", "app-standalone.jar"]
59 | ```
60 |
61 | Writing the `Dockerfile` this way will download the dependencies (and cache them, so they are only re-downloaded when the dependencies change) and then compile them into a standalone jar ahead of time rather than each time the image is run.
62 |
63 | You can then build and run the image as above.
64 |
65 | ## Compile your Lein/Clojure project into a jar from within the container
66 |
67 | If you have an existing Lein/Clojure project, it's fairly straightforward to compile your project into a jar from a container:
68 |
69 | ```console
70 | $ docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app %%IMAGE%% lein uberjar
71 | ```
72 |
73 | This will build your project into a jar file located in your project's `target/uberjar` directory.
74 |
75 | ## More details
76 |
77 | See [the official image README](https://github.com/Quantisan/docker-clojure/blob/master/README.md) for more details about using this image with boot and tools-deps.
78 |
```
--------------------------------------------------------------------------------
/geonetwork/variant-postgres.md:
--------------------------------------------------------------------------------
```markdown
1 | ## `%%REPO%%:postgres` (Only for GeoNetwork 3 series)
2 |
3 | This image gives support for using [PostgreSQL](https://www.postgresql.org/) as database engine for geonetwork. When you start the container, a database is created, and it is populated by geonetwork, once it starts.
4 |
5 | Please note that this image **does not ship** the postgres database server itself, but it gives you the option to link to a container running postgres, or to connect to a postgres instance using its ip address. If you are looking for a self-contained installation of geonetwork, **including the database engine**, please have a look at the default image variant.
6 |
7 | In order to setup the connection from geonetwork, you **must** inject the following variables into the container: - `POSTGRES_DB_USERNAME`: postgres user on your database server (must have permission to create databases) - `POSTGRES_DB_PASSWORD`: postgres password on your database server
8 |
9 | If your postgres instance is listening on a non-standard port, you must also set that variable: - `POSTGRES_DB_PORT`: postgres port on your database server (defaults to `5432`)
10 |
11 | ### Connecting to a postgres database
12 |
13 | If you want to connect to a postgres server, you need to pass an extra environment variable, `POSTGRES_DB_HOST`, containing the address of this server.
14 |
15 | If you want to connect to an **external database server**, you can use either the IP address or the DNS as `POSTGRES_DB_HOST`. For instance, if the server is running on `mydns.net`, on port `5434`, the username is `postgres` and the password is `mysecretpassword`:
16 |
17 | ```console
18 | docker run --name geonetwork -d -p 8080:8080 -e POSTGRES_DB_HOST=mydns.net -e POSTGRES_DB_PORT=5434 -e POSTGRES_DB_USERNAME=postgres -e POSTGRES_DB_PASSWORD=mysecretpassword -e POSTGRES_DB_NAME=mydbname geonetwork:postgres
19 | ```
20 |
21 | If are want to **run postgres on a container**, you can use the container name as `POSTGRES_DB_HOST`: just make sure that containers can discover each other, by **running them in the same user-defined network**. For instance, you can create a bridge network:
22 |
23 | ```console
24 | docker network create --driver bridge mynet
25 | ```
26 |
27 | Then if you want to run the official image of postgres, using `some-postgres` as container name, you could launch it like this:
28 |
29 | ```console
30 | docker run --name some-postgres --network=mynet -d postgres
31 | ```
32 |
33 | And then you could launch geonetwork, making sure you join the same network, and setting the required environment variables, including the `POSTGRES_DB_HOST`:
34 |
35 | ```console
36 | docker run --name geonetwork -d -p 8080:8080 --network=mynet -e POSTGRES_DB_HOST=some-postgres -e POSTGRES_DB_PORT=5432 -e POSTGRES_DB_USERNAME=postgres -e POSTGRES_DB_PASSWORD=mysecretpassword -e POSTGRES_DB_NAME=mydbname geonetwork:postgres
37 | ```
38 |
39 | #### Configuration environment variables
40 |
41 | These are some environments variables that can be set to configure the database connection:
42 |
43 | - `POSTGRES_DB_HOST`: database host name.
44 | - `POSTGRES_DB_PORT`: port where database server is listening (by default `5432`).
45 | - `POSTGRES_DB_NAME`: name of the database. If it doesn't exist the container will try to create it.
46 | - `POSTGRES_DB_USERNAME`: username.
47 | - `POSTGRES_DB_PASSWORD`: password.
48 |
```
--------------------------------------------------------------------------------
/eclipse-temurin/content.md:
--------------------------------------------------------------------------------
```markdown
1 | ## Overview
2 |
3 | The images in this repository contain OpenJDK binaries that are built by Eclipse Temurin.
4 |
5 | # What is Eclipse Temurin ?
6 |
7 | The Eclipse Temurin project provides code and processes that support the building of runtime binaries and associated technologies that are high performance, enterprise-caliber, cross-platform, open-source licensed, and Java SE TCK-tested for general use across the Java ecosystem.
8 |
9 | %%LOGO%%
10 |
11 | # Do you provide JRE (Java Runtime Environment) Images?
12 |
13 | JRE images are available for all versions of Eclipse Temurin but it is recommended that you produce a custom JRE-like runtime using `jlink` (see usage below).
14 |
15 | # Can I add my internal CA certificates to the truststore?
16 |
17 | Yes! Add your certificates to `/certificates` inside the container (e.g. by using a volume) and set the environment variable `USE_SYSTEM_CA_CERTS` on the container to any value. With Docker CLI this might look like this:
18 |
19 | ```console
20 | $ docker run -v $(pwd)/certs:/certificates/ -e USE_SYSTEM_CA_CERTS=1 %%IMAGE%%:21
21 | ```
22 |
23 | The certificates would get added to the system CA store, which would in turn be converted to Java's truststore. The format of the certificates depends on what the OS of the base image used expects, but PEM format with a `.crt` file extension is a good bet. **Please note**: this feature is currently not available for Windows-based images.
24 |
25 | # How to use this Image
26 |
27 | To run a pre-built jar file with the latest OpenJDK 21, use the following Dockerfile:
28 |
29 | ```dockerfile
30 | FROM %%IMAGE%%:21
31 | RUN mkdir /opt/app
32 | COPY japp.jar /opt/app
33 | CMD ["java", "-jar", "/opt/app/japp.jar"]
34 | ```
35 |
36 | You can build and run the Docker Image as shown in the following example:
37 |
38 | ```console
39 | docker build -t japp .
40 | docker run -it --rm japp
41 | ```
42 |
43 | ### Using a different base Image
44 |
45 | If you are using a distribution that we don't provide an image for you can copy the JDK using a similar Dockerfile to the one below:
46 |
47 | ```dockerfile
48 | # Example
49 | FROM <base image>
50 | ENV JAVA_HOME=/opt/java/openjdk
51 | COPY --from=%%IMAGE%%:21 $JAVA_HOME $JAVA_HOME
52 | ENV PATH="${JAVA_HOME}/bin:${PATH}"
53 | ```
54 |
55 | ### Creating a JRE using jlink
56 |
57 | On OpenJDK 21+, a JRE can be generated using `jlink`, see the following Dockerfile:
58 |
59 | ```dockerfile
60 | # Example of custom Java runtime using jlink in a multi-stage container build
61 | FROM %%IMAGE%%:21 as jre-build
62 |
63 | # Create a custom Java runtime
64 | RUN $JAVA_HOME/bin/jlink \
65 | --add-modules java.base \
66 | --strip-debug \
67 | --no-man-pages \
68 | --no-header-files \
69 | --compress=2 \
70 | --output /javaruntime
71 |
72 | # Define your base image
73 | FROM debian:buster-slim
74 | ENV JAVA_HOME=/opt/java/openjdk
75 | ENV PATH "${JAVA_HOME}/bin:${PATH}"
76 | COPY --from=jre-build /javaruntime $JAVA_HOME
77 |
78 | # Continue with your application deployment
79 | RUN mkdir /opt/app
80 | COPY japp.jar /opt/app
81 | CMD ["java", "-jar", "/opt/app/japp.jar"]
82 | ```
83 |
84 | If you want to place the jar file on the host file system instead of inside the container, you can mount the host path onto the container by using the following commands:
85 |
86 | ```dockerfile
87 | FROM %%IMAGE%%:21.0.2_13-jdk
88 | CMD ["java", "-jar", "/opt/app/japp.jar"]
89 | ```
90 |
91 | ```console
92 | docker build -t japp .
93 | docker run -it -v /path/on/host/system/jars:/opt/app japp
94 | ```
95 |
```
--------------------------------------------------------------------------------
/httpd/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is httpd?
2 |
3 | The Apache HTTP Server, colloquially called Apache, is a Web server application notable for playing a key role in the initial growth of the World Wide Web. Originally based on the NCSA HTTPd server, development of Apache began in early 1995 after work on the NCSA code stalled. Apache quickly overtook NCSA HTTPd as the dominant HTTP server, and has remained the most popular HTTP server in use since April 1996.
4 |
5 | > [wikipedia.org/wiki/Apache_HTTP_Server](http://en.wikipedia.org/wiki/Apache_HTTP_Server)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image.
10 |
11 | This image only contains Apache httpd with the defaults from upstream. There is no PHP installed, but it should not be hard to extend. On the other hand, if you just want PHP with Apache httpd see the [PHP image](https://hub.docker.com/_/php/) and look at the `-apache` tags. If you want to run a simple HTML server, add a simple Dockerfile to your project where `public-html/` is the directory containing all your HTML.
12 |
13 | ### Create a `Dockerfile` in your project
14 |
15 | ```dockerfile
16 | FROM %%IMAGE%%:2.4
17 | COPY ./public-html/ /usr/local/apache2/htdocs/
18 | ```
19 |
20 | Then, run the commands to build and run the Docker image:
21 |
22 | ```console
23 | $ docker build -t my-apache2 .
24 | $ docker run -dit --name my-running-app -p 8080:80 my-apache2
25 | ```
26 |
27 | Visit http://localhost:8080 and you will see It works!
28 |
29 | ### Without a `Dockerfile`
30 |
31 | If you don't want to include a `Dockerfile` in your project, it is sufficient to do the following:
32 |
33 | ```console
34 | $ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ %%IMAGE%%:2.4
35 | ```
36 |
37 | ### Configuration
38 |
39 | To customize the configuration of the httpd server, first obtain the upstream default configuration from the container:
40 |
41 | ```console
42 | $ docker run --rm %%IMAGE%%:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf
43 | ```
44 |
45 | You can then `COPY` your custom configuration in as `/usr/local/apache2/conf/httpd.conf`:
46 |
47 | ```dockerfile
48 | FROM %%IMAGE%%:2.4
49 | COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
50 | ```
51 |
52 | #### SSL/HTTPS
53 |
54 | If you want to run your web traffic over SSL, the simplest setup is to `COPY` or mount (`-v`) your `server.crt` and `server.key` into `/usr/local/apache2/conf/` and then customize the `/usr/local/apache2/conf/httpd.conf` by removing the comment symbol from the following lines:
55 |
56 | ```apacheconf
57 | ...
58 | #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
59 | ...
60 | #LoadModule ssl_module modules/mod_ssl.so
61 | ...
62 | #Include conf/extra/httpd-ssl.conf
63 | ...
64 | ```
65 |
66 | The `conf/extra/httpd-ssl.conf` configuration file will use the certificate files previously added and tell the daemon to also listen on port 443. Be sure to also add something like `-p 443:443` to your `docker run` to forward the https port.
67 |
68 | This could be accomplished with a `sed` line similar to the following:
69 |
70 | ```dockerfile
71 | RUN sed -i \
72 | -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \
73 | -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \
74 | -e 's/^#\(LoadModule .*mod_socache_shmcb.so\)/\1/' \
75 | conf/httpd.conf
76 | ```
77 |
78 | The previous steps should work well for development, but we recommend customizing your conf files for production, see [httpd.apache.org](https://httpd.apache.org/docs/2.4/ssl/ssl_faq.html) for more information about SSL setup.
79 |
```
--------------------------------------------------------------------------------
/hitch/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Hitch?
2 |
3 | [Hitch](https://hitch-tls.org/) is a *libev-based* high performance *SSL/TLS proxy* by [Varnish Software](https://varnish-software.com). It is specifically built to terminate TLS connections at high scale and forwards unencrypted HTTP traffic to Varnish or any other HTTP backend.
4 |
5 | # How to use this image
6 |
7 | Running a Hitch Docker container can be done by using the following command:
8 |
9 | ```console
10 | $ docker run --name=hitch -p 443:443 %%IMAGE%%
11 | ```
12 |
13 | This container will expose port `443`, which is required for HTTPS traffic.
14 |
15 | ## Configuration file and extra options
16 |
17 | Without any argument, the container will run `hitch --config=/etc/hitch/hitch.conf`. You can mount your own configuration file to replace the default one:
18 |
19 | ```console
20 | $ docker run -v /path/to/your/config/file:/etc/hitch/hitch.conf:ro %%IMAGE%%
21 | ```
22 |
23 | You can also change the path of the configuration file by setting the `HITCH_CONFIG_FILE` environment variable.
24 |
25 | Note that extra arguments can be added to the command line. If the first argument starts with a `-`, the arguments are added to the default command line, otherwise they are treated as a command.
26 |
27 | > Our assumption is that your backend, Varnish or other, supports both *HTTP/2* and the *PROXY* protocol.
28 |
29 | ## Connecting to the backend
30 |
31 | By default Hitch will connect to the backend using `localhost:8843` using the [PROXY protocol](https://github.com/varnish/hitch/blob/master/docs/proxy-protocol.md). If your backend server *PROXY*, the two will be able to talk together and backend will be able to expose the true client IP.
32 |
33 | But you'll probably run your backend service in a separate container. In that case, you'll want to change the backend settings. You can either do that by replacing the [`backend`](https://github.com/varnish/hitch/blob/master/hitch.conf.man.rst#backend--) configuration setting in your mounted configuration file, or by adding a *command-line option*.
34 |
35 | Here's how you set the backend via a *command-line option*, assuming your backend is available through `backend.example.com` on port `8443`:
36 |
37 | ```console
38 | $ docker run %%IMAGE%% "--backend=[backend.example.com]:8443"
39 | ```
40 |
41 | ## Setting the certificate
42 |
43 | The Hitch Docker image comes with a self-signed certificate that is stored in `/etc/hitch/certs/default`.
44 |
45 | This certificate is automatically created during *Hitch* package install, and is a self-signed certificate using 2048-bit RSA-encrypted cipher. It is set up for the `localhost` hostname, with an expiration date 30 years in the future.
46 |
47 | This certificate is only suited for testing. Using a bind mount, you can override the value of the certificate and use your own certificate, which is advisable.
48 |
49 | Here's an example:
50 |
51 | ```console
52 | $ docker run -v /path/to/your/certificate:/etc/hitch/certs/default:ro %%IMAGE%%
53 | ```
54 |
55 | You can also override the [`pem-file`](https://github.com/varnish/hitch/blob/master/hitch.conf.man.rst#pem-file--string) configuration setting in your mounted configuration file.
56 |
57 | If you prefer setting the certificate location on the command line, you can add the location as part of the `--backend` option.
58 |
59 | Here's how you do this:
60 |
61 | ```console
62 | $ docker run %%IMAGE%% "--backend=[backend.example.com]:8443:/path/to/cert.pem"
63 | ```
64 |
```
--------------------------------------------------------------------------------
/backdrop/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Backdrop CMS?
2 |
3 | Backdrop CMS is a comprehensive Content Management System for small to medium sized businesses and non-profits. It is a fork of the Drupal project.
4 |
5 | Backdrop CMS enables people to build highly customized websites, affordably, through collaboration and open source software. For more on the Backdrop's philosophy see https://backdropcms.org/philosophy.
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | The basic pattern for starting a `%%REPO%%` instance is:
12 |
13 | ```console
14 | $ docker run --name some-%%REPO%% --link some-mysql:mysql -d %%IMAGE%%
15 | ```
16 |
17 | The following environment variables are also honored for configuring your Backdrop CMS instance:
18 |
19 | - `-e BACKDROP_DB_HOST=...` (defaults to the IP and port of the linked `mysql` container)
20 | - `-e BACKDROP_DB_USER=...` (defaults to "root")
21 | - `-e BACKDROP_DB_PASSWORD=...` (defaults to the value of the `MYSQL_ROOT_PASSWORD` environment variable from the linked `mysql` container)
22 | - `-e BACKDROP_DB_NAME=...` (defaults to "backdrop")
23 | - `-e BACKDROP_DB_PORT=...` (defaults to 3306)
24 | - `-e BACKDROP_DB_DRIVER=...` (defaults to "mysql")
25 |
26 | The `BACKDROP_DB_NAME` **must already exist** on the given MySQL server. Check out the [official mysql image](https://hub.docker.com/_/mysql/) for more info on spinning up a DB.
27 |
28 | If you'd like to be able to access the instance from the host without the container's IP, standard port mappings can be used:
29 |
30 | ```console
31 | $ docker run --name some-%%REPO%% --link some-mysql:mysql -p 8080:80 -d %%IMAGE%%
32 | ```
33 |
34 | Then, access it via `http://localhost:8080` or `http://host-ip:8080` in a browser.
35 |
36 | If you'd like to use an external database instead of a linked `mysql` container, specify the hostname and port with `BACKDROP_DB_HOST`/`BACKDROP_DB_PORT` along with the password in `BACKDROP_DB_PASSWORD` and the username in `BACKDROP_DB_USER` (if it is something other than `root`):
37 |
38 | ```console
39 | $ docker run --name some-%%REPO%% \
40 | -e BACKDROP_DB_HOST=10.1.2.3 \
41 | -e BACKDROP_DB_PORT=10432 \
42 | -e BACKDROP_DB_USER=... \
43 | -e BACKDROP_DB_PASSWORD=... \
44 | -d %%REPO%%
45 | ```
46 |
47 | ## %%COMPOSE%%
48 |
49 | Run `docker compose up`, wait for it to initialize completely, and visit `http://localhost:8080` or `http://host-ip:8080`.
50 |
51 | ## Adding additional libraries / extensions
52 |
53 | This image does not provide any additional PHP extensions or other libraries, even if they are required by popular plugins. There are an infinite number of possible plugins, and they potentially require any extension PHP supports. Including every PHP extension that exists would dramatically increase the image size.
54 |
55 | If you need additional PHP extensions, you'll need to create your own image `FROM` this one. The [documentation of the `php` image](https://github.com/docker-library/docs/blob/master/php/README.md#how-to-install-more-php-extensions) explains how to compile additional extensions. Additionally, the [`drupal:7` Dockerfile](https://github.com/docker-library/drupal/blob/bee08efba505b740a14d68254d6e51af7ab2f3ea/7/Dockerfile#L6-9) has an example of doing this.
56 |
57 | The following Docker Hub features can help with the task of keeping your dependent images up-to-date:
58 |
59 | - [Automated Builds](https://docs.docker.com/docker-hub/builds/) let Docker Hub automatically build your Dockerfile each time you push changes to it.
60 |
```
--------------------------------------------------------------------------------
/oraclelinux/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # Oracle Linux
2 |
3 | %%LOGO%%
4 |
5 | Oracle Linux is an open-source operating system available under the GNU General Public License (GPLv2). Suitable for general purpose or Oracle workloads, it benefits from rigorous testing of more than 128,000 hours per day with real- world workloads and includes unique innovations such as Ksplice for zero- downtime kernel patching, DTrace for real-time diagnostics, the powerful Btrfs file system, and more.
6 |
7 | > **NOTE:** the `oraclelinux` image intentionally does *not* provide a `latest` tag. You must specify [an existing tag](https://hub.docker.com/_/oraclelinux?tab=tags) when referencing this image. See *"Removal of the `latest` tag"* below for further details.
8 |
9 | ## How to use these images
10 |
11 | The Oracle Linux images are intended for use in the **FROM** field of a downstream `Dockerfile`. For example, to use the latest optimized Oracle Linux 8 image, specify `FROM %%IMAGE%%:8`.
12 |
13 | ## Removal of `latest` tag
14 |
15 | The `latest` tag was removed from the Oracle Linux official images in June 2020 to avoid breaking any downstream images caused by backwards-incompatible changes introduced by the release of a new version. Downstream images must specify the version, i.e. `oraclelinux:7` or `oraclelinux:8`.
16 |
17 | ### Differences between `oraclelinux:8` and `oraclelinux:8-slim`
18 |
19 | Oracle recommends using `oraclelinux:8` for most images that extend Oracle Linux 8.
20 |
21 | The `oraclelinux:8-slim` variant is intended primarily to provide "just enough user space" for statically compiled binaries or microservices. Use of the `8-slim` variant is discouraged for general purposes, due to the inclusion of `microdnf` in place of `dnf` and signficantly reduced locale data.
22 |
23 | ### Differences between `oraclelinux:7` and `oraclelinux:7-slim`
24 |
25 | For images that want an Oracle Linux 7 user space, Oracle recommends using `oraclelinux:7-slim` as the base layer as it contains just enough packages for `yum` to be able to install more packages.
26 |
27 | The `oraclelinux:7` images is based on the package set of what would be installed on a bare-metal server when performing a minimal install of Oracle Linux.
28 |
29 | ## Changelog
30 |
31 | Oracle maintains a [CHANGELOG](https://github.com/oracle/container-images/blob/main/CHANGELOG.md) that documents by release date the errata applied and any CVE(s) that are mitigated in each update to the official images.
32 |
33 | ## Official Resources
34 |
35 | - [Oracle Linux documentation](https://docs.oracle.com/en/operating-systems/oracle-linux/index.html)
36 | - [Oracle Linux Yum Server](http://yum.oracle.com)
37 | - [Unbreakable Linux Network](https://linux.oracle.com)
38 |
39 | ## Customer Support
40 |
41 | Oracle provides support to Oracle Linux subscription customers via the [My Oracle Support](https://support.oracle.com) portal. The Oracle Linux container images are covered by Oracle Linux Basic and Premier support subscriptions. Customers should follow existing support procedures to obtain support for Oracle Linux running in a container.
42 |
43 | ## Community Support
44 |
45 | Users without an Oracle Linux support subscription should either [open an issue](https://github.com/oracle/container-images/issues) or [start a discussion](https://github.com/oracle/container-images/discussions) in the [Oracle Linux container image repository](https://github.com/oracle/container-images) on GitHub.
46 |
```
--------------------------------------------------------------------------------
/openjdk/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is OpenJDK?
2 |
3 | OpenJDK (Open Java Development Kit) is a free and open source implementation of the Java Platform, Standard Edition (Java SE). OpenJDK is the official reference implementation of Java SE since version 7.
4 |
5 | > [wikipedia.org/wiki/OpenJDK](http://en.wikipedia.org/wiki/OpenJDK)
6 |
7 | Java is a registered trademark of Oracle and/or its affiliates.
8 |
9 | %%LOGO%%
10 |
11 | # How to use this image
12 |
13 | ## Start a Java instance in your app
14 |
15 | The most straightforward way to use this image is to use a Java container as both the build and runtime environment. In your `Dockerfile`, writing something along the lines of the following will compile and run your project:
16 |
17 | ```dockerfile
18 | FROM %%IMAGE%%:11
19 | COPY . /usr/src/myapp
20 | WORKDIR /usr/src/myapp
21 | RUN javac Main.java
22 | CMD ["java", "Main"]
23 | ```
24 |
25 | You can then run and build the Docker image:
26 |
27 | ```console
28 | $ docker build -t my-java-app .
29 | $ docker run -it --rm --name my-running-app my-java-app
30 | ```
31 |
32 | ## Compile your app inside the Docker container
33 |
34 | There may be occasions where it is not appropriate to run your app inside a container. To compile, but not run your app inside the Docker instance, you can write something like:
35 |
36 | ```console
37 | $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:11 javac Main.java
38 | ```
39 |
40 | This will add your current directory as a volume to the container, set the working directory to the volume, and run the command `javac Main.java` which will tell Java to compile the code in `Main.java` and output the Java class file to `Main.class`.
41 |
42 | ## Make JVM respect CPU and RAM limits
43 |
44 | On startup the JVM tries to detect the number of available CPU cores and RAM to adjust its internal parameters (like the number of garbage collector threads to spawn) accordingly. When the container is ran with limited CPU/RAM then the standard system API used by the JVM for probing it will return host-wide values. This can cause excessive CPU usage and memory allocation errors with older versions of the JVM.
45 |
46 | Inside Linux containers, OpenJDK versions 8 and later can correctly detect the container-limited number of CPU cores and available RAM. For all currently supported OpenJDK versions this is turned on by default.
47 |
48 | Inside Windows Server (non-Hyper-V) containers, the limit for the number of available CPU cores doesn't work (it's ignored by Host Compute Service). To set the limit manually the JVM can be started as:
49 |
50 | ```console
51 | $ start /b /wait /affinity 0x3 path/to/java.exe ...
52 | ```
53 |
54 | In this example CPU affinity hex mask `0x3` will limit the JVM to 2 CPU cores.
55 |
56 | RAM limit is supported by Windows Server containers, but currently the JVM cannot detect it. To prevent excessive memory allocations, `-XX:MaxRAM=...` option must be specified with the value that is not bigger than the containers RAM limit.
57 |
58 | ## Environment variables with periods in their names
59 |
60 | Some shells (notably, [the BusyBox `/bin/sh` included in Alpine Linux](https://github.com/docker-library/openjdk/issues/135)) do not support environment variables with periods in the names (which are technically not POSIX compliant), and thus *strip* them instead of passing them through (as Bash does). If your application requires environment variables of this form, either use `CMD ["java", ...]` directly (no shell), or (install and) use Bash explicitly instead of `/bin/sh`.
61 |
```
--------------------------------------------------------------------------------
/haproxy/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is HAProxy?
2 |
3 | HAProxy is a free, open source high availability solution, providing load balancing and proxying for TCP and HTTP-based applications by spreading requests across multiple servers. It is written in C and has a reputation for being fast and efficient (in terms of processor and memory usage).
4 |
5 | > [wikipedia.org/wiki/HAProxy](https://en.wikipedia.org/wiki/HAProxy)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | Since no two users of HAProxy are likely to configure it exactly alike, this image does not come with any default configuration.
12 |
13 | Please refer to [upstream's excellent (and comprehensive) documentation](https://docs.haproxy.org/) on the subject of configuring HAProxy for your needs.
14 |
15 | It is also worth checking out the [`examples/` directory from upstream](http://git.haproxy.org/?p=haproxy-2.3.git;a=tree;f=examples).
16 |
17 | ## Create a `Dockerfile`
18 |
19 | ```dockerfile
20 | FROM %%IMAGE%%:2.3
21 | COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
22 | ```
23 |
24 | ## Build the container
25 |
26 | ```console
27 | $ docker build -t my-haproxy .
28 | ```
29 |
30 | ## Test the configuration file
31 |
32 | ```console
33 | $ docker run -it --rm --name haproxy-syntax-check my-haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg
34 | ```
35 |
36 | ## Run the container
37 |
38 | ```console
39 | $ docker run -d --name my-running-haproxy --sysctl net.ipv4.ip_unprivileged_port_start=0 my-haproxy
40 | ```
41 |
42 | You will need a kernel at [version 4.11 or newer](https://github.com/moby/moby/issues/8460#issuecomment-312459310) to use `--sysctl net.ipv4.ip_unprivileged_port_start=0` , you may need to publish the ports your HAProxy is listening on to the host by specifying the -p option, for example -p 8080:80 to publish port 8080 from the container host to port 80 in the container. Make sure the port you're using is free.
43 |
44 | **Note:** the 2.4+ versions of the container will run as `USER haproxy` by default (hence the `--sysctl net.ipv4.ip_unprivileged_port_start=0` above), but older versions still default to `root` for compatibility reasons; use `--user haproxy` (or any other UID) if you want to run as non-root in older versions.
45 |
46 | ## Directly via bind mount
47 |
48 | ```console
49 | $ docker run -d --name my-running-haproxy -v /path/to/etc/haproxy:/usr/local/etc/haproxy:ro --sysctl net.ipv4.ip_unprivileged_port_start=0 %%IMAGE%%:2.3
50 | ```
51 |
52 | Note that your host's `/path/to/etc/haproxy` folder should be populated with a file named `haproxy.cfg`. If this configuration file refers to any other files within that folder then you should ensure that they also exist (e.g. template files such as `400.http`, `404.http`, and so forth). However, many minimal configurations do not require any supporting files.
53 |
54 | ### Reloading config
55 |
56 | If you used a bind mount for the config and have edited your `haproxy.cfg` file, you can use HAProxy's graceful reload feature by sending a `SIGHUP` to the container:
57 |
58 | ```console
59 | $ docker kill -s HUP my-running-haproxy
60 | ```
61 |
62 | The entrypoint script in the image checks for running the command `haproxy` and replaces it with `haproxy-systemd-wrapper` from HAProxy upstream which takes care of signal handling to do the graceful reload. Under the hood this uses the `-sf` option of `haproxy` so "there are two small windows of a few milliseconds each where it is possible that a few connection failures will be noticed during high loads" (see [Stopping and restarting HAProxy](http://www.haproxy.org/download/2.3/doc/management.txt)).
63 |
```
--------------------------------------------------------------------------------
/golang/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Go?
2 |
3 | Go (a.k.a., Golang) is a programming language first developed at Google. It is a statically-typed language with syntax loosely derived from C, but with additional features such as garbage collection, type safety, some dynamic-typing capabilities, additional built-in types (e.g., variable-length arrays and key-value maps), and a large standard library.
4 |
5 | > [wikipedia.org/wiki/Go_(programming_language)](http://en.wikipedia.org/wiki/Go_%28programming_language%29)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | **Note:** `/go` is world-writable to allow flexibility in the user which runs the container (for example, in a container started with `--user 1000:1000`, running `go get github.com/example/...` into the default `$GOPATH` will succeed). While the `777` directory would be insecure on a regular host setup, there are not typically other processes or users inside the container, so this is equivalent to `700` for Docker usage, but allowing for `--user` flexibility.
12 |
13 | ## Start a Go instance in your app
14 |
15 | The most straightforward way to use this image is to use a Go container as both the build and runtime environment. In your `Dockerfile`, writing something along the lines of the following will compile and run your project (assuming it uses `go.mod` for dependency management):
16 |
17 | ```dockerfile
18 | FROM %%IMAGE%%:1.24
19 |
20 | WORKDIR /usr/src/app
21 |
22 | # pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
23 | COPY go.mod go.sum ./
24 | RUN go mod download
25 |
26 | COPY . .
27 | RUN go build -v -o /usr/local/bin/app ./...
28 |
29 | CMD ["app"]
30 | ```
31 |
32 | You can then build and run the Docker image:
33 |
34 | ```console
35 | $ docker build -t my-golang-app .
36 | $ docker run -it --rm --name my-running-app my-golang-app
37 | ```
38 |
39 | ## Compile your app inside the Docker container
40 |
41 | There may be occasions where it is not appropriate to run your app inside a container. To compile, but not run your app inside the Docker instance, you can write something like:
42 |
43 | ```console
44 | $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:1.24 go build -v
45 | ```
46 |
47 | This will add your current directory as a volume to the container, set the working directory to the volume, and run the command `go build` which will tell go to compile the project in the working directory and output the executable to `myapp`. Alternatively, if you have a `Makefile`, you can run the `make` command inside your container.
48 |
49 | ```console
50 | $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:1.24 make
51 | ```
52 |
53 | ## Cross-compile your app inside the Docker container
54 |
55 | If you need to compile your application for a platform other than `linux/amd64` (such as `windows/386`):
56 |
57 | ```console
58 | $ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp -e GOOS=windows -e GOARCH=386 %%IMAGE%%:1.24 go build -v
59 | ```
60 |
61 | Alternatively, you can build for multiple platforms at once:
62 |
63 | ```console
64 | $ docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp %%IMAGE%%:1.24 bash
65 | $ for GOOS in darwin linux; do
66 | > for GOARCH in 386 amd64; do
67 | > export GOOS GOARCH
68 | > go build -v -o myapp-$GOOS-$GOARCH
69 | > done
70 | > done
71 | ```
72 |
73 | ## Git LFS
74 |
75 | If downloading your dependencies results in an error like "checksum mismatch", you should check whether they are using [Git LFS](https://git-lfs.com/) (and thus need it installed for downloading them and calculating correct `go.sum` values).
76 |
```
--------------------------------------------------------------------------------
/crate/content.md:
--------------------------------------------------------------------------------
```markdown
1 | %%LOGO%%
2 |
3 | # What Is CrateDB?
4 |
5 | [CrateDB](http://github.com/crate/crate) is a distributed SQL database that makes it simple to store and analyze massive amounts of machine data in real-time.
6 |
7 | CrateDB offers the scalability and flexibility typically associated with a NoSQL database, is designed to run on inexpensive commodity servers and can be deployed and run on any sort of network - from personal computers to multi-region hybrid clouds.
8 |
9 | The smallest CrateDB clusters can easily ingest tens of thousands of records per second. The data can be queried, ad-hoc, in parallel across the whole cluster in real time.
10 |
11 | # Features
12 |
13 | - Standard SQL plus dynamic schemas, queryable objects, geospatial features, time series data, first-class BLOB support, and realtime full-text search.
14 | - Dynamic schemas, queryable objects, geospatial features, time series data support, and realtime full-text search providing functionality for handling both relational and document oriented nested data structures.
15 | - Horizontally scalable, highly available and fault tolerant clusters that run very well in virtualized and containerised environments.
16 | - Extremely fast distributed query execution.
17 | - Auto-partitioning, auto-sharding, and auto-replication.
18 | - Self-healing and auto-rebalancing.
19 |
20 | # Screenshots
21 |
22 | CrateDB provides an [Admin UI](https://crate.io/docs/crate/admin-ui/):
23 |
24 | 
25 |
26 | # Try CrateDB
27 |
28 | Spin up this Docker image like so:
29 |
30 | ```console
31 | $ docker run --publish 4200:4200 --publish 5432:5432 %%IMAGE%% -Cdiscovery.type=single-node
32 | ```
33 |
34 | Visit the [getting started](https://crate.io/docs/crate/tutorials/en/latest/install-run/) page to see all the available download and install options.
35 |
36 | Once you're up and running, head over to the [introductory docs](https://crate.io/docs/crate/tutorials/). To interact with CrateDB, you can use the Admin UI [web console](https://crate.io/docs/crate/admin-ui/en/latest/console.html#sql-console) or the [CrateDB shell](https://crate.io/docs/crate/crash/) CLI tool. Alternatively, review the list of recommended [clients and tools](https://crate.io/docs/crate/clients-tools/) that work with CrateDB.
37 |
38 | For container-specific documentation, check out the [CrateDB on Docker how-to guide](https://crate.io/docs/crate/howtos/en/latest/deployment/containers/docker.html) or the [CrateDB on Kubernetes how-to guide](https://crate.io/docs/crate/howtos/en/latest/deployment/containers/kubernetes.html).
39 |
40 | ## Issues
41 |
42 | ### Memory Accounting
43 |
44 | The combinations of Linux kernel version 3.x and Docker >= 1.12 could lead to a major problem with memory accounting causing the kernel to kill the CrateDB process in the container. This problems occurs because of a [slab shrinker issue](https://lwn.net/Articles/628829/) that is fixed in kernel versions >= 4.0.
45 |
46 | ### Others
47 |
48 | For issue specific to the CrateDB Docker image, report issues via [the `docker-crate` GitHub issue tracker](https://github.com/crate/docker-crate/issues)
49 |
50 | For issues with CrateDB itself, report issues via [the `crate` GitHub issue tracker](https://github.com/crate/crate/issues)
51 |
52 | ## Contributing
53 |
54 | This image is primarily maintained by [Crate.io](http://crate.io/), but we welcome community contributions!
55 |
56 | See the [contribution docs](https://github.com/crate/docker-crate/blob/master/CONTRIBUTING.rst) for more information.
57 |
```
--------------------------------------------------------------------------------
/ubuntu/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Ubuntu?
2 |
3 | Ubuntu is a Debian-based Linux operating system that runs from the desktop to the cloud, to all your internet connected things. It is the world's most popular operating system across public clouds and OpenStack clouds. It is the number one platform for containers; from Docker to Kubernetes to LXD, Ubuntu can run your containers at scale. Fast, secure and simple, Ubuntu powers millions of PCs worldwide.
4 |
5 | Development of Ubuntu is led by Canonical Ltd. Canonical generates revenue through the sale of technical support and other services related to Ubuntu. The Ubuntu project is publicly committed to the principles of open-source software development; people are encouraged to use free software, study how it works, improve upon it, and distribute it.
6 |
7 | > [wikipedia.org/wiki/Ubuntu](https://en.wikipedia.org/wiki/Ubuntu)
8 |
9 | %%LOGO%%
10 |
11 | # What's in this image?
12 |
13 | This image is built from official rootfs tarballs provided by Canonical (see `dist-*` tags at https://git.launchpad.net/cloud-images/+oci/ubuntu-base).
14 |
15 | The `%%IMAGE%%:latest` tag points to the "latest LTS", since that's the version recommended for general use. The `%%IMAGE%%:rolling` tag points to the latest release (regardless of LTS status).
16 |
17 | Along a similar vein, the `%%IMAGE%%:devel` tag is an alias for whichever release the "devel" suite on the mirrors currently points to, as determined by the following one-liner: `wget -qO- http://archive.ubuntu.com/ubuntu/dists/devel/Release | awk -F ': ' '$1 == "Codename" { print $2; exit }'`
18 |
19 | ## Locales
20 |
21 | Given that it is a minimal install of Ubuntu, this image only includes the `C`, `C.UTF-8`, and `POSIX` locales by default. For most uses requiring a UTF-8 locale, `C.UTF-8` is likely sufficient (`-e LANG=C.UTF-8` or `ENV LANG C.UTF-8`).
22 |
23 | For uses where that is not sufficient, other locales can be installed/generated via the `locales` package. [PostgreSQL has a good example of doing so](https://github.com/docker-library/postgres/blob/69bc540ecfffecce72d49fa7e4a46680350037f9/9.6/Dockerfile#L21-L24), copied below:
24 |
25 | ```dockerfile
26 | RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
27 | && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
28 | ENV LANG en_US.utf8
29 | ```
30 |
31 | ## Unminimize
32 |
33 | Starting from [Ubuntu 24.10 "Oracular Oriole"](https://discourse.ubuntu.com/t/oracular-oriole-release-notes/44878#unminimize), the `unminimize` command will no longer be shipped by default on minimal images. It has now been moved to a dedicated package which can be installed via `apt-get install -y unminimize`.
34 |
35 | # How is the rootfs built?
36 |
37 | The tarballs published by Canonical, referenced by `dist-*` tags in https://git.launchpad.net/cloud-images/+oci/ubuntu-base Git repository, are built from scripts that live in [the livecd-rootfs project](https://code.launchpad.net/~ubuntu-core-dev/livecd-rootfs/+git/livecd-rootfs/+ref/ubuntu/master), especially `live-build/auto/build`. The builds are run on Launchpad. For build history see `livefs` build pages of individual releases on Launchpad:
38 |
39 | - [Focal](https://launchpad.net/~cloud-images-release-managers/+livefs/ubuntu/focal/ubuntu-oci)
40 | - [Jammy](https://launchpad.net/~cloud-images-release-managers/+livefs/ubuntu/jammy/ubuntu-oci)
41 | - [Noble](https://launchpad.net/~cloud-images-release-managers/+livefs/ubuntu/noble/ubuntu-oci)
42 | - [Oracular](https://launchpad.net/~cloud-images-release-managers/+livefs/ubuntu/oracular/ubuntu-oci)
43 |
```
--------------------------------------------------------------------------------
/mediawiki/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is MediaWiki?
2 |
3 | MediaWiki is free and open-source wiki software. Originally developed by Magnus Manske and improved by Lee Daniel Crocker, it runs on many websites, including Wikipedia, Wiktionary and Wikimedia Commons. It is written in the PHP programming language and stores the contents into a database. Like WordPress, which is based on a similar licensing and architecture, it has become the dominant software in its category.
4 |
5 | > [wikipedia.org/wiki/MediaWiki](https://en.wikipedia.org/wiki/MediaWiki)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | The basic pattern for starting a `%%REPO%%` instance is:
12 |
13 | ```console
14 | $ docker run --name some-%%REPO%% -d %%IMAGE%%
15 | ```
16 |
17 | If you'd like to be able to access the instance from the host without the container's IP, standard port mappings can be used:
18 |
19 | ```console
20 | $ docker run --name some-%%REPO%% -p 8080:80 -d %%IMAGE%%
21 | ```
22 |
23 | Then, access it via `http://localhost:8080` or `http://host-ip:8080` in a browser.
24 |
25 | There are multiple database types supported by this image, most easily used via standard container linking. In the default configuration, SQLite can be used to avoid a second container and write to flat-files. More detailed instructions for different (more production-ready) database types follow.
26 |
27 | When first accessing the webserver provided by this image, it will go through a brief setup process. The details provided below are specifically for the "Set up database" step of that configuration process.
28 |
29 | ## MySQL
30 |
31 | ```console
32 | $ docker run --name some-%%REPO%% --link some-mysql:mysql -d %%IMAGE%%
33 | ```
34 |
35 | - Database type: `MySQL, MariaDB, or equivalent`
36 | - Database name/username/password: `<details for accessing your MySQL instance>` (`MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_DATABASE`; see environment variables in the description for [`mariadb`](https://hub.docker.com/_/mariadb/))
37 | - ADVANCED OPTIONS; Database host: `some-mysql` (for using the `/etc/hosts` entry added by `--link` to access the linked container's MySQL instance)
38 |
39 | ## Volumes
40 |
41 | By default, this image does not include any volumes.
42 |
43 | The paths `/var/www/html/images` and `/var/www/html/LocalSettings.php` are things that generally ought to be volumes, but do not explicitly have a `VOLUME` declaration in this image because volumes cannot be removed.
44 |
45 | ```console
46 | $ docker run --rm %%IMAGE%% tar -cC /var/www/html/sites . | tar -xC /path/on/host/sites
47 | ```
48 |
49 | ## %%COMPOSE%%
50 |
51 | Run `docker compose up`, wait for it to initialize completely, and visit `http://localhost:8080` or `http://host-ip:8080` (as appropriate).
52 |
53 | ## Adding additional libraries / extensions
54 |
55 | This image does not provide any additional PHP extensions or other libraries, even if they are required by popular plugins. There are an infinite number of possible plugins, and they potentially require any extension PHP supports. Including every PHP extension that exists would dramatically increase the image size.
56 |
57 | If you need additional PHP extensions, you'll need to create your own image `FROM` this one. The [documentation of the `php` image](https://github.com/docker-library/docs/blob/31280550a3c7104fef824450753844d2f3d917be/php/README.md#how-to-install-more-php-extensions) explains how to compile additional extensions.
58 |
59 | The following Docker Hub features can help with the task of keeping your dependent images up-to-date:
60 |
61 | - [Automated Builds](https://docs.docker.com/docker-hub/builds/) let Docker Hub automatically build your Dockerfile each time you push changes to it.
62 |
```
--------------------------------------------------------------------------------
/mongo-express/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is mongo-express?
2 |
3 | mongo-express is a web-based MongoDB admin interface written in Node.js, Express.js, and Bootstrap3.
4 |
5 | > [github.com/mongo-express/mongo-express](https://github.com/mongo-express/mongo-express)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | ```console
12 | $ docker run --network some-network -e ME_CONFIG_MONGODB_SERVER=some-mongo -p 8081:8081 %%IMAGE%%
13 | ```
14 |
15 | Then you can hit `http://localhost:8081` or `http://host-ip:8081` in your browser.
16 |
17 | ## Security Notice
18 |
19 | JSON documents are parsed through a javascript virtual machine, so the web interface can be used for executing malicious javascript on a server.
20 |
21 | **mongo-express should only be used privately for development purposes.**
22 |
23 | # Configuration
24 |
25 | Environment vairables are passed to the `run` command for configuring a mongo-express container.
26 |
27 | Name | Default | Description
28 | --------------------------------|-----------------|------------
29 | ME_CONFIG_BASICAUTH_USERNAME | '' | mongo-express web username
30 | ME_CONFIG_BASICAUTH_PASSWORD | '' | mongo-express web password
31 | ME_CONFIG_MONGODB_ENABLE_ADMIN | 'true' | Enable admin access to all databases. Send strings: `"true"` or `"false"`
32 | ME_CONFIG_MONGODB_ADMINUSERNAME | '' | MongoDB admin username
33 | ME_CONFIG_MONGODB_ADMINPASSWORD | '' | MongoDB admin password
34 | ME_CONFIG_MONGODB_PORT | 27017 | MongoDB port
35 | ME_CONFIG_MONGODB_SERVER | 'mongo' | MongoDB container name. Use comma delimited list of host names for replica sets.
36 | ME_CONFIG_OPTIONS_EDITORTHEME | 'default' | mongo-express editor color theme, [more here](http://codemirror.net/demo/theme.html)
37 | ME_CONFIG_REQUEST_SIZE | '100kb' | Maximum payload size. CRUD operations above this size will fail in [body-parser](https://www.npmjs.com/package/body-parser).
38 | ME_CONFIG_SITE_BASEURL | '/' | Set the baseUrl to ease mounting at a subdirectory. Remember to include a leading and trailing slash.
39 | ME_CONFIG_SITE_COOKIESECRET | 'cookiesecret' | String used by [cookie-parser middleware](https://www.npmjs.com/package/cookie-parser) to sign cookies.
40 | ME_CONFIG_SITE_SESSIONSECRET | 'sessionsecret' | String used to sign the session ID cookie by [express-session middleware](https://www.npmjs.com/package/express-session).
41 | ME_CONFIG_SITE_SSL_ENABLED | 'false' | Enable SSL.
42 | ME_CONFIG_SITE_SSL_CRT_PATH | '' | SSL certificate file.
43 | ME_CONFIG_SITE_SSL_KEY_PATH | '' | SSL key file.
44 |
45 | The following are only needed if `ME_CONFIG_MONGODB_ENABLE_ADMIN` is **"false"**
46 |
47 | Name | Default | Description
48 | --------------------------------|-----------------|------------
49 | ME_CONFIG_MONGODB_AUTH_DATABASE | 'db' | Database name
50 | ME_CONFIG_MONGODB_AUTH_USERNAME | 'admin' | Database username
51 | ME_CONFIG_MONGODB_AUTH_PASSWORD | 'pass' | Database password
52 |
53 | ## Example
54 |
55 | ```console
56 | $ docker run -it --rm \
57 | --network web_default \
58 | --name mongo-express \
59 | -p 8081:8081 \
60 | -e ME_CONFIG_OPTIONS_EDITORTHEME="ambiance" \
61 | -e ME_CONFIG_MONGODB_SERVER="web_db_1" \
62 | -e ME_CONFIG_BASICAUTH_USERNAME="user" \
63 | -e ME_CONFIG_BASICAUTH_PASSWORD="fairly long password" \
64 | %%IMAGE%%
65 | ```
66 |
67 | This example links to a container name typical of `docker compose`, changes the editor's color theme, and enables basic authentication.
68 |
```
--------------------------------------------------------------------------------
/adminer/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # Adminer
2 |
3 | ## What is Adminer?
4 |
5 | Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consist of a single file ready to deploy to the target server. Adminer is available for MySQL, PostgreSQL, SQLite, MS SQL, Oracle, Firebird, SimpleDB, Elasticsearch and MongoDB.
6 |
7 | > [adminer.org](https://www.adminer.org)
8 |
9 | %%LOGO%%
10 |
11 | ## How to use this image
12 |
13 | ### Standalone
14 |
15 | ```console
16 | $ docker run --link some_database:db -p 8080:8080 %%IMAGE%%
17 | ```
18 |
19 | Then you can hit `http://localhost:8080` or `http://host-ip:8080` in your browser.
20 |
21 | ### FastCGI
22 |
23 | If you are already running a FastCGI capable web server you might prefer running Adminer via FastCGI:
24 |
25 | ```console
26 | $ docker run --link some_database:db -p 9000:9000 %%IMAGE%%:fastcgi
27 | ```
28 |
29 | Then point your web server to port 9000 of the container.
30 |
31 | Note: This exposes the FastCGI socket to the Internet. Make sure to add proper firewall rules or use a private Docker network instead to prevent a direct access.
32 |
33 | ### %%COMPOSE%%
34 |
35 | Run `docker compose up`, wait for it to initialize completely, and visit `http://localhost:8080` or `http://host-ip:8080` (as appropriate).
36 |
37 | ### Loading plugins
38 |
39 | This image bundles all official Adminer plugins. You can find the list of plugins on GitHub: https://github.com/vrana/adminer/tree/master/plugins.
40 |
41 | To load plugins you can pass a list of filenames in `ADMINER_PLUGINS`:
42 |
43 | ```console
44 | $ docker run --link some_database:db -p 8080:8080 -e ADMINER_PLUGINS='tables-filter tinymce' %%IMAGE%%
45 | ```
46 |
47 | If a plugin *requires* parameters to work correctly instead of adding the plugin to `ADMINER_PLUGINS`, you need to add a custom file to the container:
48 |
49 | ```console
50 | $ docker run --link some_database:db -p 8080:8080 -e ADMINER_PLUGINS='login-servers' %%IMAGE%%
51 | Unable to load plugin file "login-servers", because it has required parameters: servers
52 | Create a file "/var/www/html/plugins-enabled/login-servers.php" with the following contents to load the plugin:
53 |
54 | <?php
55 | require_once('plugins/login-servers.php');
56 |
57 | /** Set supported servers
58 | * @param array array($domain) or array($domain => $description) or array($category => array())
59 | * @param string
60 | */
61 | return new AdminerLoginServers(
62 | $servers = ???,
63 | $driver = 'server'
64 | );
65 | ```
66 |
67 | To load a custom plugin you can add PHP scripts that return the instance of the plugin object to `/var/www/html/plugins-enabled/`.
68 |
69 | ### Choosing a design
70 |
71 | The image bundles all the designs that are available in the source package of adminer. You can find the list of designs on GitHub: https://github.com/vrana/adminer/tree/master/designs.
72 |
73 | To use a bundled design you can pass its name in `ADMINER_DESIGN`:
74 |
75 | ```console
76 | $ docker run --link some_database:db -p 8080:8080 -e ADMINER_DESIGN='nette' %%IMAGE%%
77 | ```
78 |
79 | To use a custom design you can add a file called `/var/www/html/adminer.css`.
80 |
81 | ### Usage with external server
82 |
83 | You can specify the default host with the `ADMINER_DEFAULT_SERVER` environment variable. This is useful if you are connecting to an external server or a docker container named something other than the default `db`.
84 |
85 | ```console
86 | docker run -p 8080:8080 -e ADMINER_DEFAULT_SERVER=mysql %%IMAGE%%
87 | ```
88 |
89 | ## Supported Drivers
90 |
91 | While Adminer supports a wide range of database drivers this image only supports the following out of the box:
92 |
93 | - MySQL
94 | - PostgreSQL
95 | - SQLite
96 | - SimpleDB
97 | - Elasticsearch
98 |
99 | To add support for the other drivers you will need to install the following PHP extensions on top of this image:
100 |
101 | - `pdo_dblib` (MS SQL)
102 | - `oci8` (Oracle)
103 | - `interbase` (Firebird)
104 | - `mongodb` (MongoDB)
105 |
```
--------------------------------------------------------------------------------
/geonetwork/compose.yaml:
--------------------------------------------------------------------------------
```yaml
1 | # GeoNetwork
2 | #
3 | # Access via "http://localhost:8080/geonetwork"
4 | #
5 | # Default user: admin
6 | # Default password: admin
7 |
8 | volumes:
9 | geonetwork:
10 | esdata:
11 | pgdata:
12 | pglog:
13 |
14 | services:
15 | geonetwork:
16 | image: geonetwork:4.4
17 | healthcheck:
18 | test: curl http://localhost:8080/
19 | interval: 5s
20 | timeout: 5s
21 | retries: 30
22 | restart: always
23 | volumes:
24 | - geonetwork:/catalogue-data
25 | depends_on:
26 | database:
27 | condition: service_healthy
28 | ports:
29 | - 8080:8080
30 | environment:
31 | WEBAPP_CONTEXT_PATH: /geonetwork
32 | DATA_DIR: /catalogue-data
33 | TZ: Europe/Amsterdam
34 |
35 | JAVA_OPTS: >-
36 | --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
37 | -Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true
38 | -Xms512M -Xss512M -Xmx2G -XX:+UseConcMarkSweepGC
39 | -Djetty.httpConfig.requestHeaderSize=32768
40 | -Dorg.eclipse.jetty.server.Request.maxFormContentSize=500000
41 | -Dorg.eclipse.jetty.server.Request.maxFormKeys=4000
42 | # For remote debug
43 | # -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
44 |
45 | GN_CONFIG_PROPERTIES: >-
46 | -Dgeonetwork.dir=/catalogue-data
47 | -Dgeonetwork.formatter.dir=/catalogue-data/data/formatter
48 | -Dgeonetwork.schema.dir=/opt/geonetwork/WEB-INF/data/config/schema_plugins
49 | -Dgeonetwork.indexConfig.dir=/opt/geonetwork/WEB-INF/data/config/index
50 | -Dgeonetwork.schemapublication.dir=/opt/geonetwork/WEB-INF/data/resources/schemapublication
51 | -Dgeonetwork.htmlcache.dir=/opt/geonetwork/WEB-INF/data/resources/htmlcache
52 | -Des.host=elasticsearch
53 | -Des.protocol=http
54 | -Des.port=9200
55 | -Des.url=http://elasticsearch:9200
56 | -Des.username=
57 | -Des.password=
58 | -Dgeonetwork.ESFeaturesProxy.targetUri=http://elasticsearch:9200/gn-features/{_}
59 | -Dgeonetwork.HttpDashboardProxy.targetUri=http://kibana:5601
60 |
61 | GEONETWORK_DB_TYPE: postgres-postgis
62 | GEONETWORK_DB_HOST: database
63 | GEONETWORK_DB_PORT: 5432
64 | GEONETWORK_DB_NAME: geonetwork
65 | GEONETWORK_DB_USERNAME: geonetwork
66 | GEONETWORK_DB_PASSWORD: geonetwork
67 |
68 | database:
69 | image: postgis/postgis:16-3.4
70 | environment:
71 | POSTGRES_USER: geonetwork
72 | POSTGRES_PASSWORD: geonetwork
73 | POSTGRES_DB: geonetwork
74 | command: [postgres, -c, log_statement=all, -c, logging_collector=true, -c, log_file_mode=0644,
75 | -c, log_directory=/var/log/postgresql, -c, log_filename=postgresql.log]
76 | healthcheck:
77 | test: [CMD-SHELL, pg_isready -U postgres]
78 | interval: 5s
79 | timeout: 5s
80 | retries: 5
81 | volumes:
82 | - pgdata:/var/lib/postgresql/data
83 | - pglog:/var/log/postgresql
84 |
85 | elasticsearch:
86 | image: elasticsearch:7.17.15
87 | ports:
88 | - 9200:9200
89 | ulimits:
90 | memlock:
91 | soft: -1
92 | hard: -1
93 | nofile:
94 | soft: 65536
95 | hard: 65536
96 | healthcheck:
97 | test: curl -s http://localhost:9200 >/dev/null || exit 1
98 | interval: 10s
99 | timeout: 2s
100 | retries: 10
101 | start_period: 2m
102 | environment:
103 | ES_JAVA_OPTS: -Xms1G -Xmx1G
104 | discovery.type: single-node
105 | volumes:
106 | - esdata:/usr/share/elasticsearch/data
107 |
108 | kibana:
109 | image: kibana:7.17.15
110 | environment:
111 | SERVER_NAME: kibana
112 | ELASTICSEARCH_URL: http://elasticsearch:9200/
113 | SERVER_BASEPATH: /geonetwork/dashboards
114 | SERVER_REWRITEBASEPATH: 'false'
115 | KIBANA_INDEX: .dashboards
116 | XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED: 'true'
117 | depends_on:
118 | elasticsearch:
119 | condition: service_healthy
120 |
```
--------------------------------------------------------------------------------
/traefik/content.md:
--------------------------------------------------------------------------------
```markdown
1 | %%LOGO%%
2 |
3 | [Traefik](https://traefik.io) is a modern HTTP reverse proxy and ingress controller that makes deploying microservices easy.
4 |
5 | Traefik integrates with your existing infrastructure components ([Kubernetes](https://kubernetes.io), [Docker](https://www.docker.com/), [Swarm](https://docs.docker.com/engine/swarm/), [Consul](https://www.consul.io/), [Nomad](https://www.nomadproject.io/), [etcd](https://coreos.com/etcd/), [Amazon ECS](https://aws.amazon.com/ecs), ...) and configures itself automatically and dynamically.
6 |
7 | Pointing Traefik at your orchestrator should be the *only* configuration step you need.
8 |
9 | ## Traefik v3 - Example usage
10 |
11 | Enable `docker` provider and dashboard UI:
12 |
13 | ```yml
14 | ## traefik.yml
15 |
16 | # Docker configuration backend
17 | providers:
18 | docker:
19 | defaultRule: "Host(`{{ trimPrefix `/` .Name }}.docker.localhost`)"
20 |
21 | # API and dashboard configuration
22 | api:
23 | insecure: true
24 | ```
25 |
26 | Start Traefik v3:
27 |
28 | ```sh
29 | docker run -d -p 8080:8080 -p 80:80 \
30 | -v $PWD/traefik.yml:/etc/traefik/traefik.yml \
31 | -v /var/run/docker.sock:/var/run/docker.sock \
32 | %%IMAGE%%:v3
33 | ```
34 |
35 | Start a backend server using the `traefik/whoami` image:
36 |
37 | ```sh
38 | docker run -d --name test traefik/whoami
39 | ```
40 |
41 | Access the whoami service through Traefik via the defined rule `test.docker.localhost`:
42 |
43 | ```console
44 | $ curl test.docker.localhost
45 | Hostname: 0693100b16de
46 | IP: 127.0.0.1
47 | IP: ::1
48 | IP: 192.168.215.4
49 | RemoteAddr: 192.168.215.3:57618
50 | GET / HTTP/1.1
51 | Host: test.docker.localhost
52 | User-Agent: curl/8.7.1
53 | Accept: */*
54 | Accept-Encoding: gzip
55 | X-Forwarded-For: 192.168.215.1
56 | X-Forwarded-Host: test.docker.localhost
57 | X-Forwarded-Port: 80
58 | X-Forwarded-Proto: http
59 | X-Forwarded-Server: 8a37fd4f35fb
60 | X-Real-Ip: 192.168.215.1
61 | ```
62 |
63 | Access the Traefik Dashboard:
64 |
65 | Open your web browser and navigate to `http://localhost:8080` to access the Traefik dashboard. This will provide an overview of routers, services, and middlewares.
66 |
67 | 
68 |
69 | ## Traefik v2 - Example usage
70 |
71 | Enable `docker` provider and dashboard UI:
72 |
73 | ```yml
74 | ## traefik.yml
75 |
76 | # Docker configuration backend
77 | providers:
78 | docker:
79 | defaultRule: "Host(`{{ trimPrefix `/` .Name }}.docker.localhost`)"
80 |
81 | # API and dashboard configuration
82 | api:
83 | insecure: true
84 | ```
85 |
86 | Start Traefik v2:
87 |
88 | ```sh
89 | docker run -d -p 8080:8080 -p 80:80 \
90 | -v $PWD/traefik.yml:/etc/traefik/traefik.yml \
91 | -v /var/run/docker.sock:/var/run/docker.sock \
92 | %%IMAGE%%:v2.11
93 | ```
94 |
95 | Start a backend server using the `traefik/whoami` image:
96 |
97 | ```sh
98 | docker run -d --name test traefik/whoami
99 | ```
100 |
101 | Access the whoami service through Traefik via the defined rule `test.docker.localhost`:
102 |
103 | ```console
104 | $ curl test.docker.localhost
105 | Hostname: 390a880bdfab
106 | IP: 127.0.0.1
107 | IP: 172.17.0.3
108 | GET / HTTP/1.1
109 | Host: test.docker.localhost
110 | User-Agent: curl/7.65.3
111 | Accept: */*
112 | Accept-Encoding: gzip
113 | X-Forwarded-For: 172.17.0.1
114 | X-Forwarded-Host: test.docker.localhost
115 | X-Forwarded-Port: 80
116 | X-Forwarded-Proto: http
117 | X-Forwarded-Server: 7e073cb54211
118 | X-Real-Ip: 172.17.0.1
119 | ```
120 |
121 | Access the Traefik Dashboard:
122 |
123 | Open your web browser and navigate to `http://localhost:8080` to access the Traefik dashboard. This will provide an overview of routers, services, and middlewares.
124 |
125 | 
126 |
127 | ## Documentation
128 |
129 | You can find the complete documentation:
130 |
131 | - for [v3.x](https://doc.traefik.io/traefik/)
132 | - for [v2.11](https://doc.traefik.io/traefik/v2.11)
133 |
134 | A community support is available at [https://community.traefik.io](https://community.traefik.io)
135 |
```
--------------------------------------------------------------------------------
/amazonlinux/content.md:
--------------------------------------------------------------------------------
```markdown
1 | ## What is Amazon Linux?
2 |
3 | Amazon Linux is provided by Amazon Web Services (AWS). It is designed to provide a stable, secure, and high-performance execution environment for applications running on Amazon EC2. The full distribution includes packages that enable easy integration with AWS, including launch configuration tools and many popular AWS libraries and tools. AWS provides ongoing security and maintenance updates to all instances running Amazon Linux.
4 |
5 | The Amazon Linux container image contains a minimal set of packages. To install additional packages, [use `yum`](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-software.html).
6 |
7 | AWS provides three versions of Amazon Linux:
8 |
9 | - [Amazon Linux 2023](https://aws.amazon.com/linux/amazon-linux-2023/) (recommended, latest)
10 | - [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/)
11 | - [Amazon Linux AMI](https://aws.amazon.com/amazon-linux-ami/)
12 |
13 | For information on security updates for Amazon Linux, please refer to:
14 |
15 | - [Amazon Linux 2023 Security Advisories](https://alas.aws.amazon.com/alas2023.html)
16 | - [Amazon Linux 2 Security Advisories](https://alas.aws.amazon.com/alas2.html)
17 | - [Amazon Linux AMI Security Advisories](https://alas.aws.amazon.com/)
18 |
19 | Note that Docker Hub's vulnerability scanning for Amazon Linux is currently based on RPM versions, which does not reflect the state of backported patches for vulnerabilities.
20 |
21 | %%LOGO%%
22 |
23 | ## What is Amazon Linux 2023?
24 |
25 | - Amazon Linux 2023: https://aws.amazon.com/linux/amazon-linux-2023/
26 | - 2023 Release Notes: https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html
27 | - FAQs: https://aws.amazon.com/linux/amazon-linux-2023/faqs/
28 | - What's New: https://aws.amazon.com/about-aws/whats-new/2023/03/amazon-linux-2023/
29 | - User Guide: https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html
30 |
31 | ## Where can I run Amazon Linux container images?
32 |
33 | You can run Amazon Linux container images in any Docker based environment. Examples include, your laptop, in AWS EC2 instances, and ECS clusters.
34 |
35 | ## What packages are available in the Amazon Linux containers?
36 |
37 | Amazon Linux Docker container images contain a subset of the packages in the images for use on EC2 and as VMs in on-premises scenarios. The container images can be configured to use any of the full set of packages in images for EC2 and on-premises use.
38 |
39 | ## Will updates be available for Amazon Linux containers?
40 |
41 | Similar to the Amazon Linux images for AWS EC2 and on-premises use, Amazon Linux container images will get ongoing updates from Amazon in the form of security updates, bug fix updates, and other enhancements. Security bulletins for Amazon Linux are available at https://alas.aws.amazon.com/
42 |
43 | ## What support is available for Amazon Linux outside AWS?
44 |
45 | - GitHub Issues: https://github.com/amazonlinux/container-images/issues
46 | - Documentation: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/amazon-linux-ami-basics.html
47 | - Amazon Linux Forums: https://forums.aws.amazon.com/forum.jspa?forumID=228
48 | - Paid Support from AWS: https://aws.amazon.com/premiumsupport/
49 |
50 | ## Will AWS support the current versions of Amazon Linux going forward?
51 |
52 | Yes; in order to avoid any disruption to your existing applications and to facilitate migration to Amazon Linux 2023, AWS will provide regular security updates for Amazon Linux 2 and Amazon Linux 2018.03. Please refer to their FAQs for more information. You can also use all your existing support channels such as AWS Premium Support and Amazon Linux Discussion Forum to continue to submit support requests.
53 |
54 | ## FAQs
55 |
56 | ### Amazon Linux 2023
57 |
58 | - FAQs: https://aws.amazon.com/linux/amazon-linux-2023/faqs/
59 |
60 | ### Amazon Linux 2
61 |
62 | - FAQs: https://aws.amazon.com/amazon-linux-2/faqs/
63 |
64 | ### Amazon Linux 1
65 |
66 | - FAQs: https://aws.amazon.com/amazon-linux-ami/faqs/
67 |
```
--------------------------------------------------------------------------------
/storm/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Apache Storm?
2 |
3 | Apache Storm is a free and open source distributed realtime computation system. Apache Storm makes it easy to reliably process unbounded streams of data, doing for realtime processing what Hadoop did for batch processing. Apache Storm is simple, can be used with any programming language, and is a lot of fun to use!
4 |
5 | Apache Storm has many use cases: realtime analytics, online machine learning, continuous computation, distributed RPC, ETL, and more. Apache Storm is fast: a benchmark clocked it at over a million tuples processed per second per node. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.
6 |
7 | Apache Storm integrates with the queueing and database technologies you already use. An Apache Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed.
8 |
9 | > [wikipedia.org/wiki/Storm_(event_processor)](https://en.wikipedia.org/wiki/Storm_(event_processor))
10 |
11 | %%LOGO%%
12 |
13 | # How to use this image
14 |
15 | ## Running topologies in local mode
16 |
17 | Assuming you have `topology.jar` in the current directory.
18 |
19 | ```console
20 | $ docker run -it -v $(pwd)/topology.jar:/topology.jar %%IMAGE%% storm jar /topology.jar org.apache.storm.starter.ExclamationTopology
21 | ```
22 |
23 | ## Setting up a minimal Storm cluster
24 |
25 | 1. [Apache Zookeeper](https://zookeeper.apache.org/) is a must for running a Storm cluster. Start it first. Since the Zookeeper "fails fast" it's better to always restart it.
26 |
27 | ```console
28 | $ docker run -d --restart always --name some-zookeeper zookeeper
29 | ```
30 |
31 | 2. The Nimbus daemon has to be connected with the Zookeeper. It's also a "fail fast" system.
32 |
33 | ```console
34 | $ docker run -d --restart always --name some-nimbus --link some-zookeeper:zookeeper %%IMAGE%% storm nimbus
35 | ```
36 |
37 | 3. Finally start a single Supervisor node. It will talk to the Nimbus and Zookeeper.
38 |
39 | ```console
40 | $ docker run -d --restart always --name supervisor --link some-zookeeper:zookeeper --link some-nimbus:nimbus %%IMAGE%% storm supervisor
41 | ```
42 |
43 | 4. Now you can submit a topology to our cluster.
44 |
45 | ```console
46 | $ docker run --link some-nimbus:nimbus -it --rm -v $(pwd)/topology.jar:/topology.jar %%IMAGE%% storm jar /topology.jar org.apache.storm.starter.WordCountTopology topology
47 | ```
48 |
49 | 5. Optionally, you can start the Storm UI.
50 |
51 | ```console
52 | $ docker run -d -p 8080:8080 --restart always --name ui --link some-nimbus:nimbus %%IMAGE%% storm ui
53 | ```
54 |
55 | ## %%COMPOSE%%
56 |
57 | Run `docker compose up` and wait for it to initialize completely. The Nimbus will be available at `http://localhost:6627` or `http://host-ip:6627` (as appropriate).
58 |
59 | ## Configuration
60 |
61 | This image uses [default configuration](https://github.com/apache/storm/blob/v2.0.0/conf/defaults.yaml) of the Apache Storm. There are two main ways to change it.
62 |
63 | 1. Using command line arguments.
64 |
65 | ```console
66 | $ docker run -d --restart always --name nimbus %%IMAGE%% storm nimbus -c storm.zookeeper.servers='["zookeeper"]'
67 | ```
68 |
69 | 2. Assuming you have `storm.yaml` in the current directory you can mount it as a volume.
70 |
71 | ```console
72 | $ docker run -it -v $(pwd)/storm.yaml:/conf/storm.yaml %%IMAGE%% storm nimbus
73 | ```
74 |
75 | ## Logging
76 |
77 | This image uses [default logging configuration](https://github.com/apache/storm/tree/v2.0.0/log4j2). All logs go to the `/logs` directory by default.
78 |
79 | ## Data persistence
80 |
81 | No data are persisted by default. For convenience there are `/data` and `/logs` directories in the image owned by `storm` user. Use them accordingly to persist data and logs using volumes.
82 |
83 | ```console
84 | $ docker run -it -v /logs -v /data %%IMAGE%% storm nimbus
85 | ```
86 |
87 | *Please be noticed that using paths other than those predefined is likely to cause permission denied errors. It's because for [security reasons](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#user) the Storm is running under the non-root `storm` user.*
88 |
```
--------------------------------------------------------------------------------
/amazoncorretto/content.md:
--------------------------------------------------------------------------------
```markdown
1 | ### What is Amazon Corretto?
2 |
3 | Corretto is a binary distribution of the Open Java Development Kit (OpenJDK) with long-term support from Amazon. Corretto is certified using the Java Technical Compatibility Kit (TCK) to ensure it meets the Java SE standard and is available on Linux, Windows, and macOS. It includes [patches from Amazon](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/patches.html) that have proven useful in running our own services.
4 |
5 | %%LOGO%%
6 |
7 | ### Why should I use Corretto?
8 |
9 | Corretto is a reliable binary distribution of OpenJDK with the assurance of long-term support provided at no cost to you. Amazon runs Corretto internally on thousands of production services. Every modification we make to Corretto fixes or mitigates a problem we found running OpenJDK. Amazon also plans to apply urgent fixes (including security) when they are available and ready to use, outside of the regular quarterly cycle.
10 |
11 | ### How is Corretto different from OpenJDK?
12 |
13 | Corretto is a distribution of Open JDK with patches included by Amazon that are not yet integrated in the corresponding OpenJDK update projects. We focus on patches that improve performance or stability in OpenJDK, chosen based on Amazon's observations running large services.
14 |
15 | ### What kinds of patches does Amazon intend to include in Corretto?
16 |
17 | Patches will include security fixes, performance enhancements (e.g., speeding up frequently used functions), garbage collection scheduling, and preventing out-of-memory situations, as well as improved monitoring, reporting, and thread management.
18 |
19 | ### Is there any cost associated with using Corretto?
20 |
21 | Corretto is distributed by Amazon under an Open Source license at no cost to you. It is licensed under the terms of the GNU Public License version 2 with the Class Path Exception (GPLv2 with CPE). Amazon does not charge for its use or distribution.
22 |
23 | ### What is included in Corretto's long-term support?
24 |
25 | Amazon will provide security updates for Corretto 8 until at least June 2023. Updates are planned to be released quarterly. Corretto 11, corresponding to OpenJDK 11, will be available during the first half of 2019. Amazon will support Corretto 11 with quarterly updates until at least August 2024.
26 |
27 | ### Can I use Corretto as a drop-in replacement for other JDKs?
28 |
29 | Corretto is designed as a drop-in replacement for all Java SE distributions unless you are using features (e.g., Java Flight Recorder) not available in OpenJDK. Once Corretto binaries are installed on a host and correctly invoked to run your Java applications (e.g., using the alternatives command on Linux), existing command-line options, tuning parameters, monitoring, and anything else in place will continue to work as before.
30 |
31 | ### Why does security scanner show that a docker image has a CVE?
32 |
33 | If a security scanner reports that an amazoncorretto image includes a CVE, the first recommended action is to pull an updated version of this image.
34 |
35 | If no updated image is available, run the appropriate command to update packages for the platform, ie. run "apk -U upgrade" for Alpine or "yum update -y --security" for AmazonLinux in your Dockerfiles or systems to resolve the issue immediately.
36 |
37 | If no updated package is available, please treat this as a potential security issue and follow [these instructions](https://aws.amazon.com/security/vulnerability-reporting/) or email AWS security directly at [[email protected]](mailto:[email protected]).
38 |
39 | It is the responsibility of the base docker image supplier to provide timely security updates to images and packages. The amazoncorretto images are automatically rebuilt when a new base image is made available, but we do not make changes to our Dockerfiles to pull in one-off package updates. If a new base image has not yet been made generally available by a base docker image maintainer, please contact that maintainer to request that the issue be addressed.
40 |
41 | Note that there are multiple reasons why a CVE may appear to be present in a docker image, as explained in the [docker library FAQs](https://github.com/docker-library/faq/tree/73f10b0daf2fb8e7b38efaccc0e90b3510919d51#why-does-my-security-scanner-show-that-an-image-has-cves).
42 |
```
--------------------------------------------------------------------------------
/tomee/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is TomEE?
2 |
3 | [Apache TomEE](http://tomee.apache.org/), pronounced "Tommy", is an all-Apache Java EE Web Profile certified stack where Apache Tomcat is top dog. Apache TomEE is assembled from a vanilla Apache Tomcat zip file. We start with Apache Tomcat, add our jars and zip up the rest. The result is Tomcat with added EE features - TomEE.
4 |
5 | %%LOGO%%
6 |
7 | Apache TomEE comes with four different flavors, Web Profile, JAX-RS, Plus and Plume.
8 |
9 | - Apache TomEE Web Profile delivers Servlets, JSP, JSF, JTA, JPA, CDI, Bean Validation and EJB Lite.
10 | - Apache TomEE JAX-RS (RESTfull Services) delivers the Web Profile plus JAX-RS (RESTfull Services).
11 | - Apache TomEE Plus delivers all that is in the Web Profile and JAX-RS (RESTfull Services), plus EJB Full, Java EE Connector Architecture, JMS (Java Message Service) and JAX-WS (Web Services).
12 | - Apache TomEE Plume delivers all that is in the Plus Profile, but includes Mojarra and EclipseLink support.
13 |
14 | All Dockerfile files of supported versions can be found at https://github.com/tomitribe/docker-tomee
15 |
16 | # Apache TomEE and Tomitribe
17 |
18 | Tomitribe provides commercial support, professional services and training for Apache TomEE. We offers a new business model that furthers the development and growth of the Open Source project all the while fulfilling business requirement for production support. The Tomitribe Community Partnership Program connects businesses with the community.
19 |
20 | All of Tomitribe developers are committers of TomEE and are influencers of the project's direction and development. We want to extend this influence to the people and companies that matter, users of TomEE. How? The Tomitribe Community Partnership Program.
21 |
22 | Below are some press releases that might be helpful:
23 |
24 | - Tomitribe Announces [Enterprise Service Support for Apache TomEE](http://www.tomitribe.com/company/press/tomitribe_enterprise_service_support_for_apache_tomee_javaone_2013/)
25 | - Tomitribe Introduces [Community Partnership Program Conference](http://www.tomitribe.com/company/press/tomitribe-introduces-community-partnership-program-and-presents-java-ee-sessions-at-javaone-2014-conference/)
26 |
27 | # Apache TomEE and ManageCat
28 |
29 | Another commercial support company provides enterprise support for Apache TomEE is ManageCat. ManageCat involves with a lot of Apache Java EE projects to contribute open source Java EE ecosystem. ManageCat co-founder is also a founder of open source Apache OpenWebBeans project (http://openwebbans.apache.org) which is heavily used in Apache TomEE application server for CDI integration.
30 |
31 | ManageCat is a cloud management and service platform for Apache Tomcat and Apache TomEE servers. Involving with a lot of Apache Java EE projects, we want to transfer not only our knowledge about Apache TomEE and also other Java EE technologies including JPA, EJB, CDI, JSF, JSTL, JTA, JMS. We will help our customers to develop and deploy their production based Java EE applications smoothly.
32 |
33 | - ManageCat Announces [Enterprise Service Support for Apache Tomcat and TomEE](http://managecat.com/index.php/enterprise-tomcat-support)
34 |
35 | # How to use this image.
36 |
37 | Run the default TomEE server (`CMD ["catalina.sh", "run"]`):
38 |
39 | ```console
40 | $ docker run -it --rm %%IMAGE%%:<java-version>\-<tomeeversion>\-<flavour>
41 | ```
42 |
43 | For example running Apache TomEE 1.7.2 with JRE 8 and Webprofile flavour will be:
44 |
45 | ```console
46 | $ docker run -it --rm %%IMAGE%%:8-jre-1.7.2-webprofile
47 | ```
48 |
49 | You can test it by visiting `http://container-ip:8080` in a browser or, if you need access outside the host, on port 8888:
50 |
51 | ```console
52 | $ docker run -it --rm -p 8888:8080 %%IMAGE%%:<java-version>\-<tomeeversion>\-<flavour>
53 | ```
54 |
55 | You can then go to `http://localhost:8888` or `http://host-ip:8888` in a browser.
56 |
57 | The configuration files are available in `/usr/local/tomee/conf/`. By default, no user is included in the "manager-gui" role required to operate the "/manager/html" web application. If you wish to use this app, you must define such a user in `tomcat-users.xml`.
58 |
59 | You can also use this image as base image for deploying your war application. To do it you need to create a Dockerfile based on Tomee Docker image and add the war file in `webapps` directory:
60 |
61 | ```dockerfile
62 | COPY <locationofapplication>/<warfile> /usr/local/tomee/webapps/<warfile>
63 | ```
64 |
```
--------------------------------------------------------------------------------
/.template-helpers/variant.sh:
--------------------------------------------------------------------------------
```bash
1 | #!/bin/bash
2 | set -eo pipefail
3 |
4 | repo="$1"
5 | if [ -z "$repo" ]; then
6 | echo >&2 "usage: $0 repo"
7 | echo >&2 " ie: $0 hylang"
8 | exit 1
9 | fi
10 |
11 | dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
12 | repoDir="$dir/../$repo"
13 |
14 | # prints "$2$1$3$1...$N"
15 | join() {
16 | local sep="$1"; shift
17 | local out; printf -v out "${sep//%/%%}%s" "$@"
18 | echo "${out#$sep}"
19 | }
20 |
21 | commaJoin() {
22 | local items=( $(xargs -n1 <<<"$1" | sort -u) ); shift
23 |
24 | local sep=', '
25 | case "${#items[@]}" in
26 | 0)
27 | return
28 | ;;
29 | 1)
30 | echo "$items"
31 | return
32 | ;;
33 | 2)
34 | sep=' '
35 | ;;
36 | esac
37 |
38 | items[-1]="or ${items[-1]}"
39 | join "$sep" "${items[@]}"
40 | }
41 |
42 | tagFiles() {
43 | local tag="$1"; shift
44 | local tagUltimate="${tag##*-}" # 3.6-stretch -> stretch
45 | local tagPenultimate="${tag%-*}" # 2.7.15-windowsservercore-1803 -> 2.7.15-windowsservercore
46 | tagPenultimate="${tagPenultimate##*-}" # 2.7.15-windowsservercore -> windowsservercore
47 |
48 | echo \
49 | "$repoDir/variant-$tag.md" \
50 | "$repoDir/variant-$tagUltimate.md" \
51 | "$repoDir/variant-$tagPenultimate.md" \
52 | "$dir/variant-$tag.md" \
53 | "$dir/variant-$tagUltimate.md" \
54 | "$dir/variant-$tagPenultimate.md"
55 | }
56 |
57 | _repo() {
58 | local repo=$1; shift
59 | # if we haven't set BASHBREW_LIBRARY explicitly (like Jenkins does, for example), don't trust the local library
60 | if [ -z "${BASHBREW_LIBRARY:-}" ]; then
61 | repo="https://github.com/docker-library/official-images/raw/master/library/$repo"
62 | fi
63 |
64 | echo "$repo"
65 | }
66 |
67 | bbRepo="$(_repo "$repo")"
68 | IFS=$'\n'
69 | tags=( $(bashbrew cat -f '
70 | {{- $archSpecific := getenv "ARCH_SPECIFIC_DOCS" -}}
71 |
72 | {{- range ($archSpecific | ternary (archFilter arch .Entries) .Entries) -}}
73 | {{- join "\n" .Tags -}}
74 | {{- "\n" -}}
75 | {{- end -}}
76 | ' "$bbRepo") )
77 | unset IFS
78 |
79 | text=
80 | declare -A includedFiles=()
81 | for tag in "${tags[@]}"; do
82 | for f in $(tagFiles "$tag"); do
83 | if [ -n "${includedFiles[$f]}" ]; then
84 | # make sure we don't duplicate variant sections
85 | break
86 | fi
87 | if [ -f "$f" ]; then
88 | includedFiles[$f]=1
89 | if [ -s "$f" ]; then
90 | # an empty file can be used to disable a specific "variant" section for an image
91 | text+=$'\n' # give a little space
92 | text+="$(< "$f")"
93 | text+=$'\n' # parameter expansion eats the trailing newline
94 | fi
95 | break
96 | fi
97 | done
98 | done
99 |
100 | if [ -n "$text" ]; then
101 | default="$([ -f "$repoDir/variant.md" ] && cat "$repoDir/variant.md" || cat "$dir/variant.md")"
102 | default+=$'\n' # parameter expansion eats the trailing newline
103 |
104 | if [ "$repo" != 'debian' ] && [ "$repo" != 'ubuntu' ]; then
105 | # what is 'bullseye', 'buster' and 'sid'
106 | # https://github.com/docker-library/python/issues/343
107 | debian=( $(bashbrew list --uniq "$(_repo 'debian')" | grep -vE 'stable|slim|backports|experimental|testing' | cut -d: -f2) )
108 | ubuntu=( $(bashbrew list "$(_repo 'ubuntu')" | grep -vE 'devel|latest|[0-9]' | cut -d: -f2) )
109 | foundDebianTags=
110 | foundUbuntuTags=
111 | for tag in ${tags[@]}; do
112 | for suite in "${debian[@]}"; do
113 | case "$tag" in
114 | *-"$suite" | "$suite"-* | *-"$suite"-* | "$suite" )
115 | foundDebianTags+=" $suite"
116 | ;;
117 | esac
118 | done
119 | for suite in "${ubuntu[@]}"; do
120 | case "$tag" in
121 | *-"$suite" | "$suite"-* | *-"$suite"-* | "$suite" )
122 | foundUbuntuTags+=" $suite"
123 | ;;
124 | esac
125 | done
126 | done
127 |
128 | if [ -n "$foundDebianTags" ]; then
129 | default+=$'\n' # give a little space
130 | default+="$( sed -e 's/%%DEB-SUITES%%/'"$(commaJoin "$foundDebianTags")"'/' "$dir/variant-default-debian.md" )"
131 | default+=$'\n' # parameter expansion eats the trailing newline
132 | fi
133 | if [ -n "$foundUbuntuTags" ]; then
134 | default+=$'\n' # give a little space
135 | default+="$( sed -e 's/%%DEB-SUITES%%/'"$(commaJoin "$foundUbuntuTags")"'/' "$dir/variant-default-ubuntu.md" )"
136 | default+=$'\n' # parameter expansion eats the trailing newline
137 | fi
138 | fi
139 |
140 | # buildpack-deps text
141 | potentialTags="$(bashbrew list --uniq "$bbRepo" | cut -d: -f2)"
142 | for tag in $potentialTags; do
143 | baseImage="$(bashbrew cat -f '{{ .ArchLastStageFrom (.TagEntry.Architectures | first) .TagEntry }}' "$bbRepo:$tag" 2>/dev/null)"
144 | case "$baseImage" in
145 | buildpack-deps:*-*) ;; # "scm", "curl" -- not large images
146 | buildpack-deps:*)
147 | default+=$'\n' # give a little space
148 | default+="$(< "$dir/variant-default-buildpack-deps.md")"
149 | default+=$'\n' # parameter expansion eats the trailing newline
150 | break
151 | ;;
152 | esac
153 | done
154 |
155 | echo
156 | echo
157 |
158 | echo -n "$default"
159 | echo "$text"
160 | fi
161 |
```
--------------------------------------------------------------------------------
/kapacitor/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # Kapacitor
2 |
3 | Kapacitor is an open source data processing engine written in Go. It can process both stream and batch data.
4 |
5 | [Kapacitor Official Documentation](https://docs.influxdata.com/kapacitor/latest/introduction/getting_started/)
6 |
7 | %%LOGO%%
8 |
9 | ## Using this image
10 |
11 | ### Using the default configuration
12 |
13 | Start the Kapacitor container with default options:
14 |
15 | ```console
16 | $ docker run -p 9092:9092 %%IMAGE%%
17 | ```
18 |
19 | Start the Kapacitor container sharing the data directory with the host:
20 |
21 | ```console
22 | $ docker run -p 9092:9092 \
23 | -v $PWD:/var/lib/kapacitor \
24 | %%IMAGE%%
25 | ```
26 |
27 | Modify `$PWD` to the directory where you want to store data associated with the Kapacitor container.
28 |
29 | You can also have Docker control the volume mountpoint by using a named volume.
30 |
31 | ```console
32 | $ docker run -p 9092:9092 \
33 | -v kapacitor:/var/lib/kapacitor \
34 | %%IMAGE%%
35 | ```
36 |
37 | ### Configuration
38 |
39 | Kapacitor can be either configured from a config file or using environment variables. To mount a configuration file and use it with the server, you can use this command:
40 |
41 | Generate the default configuration file:
42 |
43 | ```console
44 | $ docker run --rm %%IMAGE%% kapacitord config > kapacitor.conf
45 | ```
46 |
47 | Modify the default configuration, which will now be available under `$PWD`. Then start the Kapacitor container.
48 |
49 | ```console
50 | $ docker run -p 9092:9092 \
51 | -v $PWD/kapacitor.conf:/etc/kapacitor/kapacitor.conf:ro \
52 | %%IMAGE%%
53 | ```
54 |
55 | Modify `$PWD` to the directory where you want to store the configuration file.
56 |
57 | For environment variables, the format is `KAPACITOR_$SECTION_$NAME`. All dashes (`-`) are replaced with underscores (`_`). If the variable isn't in a section, then omit that part. If the config section is an array, use a number to set the nth value in the configuration file.
58 |
59 | Examples:
60 |
61 | ```console
62 | KAPACITOR_HOSTNAME=kapacitor
63 | KAPACITOR_LOGGING_LEVEL=INFO
64 | KAPACITOR_REPORTING_ENABLED=false
65 | KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086
66 | ```
67 |
68 | Find more about configuring Kapacitor [here](https://docs.influxdata.com/kapacitor/latest/introduction/installation/)
69 |
70 | #### Running as root
71 |
72 | Starting in v1.7.4, Kapacitor no longer run as the root user by default. If a user wants to revert this change they can set `KAPACITOR_AS_ROOT=true` as an environment variable.
73 |
74 | ### Exposed Ports
75 |
76 | - 9092 TCP -- HTTP API endpoint
77 |
78 | #### Subscriptions
79 |
80 | Subscriptions allow InfluxDB to push data to Kapacitor for faster alerting instead of requiring Kapacitor to pull data from InfluxDB.
81 |
82 | These examples assume you are using a custom configuration file that takes advantage of Docker's built-in service discovery capability. In order to do so, we'll first create a new network:
83 |
84 | ```console
85 | $ docker network create influxdb
86 | ```
87 |
88 | Next, we'll start our InfluxDB container named `influxdb`:
89 |
90 | ```console
91 | $ docker run -d --name=influxdb \
92 | --net=influxdb \
93 | influxdb
94 | ```
95 |
96 | Start the Kapacitor container with the container hostname matching the container name so Kapacitor can automatically create subscriptions correctly and with the `KAPACITOR_INFLUXDB_0_URLS_0` value set to point at InfluxDB.
97 |
98 | ```console
99 | $ docker run -p 9092:9092 \
100 | --name=kapacitor \
101 | -h kapacitor \
102 | --net=influxdb \
103 | -e KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086 \
104 | %%IMAGE%%
105 | ```
106 |
107 | You can also start Kapacitor sharing the same network interface of the InfluxDB container. If you do this, Docker will act as if both processes were being run on the same machine.
108 |
109 | ```console
110 | $ docker run -p 9092:9092 \
111 | --name=kapacitor \
112 | --net=container:influxdb \
113 | %%IMAGE%%
114 | ```
115 |
116 | When run like this, InfluxDB can be communicated with over `localhost`.
117 |
118 | ### CLI / SHELL
119 |
120 | Start the container:
121 |
122 | ```console
123 | $ docker run --name=kapacitor -d -p 9092:9092 %%IMAGE%%
124 | ```
125 |
126 | Run another container linked to the `kapacitor` container for using the client. Set the env `KAPACITOR_URL` so the client knows how to connect to Kapacitor. Mount in your current directory for accessing TICKscript files.
127 |
128 | ```console
129 | $ docker run --rm --net=container:kapacitor \
130 | -v $PWD:/root -w=/root -it \
131 | %%IMAGE%% bash -l
132 | ```
133 |
134 | Then, from within the container, you can use the `kapacitor` command to interact with the daemon.
135 |
136 | See [this](https://docs.influxdata.com/kapacitor/latest/introduction/getting_started/) for a more detailed getting started guide with Kapacitor.
137 |
```
--------------------------------------------------------------------------------
/joomla/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Joomla?
2 |
3 | Joomla is a free and open-source content management system (CMS) for publishing web content. It is built on a model–view–controller web application framework that can be used independently of the CMS. Joomla is written in PHP, uses object-oriented programming (OOP) techniques and software design patterns, stores data in a MySQL, MS SQL, or PostgreSQL database, and includes features such as page caching, RSS feeds, printable versions of pages, news flashes, blogs, search, and support for language internationalization.
4 |
5 | > [wikipedia.org/wiki/Joomla](https://en.wikipedia.org/wiki/Joomla)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | ```console
12 | $ docker run --name some-%%REPO%% --network some-network -d %%IMAGE%%
13 | ```
14 |
15 | The following environment variables are honored for configuring your Joomla instance:
16 |
17 | - `-e JOOMLA_DB_HOST=...` (defaults to the IP and port of the linked `mysql` container)
18 | - `-e JOOMLA_DB_USER=...` (defaults to "root")
19 | - `-e JOOMLA_DB_PASSWORD=...` (defaults to the value of the `MYSQL_ROOT_PASSWORD` environment variable from the linked `mysql` container)
20 | - `-e JOOMLA_DB_PASSWORD_FILE=...` (path to a file containing the database password)
21 | - `-e JOOMLA_DB_NAME=...` (defaults to "joomla")
22 | - `-e JOOMLA_DB_TYPE=...` (defaults to "mysqli" options: mysqli, pgsql)
23 |
24 | If the `JOOMLA_DB_NAME` specified does not already exist on the given MySQL server, it will be created automatically upon startup of the `%%REPO%%` container, provided that the `JOOMLA_DB_USER` specified has the necessary permissions to create it.
25 |
26 | The following environment variables are also honored for configuring auto deployment (skip the browser setup) for your Joomla instance:
27 |
28 | - `-e JOOMLA_SITE_NAME=...` (name of the Joomla site)
29 | - `-e JOOMLA_ADMIN_USER=...` (full name of the Joomla administrator)
30 | - `-e JOOMLA_ADMIN_USERNAME=...` (username of the Joomla administrator)
31 | - `-e JOOMLA_ADMIN_PASSWORD=...` (password of the Joomla administrator)
32 | - `-e JOOMLA_ADMIN_EMAIL=...` (email address of the Joomla administrator)
33 | - `-e JOOMLA_EXTENSIONS_URLS=...` (semicolon-separated list of URLs to install Joomla extensions from)
34 | - `-e JOOMLA_EXTENSIONS_PATHS=...` (semicolon-separated list of file paths to install Joomla extensions from)
35 | - `-e JOOMLA_SMTP_HOST=...` (SMTP host for outgoing email)
36 | - `-e JOOMLA_SMTP_HOST_PORT=...` (SMTP port for outgoing email)
37 |
38 | If you'd like to be able to access the instance from the host without the container's IP, standard port mappings can be used:
39 |
40 | ```console
41 | $ docker run --name some-%%REPO%% --network some-network -p 8080:80 -d %%IMAGE%%
42 | ```
43 |
44 | Then, access it via `http://localhost:8080` or `http://host-ip:8080` in a browser.
45 |
46 | If you'd like to use an external database instead of a MySQL container, specify the hostname and port with `JOOMLA_DB_HOST` along with the password in `JOOMLA_DB_PASSWORD` and the username in `JOOMLA_DB_USER` (if it is something other than `root`):
47 |
48 | ```console
49 | $ docker run --name some-%%REPO%% --network some-network -e JOOMLA_DB_HOST=10.1.2.3:3306 \
50 | -e JOOMLA_DB_USER=... -e JOOMLA_DB_PASSWORD=... -d %%IMAGE%%
51 | ```
52 |
53 | ## %%COMPOSE%%
54 |
55 | Run `docker compose up`, wait for it to initialize completely, and visit `http://localhost:8080` or `http://host-ip:8080` (as appropriate).
56 |
57 | ## Adding additional libraries / extensions
58 |
59 | This image does not provide any additional PHP extensions or other libraries, even if they are required by popular plugins. There are an infinite number of possible plugins, and they potentially require any extension PHP supports. Including every PHP extension that exists would dramatically increase the image size.
60 |
61 | If you need additional PHP extensions, you'll need to create your own image `FROM` this one. The [documentation of the `php` image](https://github.com/docker-library/docs/blob/master/php/README.md#how-to-install-more-php-extensions) explains how to compile additional extensions. Additionally, the [`%%REPO%%` Dockerfile](https://github.com/joomla-docker/docker-joomla/blob/360f6bd96c80f72b020d2d9c8aae9daa6bca2887/5.1/php8.3/apache/Dockerfile#L51-L64) has an example of doing this.
62 |
63 | The following Docker Hub features can help with the task of keeping your dependent images up-to-date:
64 |
65 | - [Automated Builds](https://docs.docker.com/docker-hub/builds/) let Docker Hub automatically build your Dockerfile each time you push changes to it.
66 |
```
--------------------------------------------------------------------------------
/ghost/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # Ghost
2 |
3 | Ghost is an independent platform for publishing online by web and email newsletter. It has user signups, gated access and subscription payments built-in (with Stripe) to allow you to build a direct relationship with your audience. It's fast, user-friendly, and runs on Node.js & MySQL8.
4 |
5 | > [Ghost.org)](https://ghost.org)
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | This will start a Ghost development instance listening on the default Ghost port of 2368.
12 |
13 | ```console
14 | $ docker run -d --name some-ghost -e NODE_ENV=development %%IMAGE%%
15 | ```
16 |
17 | ## Custom port
18 |
19 | If you'd like to be able to access the instance from the host without the container's IP, standard port mappings can be used:
20 |
21 | ```console
22 | $ docker run -d --name some-ghost -e NODE_ENV=development -e url=http://localhost:3001 -p 3001:2368 %%IMAGE%%
23 | ```
24 |
25 | If all goes well, you'll be able to access your new site on `http://localhost:3001` and `http://localhost:3001/ghost` to access Ghost Admin (or `http://host-ip:3001` and `http://host-ip:3001/ghost`, respectively).
26 |
27 | ### Upgrading Ghost
28 |
29 | You will want to ensure you are running the latest minor version of Ghost before upgrading major versions. Otherwise, you may run into database errors.
30 |
31 | For upgrading your Ghost container you will want to mount your data to the appropriate path in the predecessor container (see below): import your content from the admin panel, stop the container, and then re-mount your content to the successor container you are upgrading into; you can then export your content from the admin panel.
32 |
33 | ## Stateful
34 |
35 | Mount your existing content. In this example we also use the Alpine Linux based image.
36 |
37 | ```console
38 | $ docker run -d \
39 | --name some-ghost \
40 | -e NODE_ENV=development \
41 | -e database__connection__filename='/var/lib/ghost/content/data/ghost.db' \
42 | -p 3001:2368 \
43 | -v /path/to/ghost/blog:/var/lib/ghost/content \
44 | %%IMAGE%%:alpine
45 | ```
46 |
47 | Note: `database__connection__filename` is only valid in development mode and is the location for the SQLite database file. If using development mode, it should be set to a writeable path within a persistent folder (bind mount or volume). It is not available in production mode because an external MySQL server is required (see the Docker Compose example below).
48 |
49 | ### Docker Volume
50 |
51 | Alternatively you can use a named [docker volume](https://docs.docker.com/storage/volumes/) instead of a direct host path for `/var/lib/ghost/content`:
52 |
53 | ```console
54 | $ docker run -d \
55 | --name some-ghost \
56 | -e NODE_ENV=development \
57 | -e database__connection__filename='/var/lib/ghost/content/data/ghost.db' \
58 | -p 3001:2368 \
59 | -v some-ghost-data:/var/lib/ghost/content \
60 | %%IMAGE%%
61 | ```
62 |
63 | ## Configuration
64 |
65 | All Ghost configuration parameters (such as `url`) can be specified via environment variables. See [the Ghost documentation](https://ghost.org/docs/concepts/config/#running-ghost-with-config-env-variables) for details about what configuration is allowed and how to convert a nested configuration key into the appropriate environment variable name:
66 |
67 | ```console
68 | $ docker run -d --name some-ghost -e NODE_ENV=development -e url=http://some-ghost.example.com %%IMAGE%%
69 | ```
70 |
71 | (There are further configuration examples in the `compose.yaml` listed below.)
72 |
73 | ## What is the Node.js version?
74 |
75 | When opening a ticket at https://github.com/TryGhost/Ghost/issues it becomes necessary to know the version of Node.js in use:
76 |
77 | ```console
78 | $ docker exec <container-id> node --version
79 | [node version output]
80 | ```
81 |
82 | ## Note about Ghost-CLI
83 |
84 | While the Docker images do have Ghost-CLI available and do use some of its commands to set up the base Ghost image, many of the other Ghost-CLI commands won't work correctly, and really aren't designed/intended to. For more info see [docker-library/ghost#156 (comment)](https://github.com/docker-library/ghost/issues/156#issuecomment-428159861)
85 |
86 | ## Production mode
87 |
88 | To run Ghost for production you'll also need to be running with MySQL 8, https, and a reverse proxy configured with appropriate `X-Forwarded-For`, `X-Forwarded-Host`, and `X-Forwarded-Proto` (`https`) headers.
89 |
90 | The following example demonstrates some of the necessary configuration for running with MySQL. For more detail, see [Ghost's "Configuration options" documentation](https://ghost.org/docs/config/#configuration-options).
91 |
92 | ## %%COMPOSE%%
93 |
94 | Run `docker compose up`, wait for it to initialize completely, and visit `http://localhost:8080` or `http://host-ip:8080` (as appropriate).
95 |
```
--------------------------------------------------------------------------------
/composer/content.md:
--------------------------------------------------------------------------------
```markdown
1 | # What is Composer?
2 |
3 | Composer is a tool for dependency management in PHP, written in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
4 |
5 | You can read more about Composer in our [official documentation](https://getcomposer.org/doc/).
6 |
7 | %%LOGO%%
8 |
9 | # How to use this image
10 |
11 | ### Basic usage
12 |
13 | ```console
14 | $ docker run --rm --interactive --tty \
15 | --volume $PWD:/app \
16 | %%IMAGE%% <command>
17 | ```
18 |
19 | ### Persist cache / global configuration
20 |
21 | You can bind mount the Composer home directory from your host to the container to enable a persistent cache or share global configuration:
22 |
23 | ```console
24 | $ docker run --rm --interactive --tty \
25 | --volume $PWD:/app \
26 | --volume ${COMPOSER_HOME:-$HOME/.composer}:/tmp \
27 | %%IMAGE%% <command>
28 | ```
29 |
30 | **Note:** this relies on the fact that the `COMPOSER_HOME` value is set to `/tmp` in the image by default.
31 |
32 | Or if your environment follows the XDG specification:
33 |
34 | ```console
35 | $ docker run --rm --interactive --tty \
36 | --env COMPOSER_HOME \
37 | --env COMPOSER_CACHE_DIR \
38 | --volume ${COMPOSER_HOME:-$HOME/.config/composer}:$COMPOSER_HOME \
39 | --volume ${COMPOSER_CACHE_DIR:-$HOME/.cache/composer}:$COMPOSER_CACHE_DIR \
40 | --volume $PWD:/app \
41 | %%IMAGE%% <command>
42 | ```
43 |
44 | ### Filesystem permissions
45 |
46 | By default, Composer runs as root inside the container. This can lead to permission issues on your host filesystem. You can work around this by running the container with a different user:
47 |
48 | ```console
49 | $ docker run --rm --interactive --tty \
50 | --volume $PWD:/app \
51 | --user $(id -u):$(id -g) \
52 | %%IMAGE%% <command>
53 | ```
54 |
55 | See: https://docs.docker.com/engine/reference/run/#user for details.
56 |
57 | > Note: Docker for Mac behaves differently and this tip might not apply to Docker for Mac users.
58 |
59 | ### Private repositories / SSH agent
60 |
61 | When you need to access private repositories, you will either need to share your configured credentials, or mount your `ssh-agent` socket inside the running container:
62 |
63 | ```console
64 | $ eval $(ssh-agent); \
65 | docker run --rm --interactive --tty \
66 | --volume $PWD:/app \
67 | --volume $SSH_AUTH_SOCK:/ssh-auth.sock \
68 | --env SSH_AUTH_SOCK=/ssh-auth.sock \
69 | %%IMAGE%% <command>
70 | ```
71 |
72 | **Note:** On OSX this requires Docker For Mac v2.2.0.0 or later, see [docker/for-mac#410](https://github.com/docker/for-mac/issues/410).
73 |
74 | When combining the use of private repositories with running Composer as another user, you can run into non-existent user errors (thrown by ssh). To work around this, bind mount the host passwd and group files (read-only) into the container:
75 |
76 | ```console
77 | $ eval $(ssh-agent); \
78 | docker run --rm --interactive --tty \
79 | --volume $PWD:/app \
80 | --volume $SSH_AUTH_SOCK:/ssh-auth.sock \
81 | --volume /etc/passwd:/etc/passwd:ro \
82 | --volume /etc/group:/etc/group:ro \
83 | --env SSH_AUTH_SOCK=/ssh-auth.sock \
84 | --user $(id -u):$(id -g) \
85 | %%IMAGE%% <command>
86 | ```
87 |
88 | # Troubleshooting
89 |
90 | ### PHP version & extensions
91 |
92 | Our image is aimed at quickly running Composer without the need for having a PHP runtime installed on your host. You should not rely on the PHP version in our container. We do not provide a Composer image for each supported PHP version because we do not want to encourage using Composer as a base image or a production image.
93 |
94 | We try to deliver an image that is as lean as possible, built for running Composer only. Sometimes dependencies or Composer [scripts](https://getcomposer.org/doc/articles/scripts.md) require the availability of certain PHP extensions.
95 |
96 | Suggestions:
97 |
98 | - (optimal) create your own build image and [install](https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md) Composer inside it.
99 |
100 | **Note:** Docker 17.05 introduced [multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/), simplifying this enormously:
101 |
102 | ```dockerfile
103 | COPY --from=%%IMAGE%% /usr/bin/composer /usr/bin/composer
104 | ```
105 |
106 | - (alternatively) specify the target [platform](https://getcomposer.org/doc/06-config.md#platform) / extension(s) in your `composer.json`:
107 |
108 | ```json
109 | {
110 | "config": {
111 | "platform": {
112 | "php": "MAJOR.MINOR.PATCH",
113 | "ext-something": "MAJOR.MINOR.PATCH"
114 | }
115 | }
116 | }
117 | ```
118 |
119 | - (discouraged) pass the [`--ignore-platform-reqs`](https://getcomposer.org/doc/03-cli.md#install-i) and / or `--no-scripts` flags to `install` or `update`:
120 |
121 | ```console
122 | $ docker run --rm --interactive --tty \
123 | --volume $PWD:/app \
124 | %%IMAGE%% install --ignore-platform-reqs --no-scripts
125 | ```
126 |
```