Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Couchbase Server CE+EE to 7.6.0 #16433

Merged
merged 1 commit into from
Mar 25, 2024

Conversation

udkyo
Copy link
Contributor

@udkyo udkyo commented Mar 18, 2024

Adding new Couchbase Server release.

@udkyo udkyo requested a review from a team as a code owner March 18, 2024 16:17

This comment has been minimized.

@yosifkit
Copy link
Member

In Docker Official Images, we try hard to avoid multi-stage builds in almost every instance. Even though we maintain the gcc image, I'm not sure I'd recommend using it to build binaries compatible with a specific libc of a distribution; it'd be better to just use the gcc package from the distribution. So, we would rather that it be just a regular non-multistage build (i.e., apt install, build, and apt purge all in one RUN). It will help make it clearer for users viewing docker history where things came from. See also the FAQ section on multi-stage builds. You also should pin the git clone to get a specific commit id so it has better reproducibility.

I am mildly concerned about using a custom fork of runit. Would it confuse users when they use other images containing the same tools? 🤔

@ceejatec
Copy link
Contributor

To your last point, IMHO it's a non-goal for a container image to provide tools for general use. This container image is intended to host Couchbase Server, and it contains the necessary tools for that. Users should not generally be running their own programs inside the container at all, let alone depending on the specific behaviour of the 'init' program in use.

As for the use of the gcc image, I think I understand your concern. I believe I can modify it to be a single-stage build, although it'll be difficult to ensure that it doesn't end up with significant additional "cruft" in that runit build layer since we'll need to remove all of gcc and anything it brought in. It would be far easier and safer to make it a multi-stage build and just ensure we use the same FROM line for both stages, rather than using the separate "gcc" image. What's the reasoning behind avoid multi-stage builds in general?

All that said, this is the Dockerfile we've internally tested with Server 7.6.0, which is now released, and it's the Dockerfile that was used to create our "unofficial" couchbase/server:7.6.0 image. Making either of those changes will take at least a few days to implement and validate, and we're already nearly 48 hours past our 7.6.0 release date. Would it be acceptable to commit this version for 7.6.0, with the understanding that we'll correct the issues for 7.6.1?

I also agree that we should check out a specific SHA of our runit fork; I'll make that change in the follow-up Dockerfile as well.

@whalelines
Copy link
Contributor

What's the reasoning behind avoid multi-stage builds in general?

@ceejatec that is addressed in the FAQ @yosifkit pointed you to:

See also the FAQ section on multi-stage builds.

@ceejatec
Copy link
Contributor

@whalelines @yosifkit Example #2 of the "likely acceptable" use cases under the FAQ entry seems to exactly match our scenario.

This comment has been minimized.

@ceejatec
Copy link
Contributor

@yosifkit @whalelines I've pushed an update which includes the changes you suggested; please re-review.

Copy link

Diff for d042637:
diff --git a/_bashbrew-cat b/_bashbrew-cat
index a6b197e..5b8bf46 100644
--- a/_bashbrew-cat
+++ b/_bashbrew-cat
@@ -2,29 +2,39 @@ Maintainers: Couchbase Docker Team <docker@couchbase.com> (@cb-robot)
 GitRepo: https://github.com/couchbase/docker
 
 Tags: 7.0.5, enterprise-7.0.5
-GitCommit: ca816b6ffa5c36007bd4b3386ec24df081a00ea0
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: enterprise/couchbase-server/7.0.5
 
 Tags: 7.1.6, enterprise-7.1.6
 Architectures: amd64, arm64v8
-GitCommit: 3b28b68159ef2e9007a1493c17e768fbb4837358
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: enterprise/couchbase-server/7.1.6
 
-Tags: 7.2.4, enterprise-7.2.4, enterprise, latest
+Tags: 7.2.4, enterprise-7.2.4
 Architectures: amd64, arm64v8
-GitCommit: 24bae6aab6520dc97c362b56150db9658d041873
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: enterprise/couchbase-server/7.2.4
 
+Tags: 7.6.0, enterprise-7.6.0, enterprise, latest
+Architectures: amd64, arm64v8
+GitCommit: 203e62f36ce055be75955e073d0000249bf2c040
+Directory: enterprise/couchbase-server/7.6.0
+
 Tags: community-7.0.2
