From f9568ec53d1887b2b87c64b50bf7a3e52c2ff6c8 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Sat, 4 Oct 2025 23:37:40 +0700 Subject: [PATCH] Add Couchbase 2.5 and generic Docker images Introduces a new Docker image for Couchbase 2.5, including a Dockerfile, entrypoint, run scripts, and a dummy script for unsupported commands. Updates the 2.5 image to install libssl0.9.8 and modifies the CMD to use '-noinput'. Adds a README with credits and updates the GitHub Actions workflow to download the new dependency. --- .github/workflows/publish-couchbase-2.5.yml | 1 + README.md | 6 ++ couchbase-2.5/Dockerfile | 6 +- couchbase/Dockerfile | 76 +++++++++++++++++++++ couchbase/scripts/dummy.sh | 3 + couchbase/scripts/entrypoint.sh | 59 ++++++++++++++++ couchbase/scripts/run | 19 ++++++ 7 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 couchbase/Dockerfile create mode 100644 couchbase/scripts/dummy.sh create mode 100644 couchbase/scripts/entrypoint.sh create mode 100644 couchbase/scripts/run diff --git a/.github/workflows/publish-couchbase-2.5.yml b/.github/workflows/publish-couchbase-2.5.yml index f8f18ff..323f210 100644 --- a/.github/workflows/publish-couchbase-2.5.yml +++ b/.github/workflows/publish-couchbase-2.5.yml @@ -27,6 +27,7 @@ jobs: wget https://launchpadlibrarian.net/329563761/libtasn1-3_2.10-1ubuntu1.6_amd64.deb wget https://launchpadlibrarian.net/311120336/libgnutls26_2.12.14-5ubuntu3.14_amd64.deb wget https://launchpadlibrarian.net/320724516/librtmp0_2.4~20110711.gitc28f1bab-1ubuntu0.1_amd64.deb + wget https://launchpadlibrarian.net/178402337/libssl0.9.8_0.9.8o-7ubuntu3.2_amd64.deb wget https://packages.couchbase.com/releases/2.5.2/couchbase-server-enterprise_2.5.2_x86_64.deb - name: Log in to GitHub Container Registry diff --git a/README.md b/README.md new file mode 100644 index 0000000..f18a3ef --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Docker Images + +## Credits: + +### Couchbase +- https://github.com/couchbase/docker/tree/couchbase-server-4.0.0-community diff --git a/couchbase-2.5/Dockerfile b/couchbase-2.5/Dockerfile index 30f06fb..05d4ce8 100644 --- a/couchbase-2.5/Dockerfile +++ b/couchbase-2.5/Dockerfile @@ -12,6 +12,8 @@ RUN dpkg -i /tmp/libgpg-error0_*.deb && \ dpkg -i /tmp/libtasn1-3_*.deb && \ dpkg -i /tmp/libgnutls26_*.deb && \ dpkg -i /tmp/librtmp0_*.deb && \ + dpkg -i /tmp/libssl0.9.8_*.deb && \ + export INSTALL_DONT_START_SERVER=1 && \ dpkg -i /tmp/couchbase-server-enterprise_*.deb && \ rm /tmp/*.deb @@ -22,6 +24,4 @@ RUN dpkg -i /tmp/libgpg-error0_*.deb && \ # 11211: Client interface (proxy) EXPOSE 8091 8092 11210 11211 -VOLUME /opt/couchbase/var - -CMD ["/opt/couchbase/bin/couchbase-server"] +CMD ["/opt/couchbase/bin/couchbase-server", "--", "-noinput"] diff --git a/couchbase/Dockerfile b/couchbase/Dockerfile new file mode 100644 index 0000000..42a0982 --- /dev/null +++ b/couchbase/Dockerfile @@ -0,0 +1,76 @@ +FROM ubuntu:14.04 + +MAINTAINER Couchbase Docker Team + +# Install dependencies: +# runit: for container process management +# wget: for downloading .deb +# python-httplib2: used by CLI tools +# chrpath: for fixing curl, below +# tzdata: timezone info used by some N1QL functions +# Additional dependencies for system commands used by cbcollect_info: +# lsof: lsof +# lshw: lshw +# sysstat: iostat, sar, mpstat +# net-tools: ifconfig, arp, netstat +# numactl: numactl +RUN apt-get update && \ + apt-get install -yq runit wget python-httplib2 chrpath tzdata \ + lsof lshw sysstat net-tools numactl && \ + apt-get autoremove && apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +ARG CB_VERSION=2.5.2 +ARG CB_RELEASE_URL=https://packages.couchbase.com/releases +ARG CB_PACKAGE=couchbase-server-enterprise_2.5.2_x86_64.deb +# ARG CB_SHA256=e275717da0c22efb846b397a1ffeaf63a21ec91e4e481efe3b59de0a0d530982 + +ENV PATH=$PATH:/opt/couchbase/bin:/opt/couchbase/bin/tools:/opt/couchbase/bin/install + +# Create Couchbase user with UID 1000 (necessary to match default +# boot2docker UID) +RUN groupadd -g 1000 couchbase && useradd couchbase -u 1000 -g couchbase -M + +# Install couchbase +RUN export INSTALL_DONT_START_SERVER=1 && \ + wget -N $CB_RELEASE_URL/$CB_VERSION/$CB_PACKAGE && \ + # echo "$CB_SHA256 $CB_PACKAGE" | sha256sum -c - && \ + dpkg -i ./$CB_PACKAGE && rm -f ./$CB_PACKAGE + +# Add runit script for couchbase-server +COPY scripts/run /etc/service/couchbase-server/run +RUN chown -R couchbase:couchbase /etc/service + +# Add dummy script for commands invoked by cbcollect_info that +# make no sense in a Docker container +COPY scripts/dummy.sh /usr/local/bin/ +RUN ln -s dummy.sh /usr/local/bin/iptables-save && \ + ln -s dummy.sh /usr/local/bin/lvdisplay && \ + ln -s dummy.sh /usr/local/bin/vgdisplay && \ + ln -s dummy.sh /usr/local/bin/pvdisplay + +# Fix curl RPATH +RUN chrpath -r '$ORIGIN/../lib' /opt/couchbase/bin/curl + +# Add bootstrap script +COPY scripts/entrypoint.sh / +ENTRYPOINT ["/entrypoint.sh"] +CMD ["couchbase-server"] + +# 8091: Couchbase Web console, REST/HTTP interface +# 8092: Views, queries, XDCR +# 8093: Query services (4.0+) +# 8094: Full-text Search (4.5+) +# 8095: Analytics (5.5+) +# 8096: Eventing (5.5+) +# 11207: Smart client library data node access (SSL) +# 11210: Smart client library/moxi data node access +# 11211: Legacy non-smart client library data node access +# 18091: Couchbase Web console, REST/HTTP interface (SSL) +# 18092: Views, query, XDCR (SSL) +# 18093: Query services (SSL) (4.0+) +# 18094: Full-text Search (SSL) (4.5+) +# 18095: Analytics (SSL) (5.5+) +# 18096: Eventing (SSL) (5.5+) +EXPOSE 8091 8092 8093 8094 8095 8096 11207 11210 11211 18091 18092 18093 18094 18095 18096 +VOLUME /opt/couchbase/var diff --git a/couchbase/scripts/dummy.sh b/couchbase/scripts/dummy.sh new file mode 100644 index 0000000..1c0c100 --- /dev/null +++ b/couchbase/scripts/dummy.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo "Running in Docker container - $0 not available" diff --git a/couchbase/scripts/entrypoint.sh b/couchbase/scripts/entrypoint.sh new file mode 100644 index 0000000..25dea8d --- /dev/null +++ b/couchbase/scripts/entrypoint.sh @@ -0,0 +1,59 @@ +#!/bin/bash +set -e + +staticConfigFile=/opt/couchbase/etc/couchbase/static_config +restPortValue=8091 + +# see https://developer.couchbase.com/documentation/server/current/install/install-ports.html +function overridePort() { + portName=$1 + portNameUpper=$(echo $portName | awk '{print toupper($0)}') + portValue=${!portNameUpper} + + # only override port if value available AND not already contained in static_config + if [ "$portValue" != "" ]; then + if grep -Fq "{${portName}," ${staticConfigFile} + then + echo "Don't override port ${portName} because already available in $staticConfigFile" + else + echo "Override port '$portName' with value '$portValue'" + echo "{$portName, $portValue}." >> ${staticConfigFile} + + if [ ${portName} == "rest_port" ]; then + restPortValue=${portValue} + fi + fi + fi +} + +overridePort "rest_port" +overridePort "mccouch_port" +overridePort "memcached_port" +overridePort "query_port" +overridePort "ssl_query_port" +overridePort "fts_http_port" +overridePort "moxi_port" +overridePort "ssl_rest_port" +overridePort "ssl_capi_port" +overridePort "ssl_proxy_downstream_port" +overridePort "ssl_proxy_upstream_port" + + +[[ "$1" == "couchbase-server" ]] && { + + if [ "$(whoami)" = "couchbase" ]; then + # Ensure that /opt/couchbase/var is owned by user 'couchbase' and + # is writable + if [ ! -w /opt/couchbase/var -o \ + $(find /opt/couchbase/var -maxdepth 0 -printf '%u') != "couchbase" ]; then + echo "/opt/couchbase/var is not owned and writable by UID 1000" + echo "Aborting as Couchbase Server will likely not run" + exit 1 + fi + fi + echo "Starting Couchbase Server -- Web UI available at http://:$restPortValue" + echo "and logs available in /opt/couchbase/var/lib/couchbase/logs" + exec /usr/sbin/runsvdir-start +} + +exec "$@" diff --git a/couchbase/scripts/run b/couchbase/scripts/run new file mode 100644 index 0000000..be2e6fe --- /dev/null +++ b/couchbase/scripts/run @@ -0,0 +1,19 @@ +#!/bin/sh + +exec 2>&1 + +# Create directories where couchbase stores its data +cd /opt/couchbase +mkdir -p var/lib/couchbase \ + var/lib/couchbase/config \ + var/lib/couchbase/data \ + var/lib/couchbase/stats \ + var/lib/couchbase/logs \ + var/lib/moxi + +chown -R couchbase:couchbase var +if [ $(whoami) = "couchbase" ]; then + exec /opt/couchbase/bin/couchbase-server -- -kernel global_enable_tracing false -noinput +else + exec chpst -ucouchbase /opt/couchbase/bin/couchbase-server -- -kernel global_enable_tracing false -noinput +fi