diff --git a/3/debian10/3.7/Dockerfile b/3/debian10/3.7/Dockerfile
deleted file mode 100644
index 8f04c99..0000000
--- a/3/debian10/3.7/Dockerfile
+++ /dev/null
@@ -1,237 +0,0 @@
-FROM marketplace.gcr.io/google/debian10 AS plugins
-
-COPY license-checksums /
-
-RUN set -eux; \
- apt-get update && apt-get install -y ca-certificates wget; \
- \
- mkdir /plugins && cd /plugins; \
- \
- readonly base_url='https://github.com/deadtrickster/prometheus_rabbitmq_exporter/releases/download/v3.7.9.1'; \
- wget "${base_url}/accept-0.3.5.ez"; \
- wget "${base_url}/prometheus-4.3.0.ez"; \
- wget "${base_url}/prometheus_cowboy-0.1.7.ez"; \
- wget "${base_url}/prometheus_httpd-2.1.10.ez"; \
- wget "${base_url}/prometheus_process_collector-1.4.3.ez"; \
- wget "${base_url}/prometheus_rabbitmq_exporter-3.7.9.1.ez"; \
- \
- mkdir -p "/licenses" && cd "/licenses"; \
- readonly git_base='https://raw.githubusercontent.com/deadtrickster'; \
- \
- mkdir accept && wget -O accept/LICENSE "${git_base}/accept/master/LICENSE"; \
- mkdir prometheus && wget -O prometheus/LICENSE "${git_base}/prometheus.erl/master/LICENSE"; \
- mkdir prometheus_cowboy && wget -O prometheus_cowboy/LICENSE "${git_base}/prometheus-cowboy/master/LICENSE"; \
- mkdir prometheus_httpd && wget -O prometheus_httpd/LICENSE "${git_base}/prometheus-httpd/master/LICENSE"; \
- mkdir prometheus_rabbitmq_exporter && wget -O prometheus_rabbitmq_exporter/LICENSE "${git_base}/prometheus_rabbitmq_exporter/master/LICENSE"; \
- \
- sha256sum -c /license-checksums
-
-
-FROM marketplace.gcr.io/google/debian10
-
-# grab gosu for easy step-down from root
-RUN set -eux; \
- apt-get update; \
- apt-get install -y --no-install-recommends \
- gosu; \
- rm -rf /var/lib/apt/lists/*; \
-# verify that the "gosu" binary works
- gosu nobody true
-
-ENV OTP_VERSION 22.3.4
-ENV OTP_SOURCE_SHA256="79657e07aee0cc174f89c1bd7d8d251295f64144cced6ea72b98777ec6a6660d"
-
-# Install dependencies required to build Erlang/OTP from source
-# http://erlang.org/doc/installation_guide/INSTALL.html
-# autoconf: Required to configure Erlang/OTP before compiling
-# dpkg-dev: Required to set up host & build type when compiling Erlang/OTP
-# libncurses5-dev: Required for Erlang/OTP new shell & observer_cli - https://github.com/zhongwencool/observer_cli
-RUN set -eux; \
- \
- savedAptMark="$(apt-mark showmanual)"; \
- apt-get update; \
- apt-get install --yes --no-install-recommends \
- autoconf \
- ca-certificates \
- dirmngr \
- dpkg-dev \
- gcc \
- libssl-dev \
- libncurses5-dev \
- m4 \
- make \
- openssl \
- wget \
- ; \
- rm -rf /var/lib/apt/lists/*; \
- \
- openssl version; \
- \
- OTP_SOURCE_URL="https://github.com/erlang/otp/archive/OTP-$OTP_VERSION.tar.gz"; \
- OTP_PATH="/usr/local/src/otp-$OTP_VERSION"; \
- \
-# Download, verify & extract OTP_SOURCE
- mkdir -p "$OTP_PATH"; \
- wget --progress dot:giga --output-document "$OTP_PATH.tar.gz" "$OTP_SOURCE_URL"; \
- echo "$OTP_SOURCE_SHA256 *$OTP_PATH.tar.gz" | sha256sum --check --strict -; \
- tar --extract --file "$OTP_PATH.tar.gz" --directory "$OTP_PATH" --strip-components 1; \
- \
-# Configure Erlang/OTP for compilation, disable unused features & applications
-# http://erlang.org/doc/applications.html
-# ERL_TOP is required for Erlang/OTP makefiles to find the absolute path for the installation
- cd "$OTP_PATH"; \
- export ERL_TOP="$OTP_PATH"; \
- ./otp_build autoconf; \
- CFLAGS="$(dpkg-buildflags --get CFLAGS)"; export CFLAGS; \
-# add -rpath to avoid conflicts between our OpenSSL's "libssl.so" and the libssl package by making sure /usr/local/lib is searched first (but only for Erlang/OpenSSL to avoid issues with other tools using libssl; https://github.com/docker-library/rabbitmq/issues/364)
- export CFLAGS="$CFLAGS -Wl,-rpath=/usr/lib/ssl"; \
- hostArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)"; \
- buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
- dpkgArch="$(dpkg --print-architecture)"; dpkgArch="${dpkgArch##*-}"; \
- ./configure \
- --host="$hostArch" \
- --build="$buildArch" \
- --disable-dynamic-ssl-lib \
- --disable-hipe \
- --disable-sctp \
- --disable-silent-rules \
- --enable-clock-gettime \
- --enable-hybrid-heap \
- --enable-kernel-poll \
- --enable-shared-zlib \
- --enable-smp-support \
- --enable-threads \
- --with-microstate-accounting=extra \
- --with-ssl="/usr/include/openssl" \
- --without-common_test \
- --without-debugger \
- --without-dialyzer \
- --without-diameter \
- --without-edoc \
- --without-erl_docgen \
- --without-erl_interface \
- --without-et \
- --without-eunit \
- --without-ftp \
- --without-hipe \
- --without-jinterface \
- --without-megaco \
- --without-observer \
- --without-odbc \
- --without-reltool \
- --without-ssh \
- --without-tftp \
- --without-wx \
- ; \
-# Compile & install Erlang/OTP
- make -j "$(getconf _NPROCESSORS_ONLN)" GEN_OPT_FLGS="-O2 -fno-strict-aliasing"; \
- make install; \
- cd ..; \
- rm -rf \
- "$OTP_PATH"* \
- /usr/local/lib/erlang/lib/*/examples \
- /usr/local/lib/erlang/lib/*/src \
- ; \
- \
-# Check that Erlang/OTP crypto & ssl were compiled against OpenSSL correctly
- erl -noshell -eval 'io:format("~p~n~n~p~n~n", [crypto:supports(), ssl:versions()]), init:stop().'
-
-ENV RABBITMQ_DATA_DIR=/var/lib/rabbitmq
-# Create rabbitmq system user & group, fix permissions & allow root user to connect to the RabbitMQ Erlang VM
-RUN set -eux; \
- groupadd --gid 999 --system rabbitmq; \
- useradd --uid 999 --system --home-dir "$RABBITMQ_DATA_DIR" --gid rabbitmq rabbitmq; \
- mkdir -p "$RABBITMQ_DATA_DIR" /etc/rabbitmq /tmp/rabbitmq-ssl /var/log/rabbitmq; \
- chown -fR rabbitmq:rabbitmq "$RABBITMQ_DATA_DIR" /etc/rabbitmq /tmp/rabbitmq-ssl /var/log/rabbitmq; \
- chmod 777 "$RABBITMQ_DATA_DIR" /etc/rabbitmq /tmp/rabbitmq-ssl /var/log/rabbitmq; \
- ln -sf "$RABBITMQ_DATA_DIR/.erlang.cookie" /root/.erlang.cookie
-
-
-ENV RABBITMQ_VERSION 3.7.28
-ENV RABBITMQ_SHA512="75e766bb356f5ed75f948cfd9cdd9ad1e68ac6a8ded8571687e2f234396bf52c53bf985d8d688f734ddf88155915036c63399acf0ec773388bdb9e94a4fac8e7"
-ENV RABBITMQ_HOME=/opt/rabbitmq
-
-ENV C2D_RELEASE 3.7.28
-
-# Add RabbitMQ to PATH, send all logs to TTY
-ENV PATH=$RABBITMQ_HOME/sbin:$PATH \
- RABBITMQ_LOGS=-
-
-# Install RabbitMQ
-RUN set -eux; \
- \
- savedAptMark="$(apt-mark showmanual)"; \
- apt-get update; \
- apt-get install --yes --no-install-recommends \
- ca-certificates \
- dirmngr \
- gnupg2 \
- wget \
- xz-utils \
- ; \
- rm -rf /var/lib/apt/lists/*; \
- \
- RABBITMQ_SOURCE_URL="https://github.com/rabbitmq/rabbitmq-server/releases/download/v$RABBITMQ_VERSION/rabbitmq-server-generic-unix-latest-toolchain-$RABBITMQ_VERSION.tar.xz"; \
- RABBITMQ_PATH="/usr/local/src/rabbitmq-$RABBITMQ_VERSION"; \
- \
- wget --progress dot:giga --output-document "$RABBITMQ_PATH.tar.xz" "$RABBITMQ_SOURCE_URL"; \
- \
- mkdir -p "$RABBITMQ_HOME"; \
- echo "$RABBITMQ_SHA512 *$RABBITMQ_PATH.tar.xz" | sha512sum --check --strict -; \
- tar --extract --file "$RABBITMQ_PATH.tar.xz" --directory "$RABBITMQ_HOME" --strip-components 1; \
- rm -rf "$RABBITMQ_PATH"*; \
-# Do not default SYS_PREFIX to RABBITMQ_HOME, leave it empty
- grep -qE '^SYS_PREFIX=\$\{RABBITMQ_HOME\}$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
- sed -i 's/^SYS_PREFIX=.*$/SYS_PREFIX=/' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
- grep -qE '^SYS_PREFIX=$' "$RABBITMQ_HOME/sbin/rabbitmq-defaults"; \
- chown -R rabbitmq:rabbitmq "$RABBITMQ_HOME"; \
- \
- # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
- apt-mark auto '.*' > /dev/null; \
- [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
- find /usr/local -type f -executable -exec ldd '{}' ';' \
- | awk '/=>/ { print $(NF-1) }' \
- | sort -u \
- | xargs -r dpkg-query --search \
- | cut -d: -f1 \
- | sort -u \
- | xargs -r apt-mark manual \
- ; \
- apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
-# verify assumption of no stale cookies
- [ ! -e "$RABBITMQ_DATA_DIR/.erlang.cookie" ]
-
-RUN apt update && apt install -y openssl
-
-RUN mkdir /usr/share/doc/rabbitmq-plugins
-
-COPY --from=plugins --chown=rabbitmq /plugins/* /opt/rabbitmq/plugins/
-COPY --from=plugins --chown=rabbitmq /licenses/* /usr/share/doc/rabbitmq-plugins/
-
-# Ensure RabbitMQ was installed correctly by running a few commands that do not depend on a running server, as the rabbitmq user
-# If they all succeed, it's safe to assume that things have been set up correctly
-RUN gosu rabbitmq rabbitmqctl help; \
- gosu rabbitmq rabbitmqctl list_ciphers; \
- gosu rabbitmq rabbitmq-plugins list; \
-# no stale cookies
- rm "$RABBITMQ_DATA_DIR/.erlang.cookie"
-
-# Added for backwards compatibility - users can simply COPY custom plugins to /plugins
-RUN ln -sf /opt/rabbitmq/plugins /plugins
-
-# set home so that any `--user` knows where to put the erlang cookie
-ENV HOME $RABBITMQ_DATA_DIR
-# Hint that the data (a.k.a. home dir) dir should be separate volume
-VOLUME $RABBITMQ_DATA_DIR
-
-# warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
-# Setting all environment variables that control language preferences, behaviour differs - https://www.gnu.org/software/gettext/manual/html_node/The-LANGUAGE-variable.html#The-LANGUAGE-variable
-# https://docs.docker.com/samples/library/ubuntu/#locales
-ENV LANG=C.UTF-8 LANGUAGE=C.UTF-8 LC_ALL=C.UTF-8
-
-COPY --chown=rabbitmq:rabbitmq docker-entrypoint.sh /usr/local/bin/
-
-ENTRYPOINT ["docker-entrypoint.sh"]
-
-EXPOSE 4369 5671 5672 25672
-CMD ["rabbitmq-server"]
diff --git a/3/debian10/3.7/README.md b/3/debian10/3.7/README.md
deleted file mode 100644
index 37c141a..0000000
--- a/3/debian10/3.7/README.md
+++ /dev/null
@@ -1,269 +0,0 @@
-# About
-
-This image contains an installation of RabbitMQ 3.x.
-
-For more information, see the [Official Image Launcher Page](https://console.cloud.google.com/launcher/details/google/rabbitmq3).
-
-Pull command:
-
-```shell
-gcloud docker -- pull launcher.gcr.io/google/rabbitmq3
-```
-
-Dockerfile for this image can be found [here](https://github.com/GoogleCloudPlatform/rabbitmq-docker/tree/master/3).
-
-# Table of Contents
-* [Using Kubernetes](#using-kubernetes)
- * [Running RabbitMQ](#running-rabbitmq-kubernetes)
- * [Starting a RabbitMQ instance](#starting-a-rabbitmq-instance-kubernetes)
- * [Connecting to a running RabbitMQ container](#connecting-to-a-running-rabbitmq-container-kubernetes)
- * [Adding persistence](#adding-persistence-kubernetes)
- * [Running with persistent data volumes](#running-with-persistent-data-volumes-kubernetes)
-* [Using Docker](#using-docker)
- * [Running RabbitMQ](#running-rabbitmq-docker)
- * [Starting a RabbitMQ instance](#starting-a-rabbitmq-instance-docker)
- * [Connecting to a running RabbitMQ container](#connecting-to-a-running-rabbitmq-container-docker)
- * [Adding persistence](#adding-persistence-docker)
- * [Running with persistent data volumes](#running-with-persistent-data-volumes-docker)
-* [References](#references)
- * [Ports](#references-ports)
- * [Environment Variables](#references-environment-variables)
- * [Volumes](#references-volumes)
-
-# Using Kubernetes
-
-## Running RabbitMQ
-
-### Starting a RabbitMQ instance
-
-Replace `your-erlang-cookie` with a valid cookie value. For more information, see `RABBITMQ_ERLANG_COOKIE` in [Environment Variable](#references-environment-variables).
-
-Copy the following content to `pod.yaml` file, and run `kubectl create -f pod.yaml`.
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: some-rabbitmq
- labels:
- name: some-rabbitmq
-spec:
- containers:
- - image: launcher.gcr.io/google/rabbitmq3
- name: rabbitmq
- env:
- - name: "RABBITMQ_ERLANG_COOKIE"
- value: "unique-erlang-cookie"
-```
-
-Run the following to expose the ports:
-
-```shell
-kubectl expose pod some-rabbitmq --name some-rabbitmq-4369 \
- --type LoadBalancer --port 4369 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-5671 \
- --type LoadBalancer --port 5671 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-5672 \
- --type LoadBalancer --port 5672 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-25672 \
- --type LoadBalancer --port 25672 --protocol TCP
-```
-
-For information about how to retain your RabbitMQ data across container restarts, see [Adding persistence](#adding-persistence-kubernetes).
-
-### Connecting to a running RabbitMQ container
-
-Open an interactive shell to the RabbitMQ container. Note that because we open a shell directly in the container, Erlang cookie does not have to be explicitly specified.
-
-```shell
-kubectl exec -it some-rabbitmq -- /bin/bash
-```
-
-`rabbitmqctl` can be run in the shell. For example, we can do a node health check.
-
-```
-rabbitmqctl node_health_check
-```
-
-## Adding persistence
-
-### Running with persistent data volumes
-
-We can store data on persistent volumes, this way the installation remains intact across restarts.
-
-Copy the following content to `pod.yaml` file, and run `kubectl create -f pod.yaml`.
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: some-rabbitmq
- labels:
- name: some-rabbitmq
-spec:
- containers:
- - image: launcher.gcr.io/google/rabbitmq3
- name: rabbitmq
- env:
- - name: "RABBITMQ_ERLANG_COOKIE"
- value: "unique-erlang-cookie"
- volumeMounts:
- - name: rabbitmq-data
- mountPath: /var/lib/rabbitmq
- volumes:
- - name: rabbitmq-data
- persistentVolumeClaim:
- claimName: rabbitmq-data
----
-# Request a persistent volume from the cluster using a Persistent Volume Claim.
-kind: PersistentVolumeClaim
-apiVersion: v1
-metadata:
- name: rabbitmq-data
- annotations:
- volume.alpha.kubernetes.io/storage-class: default
-spec:
- accessModes: [ReadWriteOnce]
- resources:
- requests:
- storage: 5Gi
-```
-
-Run the following to expose the ports:
-
-```shell
-kubectl expose pod some-rabbitmq --name some-rabbitmq-4369 \
- --type LoadBalancer --port 4369 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-5671 \
- --type LoadBalancer --port 5671 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-5672 \
- --type LoadBalancer --port 5672 --protocol TCP
-kubectl expose pod some-rabbitmq --name some-rabbitmq-25672 \
- --type LoadBalancer --port 25672 --protocol TCP
-```
-
-# Using Docker
-
-## Running RabbitMQ
-
-### Starting a RabbitMQ instance
-
-Replace `your-erlang-cookie` with a valid cookie value. For more information, see `RABBITMQ_ERLANG_COOKIE` in [Environment Variable](#references-environment-variables).
-
-Use the following content for the `docker-compose.yml` file, then run `docker-compose up`.
-
-```yaml
-version: '2'
-services:
- rabbitmq:
- container_name: some-rabbitmq
- image: launcher.gcr.io/google/rabbitmq3
- environment:
- "RABBITMQ_ERLANG_COOKIE": "unique-erlang-cookie"
- ports:
- - '4369:4369'
- - '5671:5671'
- - '5672:5672'
- - '25672:25672'
-```
-
-Or you can use `docker run` directly:
-
-```shell
-docker run \
- --name some-rabbitmq \
- -e "RABBITMQ_ERLANG_COOKIE=unique-erlang-cookie" \
- -p 4369:4369 \
- -p 5671:5671 \
- -p 5672:5672 \
- -p 25672:25672 \
- -d \
- launcher.gcr.io/google/rabbitmq3
-```
-
-For information about how to retain your RabbitMQ data across container restarts, see [Adding persistence](#adding-persistence-docker).
-
-### Connecting to a running RabbitMQ container
-
-Open an interactive shell to the RabbitMQ container. Note that because we open a shell directly in the container, Erlang cookie does not have to be explicitly specified.
-
-```shell
-docker exec -it some-rabbitmq /bin/bash
-```
-
-`rabbitmqctl` can be run in the shell. For example, we can do a node health check.
-
-```
-rabbitmqctl node_health_check
-```
-
-## Adding persistence
-
-### Running with persistent data volumes
-
-We can store data on persistent volumes, this way the installation remains intact across restarts. Assume that `/path/to/your/rabbitmq` is the persistent directory on the host.
-
-Use the following content for the `docker-compose.yml` file, then run `docker-compose up`.
-
-```yaml
-version: '2'
-services:
- rabbitmq:
- container_name: some-rabbitmq
- image: launcher.gcr.io/google/rabbitmq3
- environment:
- "RABBITMQ_ERLANG_COOKIE": "unique-erlang-cookie"
- ports:
- - '4369:4369'
- - '5671:5671'
- - '5672:5672'
- - '25672:25672'
- volumes:
- - /path/to/your/rabbitmq:/var/lib/rabbitmq
-```
-
-Or you can use `docker run` directly:
-
-```shell
-docker run \
- --name some-rabbitmq \
- -e "RABBITMQ_ERLANG_COOKIE=unique-erlang-cookie" \
- -p 4369:4369 \
- -p 5671:5671 \
- -p 5672:5672 \
- -p 25672:25672 \
- -v /path/to/your/rabbitmq:/var/lib/rabbitmq \
- -d \
- launcher.gcr.io/google/rabbitmq3
-```
-
-# References
-
-## Ports
-
-These are the ports exposed by the container image.
-
-| **Port** | **Description** |
-|:---------|:----------------|
-| TCP 4369 | [`epmd` port](http://erlang.org/doc/man/epmd.html), a peer discovery service used by RabbitMQ nodes and CLI tools. |
-| TCP 5671 | Used by AMQP 0-9-1 and 1.0 clients with TLS. |
-| TCP 5672 | Used by AMQP 0-9-1 and 1.0 clients without TLS. |
-| TCP 25672 | Used by Erlang distribution for inter-node and CLI tools communication. This port is allocated from a dynamic range. By default, it takes the value of AMQP port plus 20000 (5672 + 20000), or 25672. |
-
-## Environment Variables
-
-These are the environment variables understood by the container image.
-
-| **Variable** | **Description** |
-|:-------------|:----------------|
-| RABBITMQ_ERLANG_COOKIE | Sets the shared secret Erlang cookie used for authenticating other nodes and clients. For two nodes, or a node and a client, to communicate with each other, they must have the same Erlang cookie. |
-| RABBITMQ_DEFAULT_USER | Sets the default user name. Used in conjunction with `RABBITMQ_DEFAULT_PASS`.
Defaults to `guest`. |
-| RABBITMQ_DEFAULT_PASS | Sets the default user password. Used in conjunction with `RABBITMQ_DEFAULT_USER`.
Defaults to `guest`. |
-
-## Volumes
-
-These are the filesystem paths used by the container image.
-
-| **Path** | **Description** |
-|:---------|:----------------|
-| /var/lib/rabbitmq | All RabbitMQ files are installed here. |
diff --git a/3/debian10/3.7/README.yaml b/3/debian10/3.7/README.yaml
deleted file mode 100644
index 9fd78bf..0000000
--- a/3/debian10/3.7/README.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-_templates:
-- &Image launcher.gcr.io/google/rabbitmq3
-- &PullCommand gcloud docker -- pull launcher.gcr.io/google/rabbitmq3
-- &BaseRun
- name: rabbitmq
- image: *Image
- exposedPorts:
- - port: 4369
- mapped: 4369
- - port: 5671
- mapped: 5671
- - port: 5672
- mapped: 5672
- - port: 25672
- mapped: 25672
- environment:
- RABBITMQ_ERLANG_COOKIE:
- value: unique-erlang-cookie
-- &RabbitmqExec
- execType: INTERACTIVE_SHELL
- containerFromRun: *BaseRun
-- &RabbitmqCtl
- name: ctl
- image: *Image
- runType: INTERACTIVE_SHELL
- environment:
- RABBITMQ_ERLANG_COOKIE:
- value: your-erlang-cookie
-
-overview:
- description: |-
- This image contains an installation of RabbitMQ 3.x.
-
- For more information, see the [Official Image Launcher Page](https://console.cloud.google.com/launcher/details/google/rabbitmq3).
- dockerfileUrl: https://github.com/GoogleCloudPlatform/rabbitmq-docker/tree/master/3
- pullCommand: *PullCommand
-
-taskGroups:
-
-- title: Running RabbitMQ
- tasks:
- - title: Starting a RabbitMQ instance
- runtimes: [DOCKER, KUBERNETES]
- instructions:
- - description: >-
- Replace `your-erlang-cookie` with a valid cookie value. For more information,
- see `RABBITMQ_ERLANG_COOKIE` in
- [Environment Variable](#references-environment-variables).
- run: *BaseRun
- - description: >-
- For information about how to retain your RabbitMQ data across container
- restarts, see [](#adding-persistence).
- - title: Connecting to a running RabbitMQ container
- runtimes: [DOCKER, KUBERNETES]
- instructions:
- - description: >-
- Open an interactive shell to the RabbitMQ container.
- Note that because we open a shell directly in the container,
- Erlang cookie does not have to be explicitly specified.
- exec:
- <<: *RabbitmqExec
- command: /bin/bash
- subcommands:
- - description: >-
- `rabbitmqctl` can be run in the shell. For example, we can do
- a node health check.
- command: rabbitmqctl node_health_check
-
-- title: Adding persistence
- anchorId: adding-persistence
- tasks:
- - title: Running with persistent data volumes
- runtimes: [DOCKER, KUBERNETES]
- instructions:
- - description: >-
- We can store data on persistent volumes, this way the installation
- remains intact across restarts. Assume that `/path/to/your/rabbitmq`
- is the persistent directory on the host.
- applicableRuntimes: [DOCKER]
- - description: >-
- We can store data on persistent volumes, this way the
- installation remains intact across restarts.
- applicableRuntimes: [KUBERNETES]
- - run:
- <<: *BaseRun
- volumes:
- - name: rabbitmq-data
- path: /var/lib/rabbitmq
- emptyPersistentVolume:
- hostPath: /path/to/your/rabbitmq
-
-portReference:
- ports:
- - port: '4369'
- description: >-
- [`epmd` port](http://erlang.org/doc/man/epmd.html),
- a peer discovery service used by RabbitMQ nodes and CLI tools.
- - port: '5671'
- description: Used by AMQP 0-9-1 and 1.0 clients with TLS.
- - port: '5672'
- description: Used by AMQP 0-9-1 and 1.0 clients without TLS.
- - port: '25672'
- description: >-
- Used by Erlang distribution for inter-node and CLI tools communication.
- This port is allocated from a dynamic range. By default, it takes
- the value of AMQP port plus 20000 (5672 + 20000), or 25672.
-
-environmentVariableReference:
- variables:
- - name: RABBITMQ_ERLANG_COOKIE
- description: >-
- Sets the shared secret Erlang cookie used for authenticating other nodes
- and clients. For two nodes, or a node and a client, to communicate with
- each other, they must have the same Erlang cookie.
- - name: RABBITMQ_DEFAULT_USER
- description: >-
- Sets the default user name. Used in conjunction with
- `RABBITMQ_DEFAULT_PASS`.
-
- Defaults to `guest`.
- - name: RABBITMQ_DEFAULT_PASS
- description: >-
- Sets the default user password. Used in conjunction with
- `RABBITMQ_DEFAULT_USER`.
-
- Defaults to `guest`.
-
-volumeReference:
- volumes:
- - path: /var/lib/rabbitmq
- description: All RabbitMQ files are installed here.
diff --git a/3/debian10/3.7/docker-entrypoint.sh b/3/debian10/3.7/docker-entrypoint.sh
deleted file mode 100755
index 4406fa9..0000000
--- a/3/debian10/3.7/docker-entrypoint.sh
+++ /dev/null
@@ -1,437 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2020 Google Inc.
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-set -eu
-
-export LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu
-
-# usage: file_env VAR [DEFAULT]
-# ie: file_env 'XYZ_DB_PASSWORD' 'example'
-# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
-# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
-file_env() {
- local var="$1"
- local fileVar="${var}_FILE"
- local def="${2:-}"
- if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
- echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
- exit 1
- fi
- local val="$def"
- if [ "${!var:-}" ]; then
- val="${!var}"
- elif [ "${!fileVar:-}" ]; then
- val="$(< "${!fileVar}")"
- fi
- export "$var"="$val"
- unset "$fileVar"
-}
-
-# backwards compatibility for old environment variables
-: "${RABBITMQ_SSL_CERTFILE:=${RABBITMQ_SSL_CERT_FILE:-}}"
-: "${RABBITMQ_SSL_KEYFILE:=${RABBITMQ_SSL_KEY_FILE:-}}"
-: "${RABBITMQ_SSL_CACERTFILE:=${RABBITMQ_SSL_CA_FILE:-}}"
-
-# "management" SSL config should default to using the same certs
-: "${RABBITMQ_MANAGEMENT_SSL_CACERTFILE:=$RABBITMQ_SSL_CACERTFILE}"
-: "${RABBITMQ_MANAGEMENT_SSL_CERTFILE:=$RABBITMQ_SSL_CERTFILE}"
-: "${RABBITMQ_MANAGEMENT_SSL_KEYFILE:=$RABBITMQ_SSL_KEYFILE}"
-
-# Allowed env vars that will be read from mounted files (i.e. Docker Secrets):
-fileEnvKeys=(
- default_user
- default_pass
-)
-
-# https://www.rabbitmq.com/configure.html
-sslConfigKeys=(
- cacertfile
- certfile
- depth
- fail_if_no_peer_cert
- keyfile
- verify
-)
-managementConfigKeys=(
- "${sslConfigKeys[@]/#/ssl_}"
-)
-rabbitConfigKeys=(
- default_pass
- default_user
- default_vhost
- vm_memory_high_watermark
-)
-fileConfigKeys=(
- management_ssl_cacertfile
- management_ssl_certfile
- management_ssl_keyfile
- ssl_cacertfile
- ssl_certfile
- ssl_keyfile
-)
-allConfigKeys=(
- "${managementConfigKeys[@]/#/management_}"
- "${rabbitConfigKeys[@]}"
- "${sslConfigKeys[@]/#/ssl_}"
-)
-
-declare -A configDefaults=(
- [management_ssl_fail_if_no_peer_cert]='false'
- [management_ssl_verify]='verify_none'
-
- [ssl_fail_if_no_peer_cert]='true'
- [ssl_verify]='verify_peer'
-)
-
-# allow the container to be started with `--user`
-if [[ "$1" == rabbitmq* ]] && [ "$(id -u)" = '0' ]; then
- # this needs to happen late enough that we have the SSL config
- # https://github.com/docker-library/rabbitmq/issues/283
- for conf in "${allConfigKeys[@]}"; do
- var="RABBITMQ_${conf^^}"
- val="${!var:-}"
- [ -n "$val" ] || continue
- case "$conf" in
- *_ssl_*file | ssl_*file )
- if [ -f "$val" ] && ! gosu rabbitmq test -r "$val"; then
- newFile="/tmp/rabbitmq-ssl/$conf.pem"
- echo >&2
- echo >&2 "WARNING: '$val' ($var) is not readable by rabbitmq ($(id rabbitmq)); copying to '$newFile'"
- echo >&2
- cat "$val" > "$newFile"
- chown rabbitmq "$newFile"
- chmod 0400 "$newFile"
- eval 'export '$var'="$newFile"'
- fi
- ;;
- esac
- done
-
- if [ "$1" = 'rabbitmq-server' ]; then
- find /var/lib/rabbitmq \! -user rabbitmq -exec chown rabbitmq '{}' +
- fi
-
- exec gosu rabbitmq "$BASH_SOURCE" "$@"
-fi
-
-haveConfig=
-haveSslConfig=
-haveManagementSslConfig=
-for fileEnvKey in "${fileEnvKeys[@]}"; do file_env "RABBITMQ_${fileEnvKey^^}"; done
-for conf in "${allConfigKeys[@]}"; do
- var="RABBITMQ_${conf^^}"
- val="${!var:-}"
- if [ "$val" ]; then
- if [ "${configDefaults[$conf]:-}" ] && [ "${configDefaults[$conf]}" = "$val" ]; then
- # if the value set is the same as the default, treat it as if it isn't set
- continue
- fi
- haveConfig=1
- case "$conf" in
- ssl_*) haveSslConfig=1 ;;
- management_ssl_*) haveManagementSslConfig=1 ;;
- esac
- fi
-done
-if [ "$haveSslConfig" ]; then
- missing=()
- for sslConf in cacertfile certfile keyfile; do
- var="RABBITMQ_SSL_${sslConf^^}"
- val="${!var}"
- if [ -z "$val" ]; then
- missing+=( "$var" )
- fi
- done
- if [ "${#missing[@]}" -gt 0 ]; then
- {
- echo
- echo 'error: SSL requested, but missing required configuration'
- for miss in "${missing[@]}"; do
- echo " - $miss"
- done
- echo
- } >&2
- exit 1
- fi
-fi
-missingFiles=()
-for conf in "${fileConfigKeys[@]}"; do
- var="RABBITMQ_${conf^^}"
- val="${!var}"
- if [ "$val" ] && [ ! -f "$val" ]; then
- missingFiles+=( "$val ($var)" )
- fi
-done
-if [ "${#missingFiles[@]}" -gt 0 ]; then
- {
- echo
- echo 'error: files specified, but missing'
- for miss in "${missingFiles[@]}"; do
- echo " - $miss"
- done
- echo
- } >&2
- exit 1
-fi
-
-# set defaults for missing values (but only after we're done with all our checking so we don't throw any of that off)
-for conf in "${!configDefaults[@]}"; do
- default="${configDefaults[$conf]}"
- var="RABBITMQ_${conf^^}"
- [ -z "${!var:-}" ] || continue
- eval "export $var=\"\$default\""
-done
-
-# if long and short hostnames are not the same, use long hostnames
-if [ "$(hostname)" != "$(hostname -s)" ]; then
- : "${RABBITMQ_USE_LONGNAME:=true}"
-fi
-
-if [ "${RABBITMQ_ERLANG_COOKIE:-}" ]; then
- cookieFile='/var/lib/rabbitmq/.erlang.cookie'
- if [ -e "$cookieFile" ]; then
- if [ "$(cat "$cookieFile" 2>/dev/null)" != "$RABBITMQ_ERLANG_COOKIE" ]; then
- echo >&2
- echo >&2 "warning: $cookieFile contents do not match RABBITMQ_ERLANG_COOKIE"
- echo >&2
- fi
- else
- echo "$RABBITMQ_ERLANG_COOKIE" > "$cookieFile"
- fi
- chmod 600 "$cookieFile"
-fi
-
-configBase="${RABBITMQ_CONFIG_FILE:-/etc/rabbitmq/rabbitmq}"
-oldConfigFile="$configBase.config"
-newConfigFile="$configBase.conf"
-
-shouldWriteConfig="$haveConfig"
-if [ -n "$shouldWriteConfig" ] && [ -f "$oldConfigFile" ]; then
- {
- echo "error: Docker configuration environment variables specified, but old-style (Erlang syntax) configuration file '$oldConfigFile' exists"
- echo " Suggested fixes: (choose one)"
- echo " - remove '$oldConfigFile'"
- echo " - remove any Docker-specific 'RABBITMQ_...' environment variables"
- echo " - convert '$oldConfigFile' to the newer sysctl format ('$newConfigFile'); see https://www.rabbitmq.com/configure.html#config-file"
- } >&2
- exit 1
-fi
-if [ -z "$shouldWriteConfig" ] && [ ! -f "$oldConfigFile" ] && [ ! -f "$newConfigFile" ]; then
- # no config files, we should write one
- shouldWriteConfig=1
-fi
-
-# http://stackoverflow.com/a/2705678/433558
-sed_escape_lhs() {
- echo "$@" | sed -e 's/[]\/$*.^|[]/\\&/g'
-}
-sed_escape_rhs() {
- echo "$@" | sed -e 's/[\/&]/\\&/g'
-}
-rabbit_set_config() {
- local key="$1"; shift
- local val="$1"; shift
-
- [ -e "$newConfigFile" ] || touch "$newConfigFile"
-
- local sedKey="$(sed_escape_lhs "$key")"
- local sedVal="$(sed_escape_rhs "$val")"
- sed -ri \
- "s/^[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*)\S.*\$/\1${sedVal}/" \
- "$newConfigFile"
- if ! grep -qE "^${sedKey}[[:space:]]*=" "$newConfigFile"; then
- echo "$key = $val" >> "$newConfigFile"
- fi
-}
-rabbit_comment_config() {
- local key="$1"; shift
-
- [ -e "$newConfigFile" ] || touch "$newConfigFile"
-
- local sedKey="$(sed_escape_lhs "$key")"
- sed -ri \
- "s/^[[:space:]]*#?[[:space:]]*(${sedKey}[[:space:]]*=[[:space:]]*\S.*)\$/# \1/" \
- "$newConfigFile"
-}
-rabbit_env_config() {
- local prefix="$1"; shift
-
- local conf
- for conf; do
- local var="rabbitmq${prefix:+_$prefix}_$conf"
- var="${var^^}"
-
- local key="$conf"
- case "$prefix" in
- ssl) key="ssl_options.$key" ;;
- management_ssl) key="management.ssl.$key" ;;
- esac
-
- local val="${!var:-}"
- local rawVal="$val"
- case "$conf" in
- fail_if_no_peer_cert)
- case "${val,,}" in
- false|no|0|'') rawVal='false' ;;
- true|yes|1|*) rawVal='true' ;;
- esac
- ;;
-
- vm_memory_high_watermark) continue ;; # handled separately
- esac
-
- if [ -n "$rawVal" ]; then
- rabbit_set_config "$key" "$rawVal"
- else
- rabbit_comment_config "$key"
- fi
- done
-}
-
-if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
- rabbit_set_config 'loopback_users.guest' 'false'
-
- # determine whether to set "vm_memory_high_watermark" (based on cgroups)
- memTotalKb=
- if [ -r /proc/meminfo ]; then
- memTotalKb="$(awk -F ':? +' '$1 == "MemTotal" { print $2; exit }' /proc/meminfo)"
- fi
- memLimitB=
- if [ -r /sys/fs/cgroup/memory/memory.limit_in_bytes ]; then
- # "18446744073709551615" is a valid value for "memory.limit_in_bytes", which is too big for Bash math to handle
- # "$(( 18446744073709551615 / 1024 ))" = 0; "$(( 18446744073709551615 * 40 / 100 ))" = 0
- memLimitB="$(awk -v totKb="$memTotalKb" '{
- limB = $0;
- limKb = limB / 1024;
- if (!totKb || limKb < totKb) {
- printf "%.0f\n", limB;
- }
- }' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
- fi
- if [ -n "$memLimitB" ]; then
- # if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
- # https://github.com/rabbitmq/rabbitmq-server/pull/1234
- rabbit_set_config 'total_memory_available_override_value' "$memLimitB"
- fi
- # https://www.rabbitmq.com/memory.html#memsup-usage
- if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
- # https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
- vmMemoryHighWatermark="$(
- echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK" | awk '
- /^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
- perc = $0;
- if (perc ~ /%$/) {
- gsub(/%$/, "", perc);
- perc = perc / 100;
- }
- if (perc > 1.0 || perc < 0.0) {
- printf "error: invalid percentage for vm_memory_high_watermark: %s (must be >= 0%%, <= 100%%)\n", $0 > "/dev/stderr";
- exit 1;
- }
- printf "vm_memory_high_watermark.relative %0.03f\n", perc;
- next;
- }
- /^[0-9]+$/ {
- printf "vm_memory_high_watermark.absolute %s\n", $0;
- next;
- }
- /^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
- printf "vm_memory_high_watermark.absolute %s\n", $0;
- next;
- }
- {
- printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
- exit 1;
- }
- '
- )"
- if [ "$vmMemoryHighWatermark" ]; then
- vmMemoryHighWatermarkKey="${vmMemoryHighWatermark%% *}"
- vmMemoryHighWatermarkVal="${vmMemoryHighWatermark#$vmMemoryHighWatermarkKey }"
- rabbit_set_config "$vmMemoryHighWatermarkKey" "$vmMemoryHighWatermarkVal"
- case "$vmMemoryHighWatermarkKey" in
- # make sure we only set one or the other
- 'vm_memory_high_watermark.absolute') rabbit_comment_config 'vm_memory_high_watermark.relative' ;;
- 'vm_memory_high_watermark.relative') rabbit_comment_config 'vm_memory_high_watermark.absolute' ;;
- esac
- fi
- fi
-
- if [ "$haveSslConfig" ]; then
- rabbit_set_config 'listeners.ssl.default' 5671
- rabbit_env_config 'ssl' "${sslConfigKeys[@]}"
- else
- rabbit_set_config 'listeners.tcp.default' 5672
- fi
-
- rabbit_env_config '' "${rabbitConfigKeys[@]}"
-
- # if management plugin is installed, generate config for it
- # https://www.rabbitmq.com/management.html#configuration
- if [ "$(rabbitmq-plugins list -q -m -e rabbitmq_management)" ]; then
- if [ "$haveManagementSslConfig" ]; then
- rabbit_set_config 'management.ssl.port' 15671
- rabbit_env_config 'management_ssl' "${sslConfigKeys[@]}"
- else
- rabbit_set_config 'management.tcp.port' 15672
- fi
-
- # if definitions file exists, then load it
- # https://www.rabbitmq.com/management.html#load-definitions
- managementDefinitionsFile='/etc/rabbitmq/definitions.json'
- if [ -f "$managementDefinitionsFile" ]; then
- # see also https://github.com/docker-library/rabbitmq/pull/112#issuecomment-271485550
- rabbit_set_config 'management.load_definitions' "$managementDefinitionsFile"
- fi
- fi
-fi
-
-combinedSsl='/tmp/rabbitmq-ssl/combined.pem'
-if [ "$haveSslConfig" ] && [[ "$1" == rabbitmq* ]] && [ ! -f "$combinedSsl" ]; then
- # Create combined cert
- {
- cat "$RABBITMQ_SSL_CERTFILE"
- echo # https://github.com/docker-library/rabbitmq/issues/357#issuecomment-517755647
- cat "$RABBITMQ_SSL_KEYFILE"
- } > "$combinedSsl"
- chmod 0400 "$combinedSsl"
-fi
-if [ "$haveSslConfig" ] && [ -f "$combinedSsl" ]; then
- # More ENV vars for make clustering happiness
- # we don't handle clustering in this script, but these args should ensure
- # clustered SSL-enabled members will talk nicely
- export ERL_SSL_PATH="$(erl -eval 'io:format("~p", [code:lib_dir(ssl, ebin)]),halt().' -noshell)"
- sslErlArgs="-pa $ERL_SSL_PATH -proto_dist inet_tls -ssl_dist_opt server_certfile $combinedSsl -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true"
- export RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="${RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS:-} $sslErlArgs"
- export RABBITMQ_CTL_ERL_ARGS="${RABBITMQ_CTL_ERL_ARGS:-} $sslErlArgs"
-fi
-
-: ${RABBITMQ_ENABLED_PLUGINS=''}
-
-if [[ ! -z "${RABBITMQ_ENABLED_PLUGINS}" ]]; then
- echo "${RABBITMQ_ENABLED_PLUGINS}" > /etc/rabbitmq/enabled_plugins
- more /etc/rabbitmq/enabled_plugins
-fi
-
-
-exec "$@"
diff --git a/3/debian10/3.7/license-checksums b/3/debian10/3.7/license-checksums
deleted file mode 100644
index 098731e..0000000
--- a/3/debian10/3.7/license-checksums
+++ /dev/null
@@ -1,5 +0,0 @@
-231b4e60ea0490d71958302fd3647fa2d411bbba6a8286d53549b6553b0208f0 accept/LICENSE
-441d1fb0e437d53fc5eafc35a3a55ff7508905fad63f6c4c07f9041f61c2a4be prometheus_cowboy/LICENSE
-28f1f6251456d63141150642ef485ab7eaa711885fe75a6e21c6b017456f4b8a prometheus_httpd/LICENSE
-d69c332723bc60f1528e9c1bdb63255aac91eb24abccbf469418baf11e60f63a prometheus/LICENSE
-648ad02690771dcb012176344074762a0fb88d7eda0f9723149c143e3a9db0cb prometheus_rabbitmq_exporter/LICENSE
diff --git a/README.md b/README.md
index b8e829e..e390d6a 100644
--- a/README.md
+++ b/README.md
@@ -12,3 +12,272 @@ https://github.com/docker-library/docs/tree/master/rabbitmq
# Disclaimer
This is not an official Google product.
+# About
+
+This image contains an installation of RabbitMQ
+
+For more information, see the [Official Image marketplace Page](https://console.cloud.google.com/marketplace/details/google/rabbitmq3).
+
+Pull command:
+
+```shell
+gcloud auth configure-docker && docker -- pull marketplace.gcr.io/google/rabbitmq3
+```
+
+Dockerfile for this image can be found [here](https://github.com/GoogleCloudPlatform/rabbitmq-docker/tree/master/3).
+
+# Table of Contents
+* [Using Kubernetes](#using-kubernetes)
+ * [Running RabbitMQ](#running-rabbitmq-kubernetes)
+ * [Starting a RabbitMQ instance](#starting-a-rabbitmq-instance-kubernetes)
+ * [Connecting to a running RabbitMQ container](#connecting-to-a-running-rabbitmq-container-kubernetes)
+ * [Adding persistence](#adding-persistence-kubernetes)
+ * [Running with persistent data volumes](#running-with-persistent-data-volumes-kubernetes)
+* [Using Docker](#using-docker)
+ * [Running RabbitMQ](#running-rabbitmq-docker)
+ * [Starting a RabbitMQ instance](#starting-a-rabbitmq-instance-docker)
+ * [Connecting to a running RabbitMQ container](#connecting-to-a-running-rabbitmq-container-docker)
+ * [Adding persistence](#adding-persistence-docker)
+ * [Running with persistent data volumes](#running-with-persistent-data-volumes-docker)
+* [References](#references)
+ * [Ports](#references-ports)
+ * [Environment Variables](#references-environment-variables)
+ * [Volumes](#references-volumes)
+
+# Using Kubernetes
+
+## Running RabbitMQ
+
+### Starting a RabbitMQ instance
+
+Replace `your-erlang-cookie` with a valid cookie value. For more information, see `RABBITMQ_ERLANG_COOKIE` in [Environment Variable](#references-environment-variables).
+
+Copy the following content to `pod.yaml` file, and run `kubectl create -f pod.yaml`.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: some-rabbitmq
+ labels:
+ name: some-rabbitmq
+spec:
+ containers:
+ - image: marketplace.gcr.io/google/rabbitmq3
+ name: rabbitmq
+ env:
+ - name: "RABBITMQ_ERLANG_COOKIE"
+ value: "unique-erlang-cookie"
+```
+
+Run the following to expose the ports:
+
+```shell
+kubectl expose pod some-rabbitmq --name some-rabbitmq-4369 \
+ --type LoadBalancer --port 4369 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-5671 \
+ --type LoadBalancer --port 5671 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-5672 \
+ --type LoadBalancer --port 5672 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-25672 \
+ --type LoadBalancer --port 25672 --protocol TCP
+```
+
+For information about how to retain your RabbitMQ data across container restarts, see [Adding persistence](#adding-persistence-kubernetes).
+
+### Connecting to a running RabbitMQ container
+
+Open an interactive shell to the RabbitMQ container. Note that because we open a shell directly in the container, Erlang cookie does not have to be explicitly specified.
+
+```shell
+kubectl exec -it some-rabbitmq -- /bin/bash
+```
+
+`rabbitmqctl` can be run in the shell. For example, we can do a node health check.
+
+```
+rabbitmqctl node_health_check
+```
+
+## Adding persistence
+
+### Running with persistent data volumes
+
+We can store data on persistent volumes, this way the installation remains intact across restarts.
+
+Copy the following content to `pod.yaml` file, and run `kubectl create -f pod.yaml`.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: some-rabbitmq
+ labels:
+ name: some-rabbitmq
+spec:
+ containers:
+ - image: marketplace.gcr.io/google/rabbitmq3
+ name: rabbitmq
+ env:
+ - name: "RABBITMQ_ERLANG_COOKIE"
+ value: "unique-erlang-cookie"
+ volumeMounts:
+ - name: rabbitmq-data
+ mountPath: /var/lib/rabbitmq
+ volumes:
+ - name: rabbitmq-data
+ persistentVolumeClaim:
+ claimName: rabbitmq-data
+---
+# Request a persistent volume from the cluster using a Persistent Volume Claim.
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: rabbitmq-data
+ annotations:
+ volume.alpha.kubernetes.io/storage-class: default
+spec:
+ accessModes: [ReadWriteOnce]
+ resources:
+ requests:
+ storage: 5Gi
+```
+
+Run the following to expose the ports:
+
+```shell
+kubectl expose pod some-rabbitmq --name some-rabbitmq-4369 \
+ --type LoadBalancer --port 4369 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-5671 \
+ --type LoadBalancer --port 5671 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-5672 \
+ --type LoadBalancer --port 5672 --protocol TCP
+kubectl expose pod some-rabbitmq --name some-rabbitmq-25672 \
+ --type LoadBalancer --port 25672 --protocol TCP
+```
+
+# Using Docker
+
+## Running RabbitMQ
+
+### Starting a RabbitMQ instance
+
+Replace `your-erlang-cookie` with a valid cookie value. For more information, see `RABBITMQ_ERLANG_COOKIE` in [Environment Variable](#references-environment-variables).
+
+Use the following content for the `docker-compose.yml` file, then run `docker-compose up`.
+
+```yaml
+version: '2'
+services:
+ rabbitmq:
+ container_name: some-rabbitmq
+ image: marketplace.gcr.io/google/rabbitmq3
+ environment:
+ "RABBITMQ_ERLANG_COOKIE": "unique-erlang-cookie"
+ ports:
+ - '4369:4369'
+ - '5671:5671'
+ - '5672:5672'
+ - '25672:25672'
+```
+
+Or you can use `docker run` directly:
+
+```shell
+docker run \
+ --name some-rabbitmq \
+ -e "RABBITMQ_ERLANG_COOKIE=unique-erlang-cookie" \
+ -p 4369:4369 \
+ -p 5671:5671 \
+ -p 5672:5672 \
+ -p 25672:25672 \
+ -d \
+ marketplace.gcr.io/google/rabbitmq3
+```
+
+For information about how to retain your RabbitMQ data across container restarts, see [Adding persistence](#adding-persistence-docker).
+
+### Connecting to a running RabbitMQ container
+
+Open an interactive shell to the RabbitMQ container. Note that because we open a shell directly in the container, Erlang cookie does not have to be explicitly specified.
+
+```shell
+docker exec -it some-rabbitmq /bin/bash
+```
+
+`rabbitmqctl` can be run in the shell. For example, we can do a node health check.
+
+```
+rabbitmqctl node_health_check
+```
+
+## Adding persistence
+
+### Running with persistent data volumes
+
+We can store data on persistent volumes, this way the installation remains intact across restarts. Assume that `/path/to/your/rabbitmq` is the persistent directory on the host.
+
+Use the following content for the `docker-compose.yml` file, then run `docker-compose up`.
+
+```yaml
+version: '2'
+services:
+ rabbitmq:
+ container_name: some-rabbitmq
+ image: marketplace.gcr.io/google/rabbitmq3
+ environment:
+ "RABBITMQ_ERLANG_COOKIE": "unique-erlang-cookie"
+ ports:
+ - '4369:4369'
+ - '5671:5671'
+ - '5672:5672'
+ - '25672:25672'
+ volumes:
+ - /path/to/your/rabbitmq:/var/lib/rabbitmq
+```
+
+Or you can use `docker run` directly:
+
+```shell
+docker run \
+ --name some-rabbitmq \
+ -e "RABBITMQ_ERLANG_COOKIE=unique-erlang-cookie" \
+ -p 4369:4369 \
+ -p 5671:5671 \
+ -p 5672:5672 \
+ -p 25672:25672 \
+ -v /path/to/your/rabbitmq:/var/lib/rabbitmq \
+ -d \
+ marketplace.gcr.io/google/rabbitmq3
+```
+
+# References
+
+## Ports
+
+These are the ports exposed by the container image.
+
+| **Port** | **Description** |
+|:---------|:----------------|
+| TCP 4369 | [`epmd` port](http://erlang.org/doc/man/epmd.html), a peer discovery service used by RabbitMQ nodes and CLI tools. |
+| TCP 5671 | Used by AMQP 0-9-1 and 1.0 clients with TLS. |
+| TCP 5672 | Used by AMQP 0-9-1 and 1.0 clients without TLS. |
+| TCP 25672 | Used by Erlang distribution for inter-node and CLI tools communication. This port is allocated from a dynamic range. By default, it takes the value of AMQP port plus 20000 (5672 + 20000), or 25672. |
+
+## Environment Variables
+
+These are the environment variables understood by the container image.
+
+| **Variable** | **Description** |
+|:-------------|:----------------|
+| RABBITMQ_ERLANG_COOKIE | Sets the shared secret Erlang cookie used for authenticating other nodes and clients. For two nodes, or a node and a client, to communicate with each other, they must have the same Erlang cookie. |
+| RABBITMQ_DEFAULT_USER | Sets the default user name. Used in conjunction with `RABBITMQ_DEFAULT_PASS`.
Defaults to `guest`. |
+| RABBITMQ_DEFAULT_PASS | Sets the default user password. Used in conjunction with `RABBITMQ_DEFAULT_USER`.
Defaults to `guest`. |
+
+## Volumes
+
+These are the filesystem paths used by the container image.
+
+| **Path** | **Description** |
+|:---------|:----------------|
+| /var/lib/rabbitmq | All RabbitMQ files are installed here. |
diff --git a/versions.yaml b/versions.yaml
index 4295286..2495892 100644
--- a/versions.yaml
+++ b/versions.yaml
@@ -42,22 +42,3 @@ versions:
- latest
excludeTests:
- tests/functional_tests/3_7_functional_test.yaml
-- dir: 3/debian10/3.7
- from: marketplace.gcr.io/google/debian10
- templateSubDir: 3.7
- packages:
- otp:
- sha256: 79657e07aee0cc174f89c1bd7d8d251295f64144cced6ea72b98777ec6a6660d
- version: 22.3.4
- rabbitmq:
- sha512: 75e766bb356f5ed75f948cfd9cdd9ad1e68ac6a8ded8571687e2f234396bf52c53bf985d8d688f734ddf88155915036c63399acf0ec773388bdb9e94a4fac8e7
- version: 3.7.28
- repo: rabbitmq3
- tags:
- - 3.7.28-debian10
- - 3.7-debian10
- - '3.7.28'
- - '3.7'
- excludeTests:
- - tests/functional_tests/functional_test.yaml
-