-GitCommit: aec4494ab5280caf567997d72714f57572a6315b
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: community/couchbase-server/7.0.2
 
 Tags: community-7.1.1
 Architectures: amd64, arm64v8
-GitCommit: bfbb82c084ca3ada6252afbbcb3ca94bb65f1e58
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: community/couchbase-server/7.1.1
 
-Tags: community-7.2.4, community
+Tags: community-7.2.4
 Architectures: amd64, arm64v8
-GitCommit: 9fc1cf481a8fe8e78d7539cee3a25cdbaa7b5e1e
+GitCommit: 8205e18d139813ac3f72f6dfef9ee9ffbc382e0f
 Directory: community/couchbase-server/7.2.4
+
+Tags: community-7.6.0, community
+Architectures: amd64, arm64v8
+GitCommit: 7148bc241bcdcf8961c34f8adf76ebfb2860ed83
+Directory: community/couchbase-server/7.6.0
diff --git a/_bashbrew-list b/_bashbrew-list
index 7a0e9cf..f0e09a7 100644
--- a/_bashbrew-list
+++ b/_bashbrew-list
@@ -1,12 +1,15 @@
 couchbase:7.0.5
 couchbase:7.1.6
 couchbase:7.2.4
+couchbase:7.6.0
 couchbase:community
 couchbase:community-7.0.2
 couchbase:community-7.1.1
 couchbase:community-7.2.4
+couchbase:community-7.6.0
 couchbase:enterprise
 couchbase:enterprise-7.0.5
 couchbase:enterprise-7.1.6
 couchbase:enterprise-7.2.4
+couchbase:enterprise-7.6.0
 couchbase:latest
diff --git a/couchbase_community/Dockerfile b/couchbase_community-7.2.4/Dockerfile
similarity index 100%
copy from couchbase_community/Dockerfile
copy to couchbase_community-7.2.4/Dockerfile
diff --git a/couchbase_community-7.0.2/scripts/dummy.sh b/couchbase_community-7.2.4/scripts/dummy.sh
similarity index 100%
copy from couchbase_community-7.0.2/scripts/dummy.sh
copy to couchbase_community-7.2.4/scripts/dummy.sh
diff --git a/couchbase_community-7.1.1/scripts/entrypoint.sh b/couchbase_community-7.2.4/scripts/entrypoint.sh
similarity index 100%
copy from couchbase_community-7.1.1/scripts/entrypoint.sh
copy to couchbase_community-7.2.4/scripts/entrypoint.sh
diff --git a/couchbase_community-7.1.1/scripts/run b/couchbase_community-7.2.4/scripts/run
similarity index 100%
copy from couchbase_community-7.1.1/scripts/run
copy to couchbase_community-7.2.4/scripts/run
diff --git a/couchbase_community/Dockerfile b/couchbase_community/Dockerfile
index 6d0407f..020c9d2 100644
--- a/couchbase_community/Dockerfile
+++ b/couchbase_community/Dockerfile
@@ -18,11 +18,25 @@ ARG CLEANUP_COMMAND="rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*"
 RUN set -x \
     && ${UPDATE_COMMAND} \
     && apt-get install -y -q wget tzdata \
-      lsof lshw sysstat net-tools numactl bzip2 runit \
+      lsof lshw sysstat net-tools numactl bzip2 \
     && ${CLEANUP_COMMAND}
 
