diff --git a/README.md b/README.md index e61dd88..8d534c5 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ My custom Docker images. Most of them are legacy packages that not be supported ### Couchbase-2.5 - https://docs.couchbase.com/couchbase-manual-2.5/cb-install/ -- https://github.com/couchbase/docker/tree/couchbase-server-4.0.0-community +- https://github.com/couchbase/docker/tree/a9e69006c4dae3d6b8aa4055436c83e9cd51d9e4/enterprise/couchbase-server/2.5.2 diff --git a/couchbase-2.5/Dockerfile b/couchbase-2.5/Dockerfile index a9760c0..1f6fb49 100644 --- a/couchbase-2.5/Dockerfile +++ b/couchbase-2.5/Dockerfile @@ -1,30 +1,77 @@ FROM ubuntu:12.04 -LABEL maintainer="Tien Nguyen Minh " +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 librtmp0 && \ + 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=27a79a65758023c34ed900e8ef8c54bab4a65f4c84b7c94359cba910800a4b19 -ENV DEBIAN_FRONTEND=noninteractive ENV PATH=$PATH:/opt/couchbase/bin:/opt/couchbase/bin/tools:/opt/couchbase/bin/install -RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://old-releases.ubuntu.com/ubuntu/|g' /etc/apt/sources.list && \ - sed -i 's|http://security.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list && \ - apt-get update -RUN apt-get install -y wget -RUN wget --no-check-certificate $CB_RELEASE_URL/$CB_VERSION/$CB_PACKAGE -RUN apt-get install -y libssl0.9.8 -RUN apt-get install -y librtmp0 +# 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 -RUN chown -R couchbase:couchbase /opt/couchbase/var -EXPOSE 8091 8092 11210 11211 +# 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 -USER couchbase - -CMD ["couchbase-server", "--", "-noinput"] diff --git a/couchbase-2.5/scripts/dummy.sh b/couchbase-2.5/scripts/dummy.sh new file mode 100644 index 0000000..0091b80 --- /dev/null +++ b/couchbase-2.5/scripts/dummy.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "Running in Docker container - $0 not available" + diff --git a/couchbase-2.5/scripts/entrypoint.sh b/couchbase-2.5/scripts/entrypoint.sh new file mode 100644 index 0000000..25dea8d --- /dev/null +++ b/couchbase-2.5/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-2.5/scripts/run b/couchbase-2.5/scripts/run new file mode 100644 index 0000000..be2e6fe --- /dev/null +++ b/couchbase-2.5/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