-ARG CB_RELEASE_URL=https://packages.couchbase.com/releases/7.2.4
-ARG CB_PACKAGE=couchbase-server-community_7.2.4-linux_@@ARCH@@.deb
+# Add runit
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y gcc git make \
+    && cd /usr/src \
+    && git clone https://github.com/couchbasedeps/runit \
+    && cd runit \
+    && git checkout edb631449d89d5b452a5992c6ffaa1e384fea697 \
+    && ./package/compile \
+    && cp ./command/* /sbin/ \
+    && apt-get purge -y --autoremove gcc git make \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/* /usr/src/runit
+
+ARG CB_RELEASE_URL=https://packages.couchbase.com/releases/7.6.0
+ARG CB_PACKAGE=couchbase-server-community_7.6.0-linux_@@ARCH@@.deb
 ARG CB_SKIP_CHECKSUM=false
 ENV PATH=$PATH:/opt/couchbase/bin:/opt/couchbase/bin/tools:/opt/couchbase/bin/install
 
@@ -36,10 +50,10 @@ RUN set -x \
     && dpkgArch="$(dpkg --print-architecture)" \
     && case "${dpkgArch}" in \
          'arm64') \
-           CB_SHA256=58d7299088933bb866af1faa917236abf226ef2c0cdbfaf789de124984f7a018 \
+           CB_SHA256=9fee2723a019157fa6b696d5bfc011440ae96347430087f67c67a73afc1a2518 \
            ;; \
          'amd64') \
-           CB_SHA256=94ffff0e3f7d0b4dc5c227815ca76c3300d39cae491085f01ff8dbfa5bd98054 \
+           CB_SHA256=b6b86779b16bc5c83e86220f40c8e230cf9650f0a7deb7e190997a93d9a50316 \
            ;; \
        esac \
     && CB_PACKAGE=$(echo ${CB_PACKAGE} | sed -e "s/@@ARCH@@/${dpkgArch}/") \
@@ -54,13 +68,13 @@ RUN set -x \
 # Update VARIANT.txt to indicate we're running in our Docker image
 RUN sed -i -e '1 s/$/\/docker/' /opt/couchbase/VARIANT.txt
 
-# Add runit script for couchbase-server
+# Add runit service script for couchbase-server
 COPY scripts/run /etc/service/couchbase-server/run
 RUN set -x \
-    && mkdir -p /etc/runit/runsvdir/default/couchbase-server/supervise \
+    && mkdir -p /etc/service/couchbase-server/supervise \
     && chown -R couchbase:couchbase \
                 /etc/service \
-                /etc/runit/runsvdir/default/couchbase-server/supervise
+                /etc/service/couchbase-server/supervise
 
 # Add dummy script for commands invoked by cbcollect_info that
 # make no sense in a Docker container
diff --git a/couchbase_community/scripts/entrypoint.sh b/couchbase_community/scripts/entrypoint.sh
index 73049d6..76f7ca9 100755
--- a/couchbase_community/scripts/entrypoint.sh
+++ b/couchbase_community/scripts/entrypoint.sh
@@ -53,7 +53,7 @@ overridePort "ssl_proxy_upstream_port"
     fi
     echo "Starting Couchbase Server -- Web UI available at http://<ip>:$restPortValue"
     echo "and logs available in /opt/couchbase/var/lib/couchbase/logs"
-    exec runsvdir -P /etc/service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'
+    exec runsvdir -P /etc/service
 }
 
 exec "$@"
diff --git a/couchbase_latest/Dockerfile b/couchbase_enterprise-7.2.4/Dockerfile
similarity index 100%
copy from couchbase_latest/Dockerfile
copy to couchbase_enterprise-7.2.4/Dockerfile
diff --git a/couchbase_community-7.0.2/scripts/dummy.sh b/couchbase_enterprise-7.2.4/scripts/dummy.sh
similarity index 100%
copy from couchbase_community-7.0.2/scripts/dummy.sh
copy to couchbase_enterprise-7.2.4/scripts/dummy.sh
diff --git a/couchbase_community-7.1.1/scripts/entrypoint.sh b/couchbase_enterprise-7.2.4/scripts/entrypoint.sh
similarity index 100%
copy from couchbase_community-7.1.1/scripts/entrypoint.sh
copy to couchbase_enterprise-7.2.4/scripts/entrypoint.sh
diff --git a/couchbase_community-7.1.1/scripts/run b/couchbase_enterprise-7.2.4/scripts/run
similarity index 100%
copy from couchbase_community-7.1.1/scripts/run
copy to couchbase_enterprise-7.2.4/scripts/run
diff --git a/couchbase_latest/Dockerfile b/couchbase_latest/Dockerfile
index 2f3c25d..bb2b10e 100644
--- a/couchbase_latest/Dockerfile
+++ b/couchbase_latest/Dockerfile
@@ -18,11 +18,25 @@ ARG CLEANUP_COMMAND="rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*"
 RUN set -x \
     && ${UPDATE_COMMAND} \
     && apt-get install -y -q wget tzdata \
-      lsof lshw sysstat net-tools numactl bzip2 runit \
+      lsof lshw sysstat net-tools numactl bzip2 \
     && ${CLEANUP_COMMAND}
 
-ARG CB_RELEASE_URL=https://packages.couchbase.com/releases/7.2.4
-ARG CB_PACKAGE=couchbase-server-enterprise_7.2.4-linux_@@ARCH@@.deb
+# Add runit
+RUN set -x \
+    && apt-get update \
+    && apt-get install -y gcc git make \
+    && cd /usr/src \
+    && git clone https://github.com/couchbasedeps/runit \
+    && cd runit \
+    && git checkout edb631449d89d5b452a5992c6ffaa1e384fea697 \
+    && ./package/compile \
+    && cp ./command/* /sbin/ \
+    && apt-get purge -y --autoremove gcc git make \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/* /usr/src/runit
+
+ARG CB_RELEASE_URL=https://packages.couchbase.com/releases/7.6.0
+ARG CB_PACKAGE=couchbase-server-enterprise_7.6.0-linux_@@ARCH@@.deb
 ARG CB_SKIP_CHECKSUM=false
 ENV PATH=$PATH:/opt/couchbase/bin:/opt/couchbase/bin/tools:/opt/couchbase/bin/install
 
@@ -36,10 +50,10 @@ RUN set -x \
     && dpkgArch="$(dpkg --print-architecture)" \
     && case "${dpkgArch}" in \
          'arm64') \
-           CB_SHA256=c675d9e2a355cca833c9c12f85585e92a4d1cd95858d79e958b507f9ba1a4349 \
+           CB_SHA256=1512430a602c67d53886502d758bf95b25b9faab066d08292a8eb496e9c08492 \
            ;; \
          'amd64') \
-           CB_SHA256=0f5edf6c011df25e172ae54c6bbe5f83be6a3c24e4e23b25e77d5079262c30ca \
+           CB_SHA256=fe94419fff0c1b9176292b44ab8715fd0e8e48872e76330cc6ec6f3fa07b3966 \
            ;; \
        esac \
     && CB_PACKAGE=$(echo ${CB_PACKAGE} | sed -e "s/@@ARCH@@/${dpkgArch}/") \
@@ -54,13 +68,13 @@ RUN set -x \
 # Update VARIANT.txt to indicate we're running in our Docker image
 RUN sed -i -e '1 s/$/\/docker/' /opt/couchbase/VARIANT.txt
 
-# Add runit script for couchbase-server
+# Add runit service script for couchbase-server
 COPY scripts/run /etc/service/couchbase-server/run
 RUN set -x \
-    && mkdir -p /etc/runit/runsvdir/default/couchbase-server/supervise \
+    && mkdir -p /etc/service/couchbase-server/supervise \
     && chown -R couchbase:couchbase \
                 /etc/service \
-                /etc/runit/runsvdir/default/couchbase-server/supervise
+                /etc/service/couchbase-server/supervise
 
 # Add dummy script for commands invoked by cbcollect_info that
 # make no sense in a Docker container
diff --git a/couchbase_latest/scripts/entrypoint.sh b/couchbase_latest/scripts/entrypoint.sh
index 73049d6..76f7ca9 100755
--- a/couchbase_latest/scripts/entrypoint.sh
+++ b/couchbase_latest/scripts/entrypoint.sh
@@ -53,7 +53,7 @@ overridePort "ssl_proxy_upstream_port"
     fi
     echo "Starting Couchbase Server -- Web UI available at http://<ip>:$restPortValue"
     echo "and logs available in /opt/couchbase/var/lib/couchbase/logs"
-    exec runsvdir -P /etc/service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'
+    exec runsvdir -P /etc/service
 }
 
 exec "$@"

Relevant Maintainers:

@yosifkit yosifkit merged commit 977bd77 into docker-library:master Mar 25, 2024
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants