From 354b1764f2f47286ce26d4710231736879dd746b Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Wed, 5 Jun 2024 15:13:17 -0400 Subject: [PATCH 1/9] Correct user info for CouchDB image; remove unneded cert/proxy hooks --- docker/couchdb/Dockerfile | 14 ++++---------- docker/couchdb/run.sh | 29 +++-------------------------- 2 files changed, 7 insertions(+), 36 deletions(-) diff --git a/docker/couchdb/Dockerfile b/docker/couchdb/Dockerfile index 6d3376268..6a1ac10d4 100644 --- a/docker/couchdb/Dockerfile +++ b/docker/couchdb/Dockerfile @@ -6,11 +6,14 @@ RUN pip install CMSCouchapp ENV WDIR=/data ENV USER=_couchdb +ENV UGID=100022 RUN mkdir -p /etc/grid-security # add new user -RUN useradd ${USER} && install -o ${USER} -d ${WDIR} +RUN groupadd -g ${UGID} ${USER} +RUN useradd -m ${USER} -u ${UGID} -g ${UGID} +RUN install -o ${USER} -d ${WDIR} # add user to sudoers file RUN echo "%$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # switch to user @@ -20,14 +23,6 @@ USER ${USER} RUN mkdir -p $WDIR WORKDIR ${WDIR} -# pass env variable to the build -ARG CMSK8S -ENV CMSK8S=$CMSK8S -ARG COUCH_USER -ENV COUCH_USER=$COUCH_USER -ARG COUCH_PASS -ENV COUCH_PASS=$COUCH_PASS - # get binary build of couchdb exporter RUN curl -ksLO https://github.com/gesellix/couchdb-prometheus-exporter/releases/download/v27.0.0/couchdb-prometheus-exporter_27.0.0_Linux_x86_64.tar.gz RUN tar xfz couchdb-prometheus-exporter_27.0.0_Linux_x86_64.tar.gz @@ -49,7 +44,6 @@ RUN mkdir -p /data/srv/current/config/couchdb \ && ln -s /etc/secrets/couch_creds /data/srv/current/auth/couchdb/couch_creds \ && ln -s /etc/secrets/local.ini /data/srv/current/config/couchdb/local.ini ADD manage /data/srv/current/config/couchdb/manage -ADD couchdb-logrotate.conf /data/srv/current/config/couchdb/couchdb-logrotate.conf ENV PATH="/opt/couchdb/bin:/usr/local/bin/:${PATH}" diff --git a/docker/couchdb/run.sh b/docker/couchdb/run.sh index a0f6ff718..00cd355ca 100755 --- a/docker/couchdb/run.sh +++ b/docker/couchdb/run.sh @@ -1,33 +1,10 @@ #!/bin/bash -srv=`echo $USER | sed -e "s,_,,g"` - -# overwrite host PEM files in /data/srv area -if [ -f /etc/secrets/robotkey.pem ]; then - sudo cp /etc/secrets/robotkey.pem /data/srv/current/auth/$srv/dmwm-service-key.pem - sudo cp /etc/secrets/robotcert.pem /data/srv/current/auth/$srv/dmwm-service-cert.pem - sudo chown $USER.$USER /data/srv/current/auth/$srv/dmwm-service-key.pem - sudo chown $USER.$USER /data/srv/current/auth/$srv/dmwm-service-cert.pem -fi +srv=$(echo $USER | sed -e "s,_,,g") if [ -f /etc/secrets/couch_creds ]; then export COUCH_CREDS=/etc/secrets/couch_creds fi -# overwrite proxy if it is present in /etc/proxy -if [ -f /etc/proxy/proxy ]; then - export X509_USER_PROXY=/etc/proxy/proxy - mkdir -p /data/srv/state/$srv/proxy - if [ -f /data/srv/state/$srv/proxy/proxy.cert ]; then - rm /data/srv/state/$srv/proxy/proxy.cert - fi - ln -s /etc/proxy/proxy /data/srv/state/$srv/proxy/proxy.cert - mkdir -p /data/srv/current/auth/proxy - if [ -f /data/srv/current/auth/proxy/proxy ]; then - rm /data/srv/current/auth/proxy/proxy - fi - ln -s /etc/proxy/proxy /data/srv/current/auth/proxy/proxy -fi - # overwrite header-auth key file with one from secrets if [ -f /etc/secrets/hmac ]; then mkdir -p /data/srv/current/auth/wmcore-auth @@ -53,7 +30,7 @@ fi # use service configuration files from /etc/secrets if they are present cdir=/data/srv/current/config/$srv -files=`ls $cdir` +files=$(ls $cdir) for fname in $files; do if [ -f /etc/secrets/$fname ]; then if [ -f $cdir/$fname ]; then @@ -63,7 +40,7 @@ for fname in $files; do sudo chown $USER.$USER $cdir/$fname fi done -files=`ls /etc/secrets` +files=$(ls /etc/secrets) for fname in $files; do if [ ! -f $cdir/$fname ]; then sudo cp /etc/secrets/$fname /data/srv/current/auth/$srv/$fname From 485fa98f68721a7e0ac5e38b3652b387353f3e09 Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Thu, 6 Jun 2024 07:21:24 -0400 Subject: [PATCH 2/9] Script to run CouchDB container Fix scp command and add stagingarea mount point fix typo --- docker/couchdb/docker-run.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docker/couchdb/docker-run.sh diff --git a/docker/couchdb/docker-run.sh b/docker/couchdb/docker-run.sh new file mode 100644 index 000000000..443074245 --- /dev/null +++ b/docker/couchdb/docker-run.sh @@ -0,0 +1,32 @@ +#!/bin/bash +echo "Creating necessary directories on the host to persist logs and data" +mkdir -p /data/srv/logs/couchdb/ +mkdir -p /data/srv/state/couchdb/database/ +mkdir -p /data/srv/state/couchdb/stagingarea/ +sudo chown _couchdb /data/srv/logs/couchdb/ +sudo chown -R _couchdb /data/srv/state/couchdb + +# TODO FIXME: this section needs to be fixed with a new destination directory +secr_dir=/data/user/amaltaro/ +# export the NODE variable before running it +echo "Copying couch credentials from node: $NODE to $secr_dir" +scp $USER@$NODE:/data/srv/current/auth/couchdb/couch_creds $secr_dir +echo "Copying couch standard local.ini from node: $NODE to $secr_dir" +scp $USER@$NODE:/data/srv/current/config/couchdb/local.ini $secr_dir + +# Define command line arguments for docker run +dockerOpts=" \ +--detach \ +--network=host \ +--rm \ +--hostname=$(hostname -f) \ +--name=couchdb \ +--mount type=bind,source=$secr_dir,target=/etc/secrets \ +--mount type=bind,source=/data/srv/state/couchdb/database,target=/data/srv/state/couchdb/database \ +--mount type=bind,source=/data/srv/state/couchdb/stagingarea,target=/data/srv/state/couchdb/stagingarea \ +--mount type=bind,source=/data/srv/logs/couchdb,target=/data/srv/logs/couchdb \ +" + +couch_tag=3.2.2-alan1 +echo "Executing docker run for CouchDB tag: $couch_tag" +docker run $dockerOpts registry.cern.ch/cmsweb/couchdb:$couch_tag && docker logs -f couchdb \ No newline at end of file From 7753eb015b7c6be0735647ec7f3a273f991c2c0f Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Thu, 6 Jun 2024 23:27:18 -0400 Subject: [PATCH 3/9] Set variables; remove --rm option; create secrets dir Fix directory persmissions --- docker/couchdb/docker-run.sh | 42 +++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/docker/couchdb/docker-run.sh b/docker/couchdb/docker-run.sh index 443074245..bbb4e7e15 100644 --- a/docker/couchdb/docker-run.sh +++ b/docker/couchdb/docker-run.sh @@ -1,32 +1,40 @@ #!/bin/bash +COUCH_LOGS_DIR=/data/srv/logs/couchdb/ +COUCH_DB_DIR=/data/srv/state/couchdb/database/ +COUCH_STAGING_DIR=/data/srv/state/couchdb/stagingarea/ +COUCH_USR=_couchdb + echo "Creating necessary directories on the host to persist logs and data" -mkdir -p /data/srv/logs/couchdb/ -mkdir -p /data/srv/state/couchdb/database/ -mkdir -p /data/srv/state/couchdb/stagingarea/ -sudo chown _couchdb /data/srv/logs/couchdb/ -sudo chown -R _couchdb /data/srv/state/couchdb +mkdir -p $COUCH_LOGS_DIR +mkdir -p $COUCH_DB_DIR +mkdir -p $COUCH_STAGING_DIR +sudo chown $COUCH_USR $COUCH_LOGS_DIR +sudo chown -R $COUCH_USR $COUCH_DB_DIR/.. + +# Define directory to store credentials and standard configuration +COUCH_SECR_DIR=/data/srv/auth/couchdb/ +echo "Creating directory to store credentials and local.ini under: $COUCH_SECR_DIR" +mkdir -p $COUCH_SECR_DIR -# TODO FIXME: this section needs to be fixed with a new destination directory -secr_dir=/data/user/amaltaro/ # export the NODE variable before running it -echo "Copying couch credentials from node: $NODE to $secr_dir" -scp $USER@$NODE:/data/srv/current/auth/couchdb/couch_creds $secr_dir -echo "Copying couch standard local.ini from node: $NODE to $secr_dir" -scp $USER@$NODE:/data/srv/current/config/couchdb/local.ini $secr_dir +echo "Copying couch credentials from node: $NODE to $COUCH_SECR_DIR" +scp $USER@$NODE:/data/srv/current/auth/couchdb/couch_creds $COUCH_SECR_DIR +echo "Copying couch standard local.ini from node: $NODE to $COUCH_SECR_DIR" +scp $USER@$NODE:/data/srv/current/config/couchdb/local.ini $COUCH_SECR_DIR +sudo chown -R $COUCH_USR:zh $COUCH_SECR_DIR # Define command line arguments for docker run dockerOpts=" \ --detach \ --network=host \ ---rm \ --hostname=$(hostname -f) \ --name=couchdb \ ---mount type=bind,source=$secr_dir,target=/etc/secrets \ ---mount type=bind,source=/data/srv/state/couchdb/database,target=/data/srv/state/couchdb/database \ ---mount type=bind,source=/data/srv/state/couchdb/stagingarea,target=/data/srv/state/couchdb/stagingarea \ ---mount type=bind,source=/data/srv/logs/couchdb,target=/data/srv/logs/couchdb \ +--mount type=bind,source=$COUCH_SECR_DIR,target=/etc/secrets \ +--mount type=bind,source=$COUCH_DB_DIR,target=$COUCH_DB_DIR \ +--mount type=bind,source=$COUCH_STAGING_DIR,target=$COUCH_STAGING_DIR \ +--mount type=bind,source=$COUCH_LOGS_DIR,target=$COUCH_LOGS_DIR \ " -couch_tag=3.2.2-alan1 +couch_tag=3.2.2-v6 echo "Executing docker run for CouchDB tag: $couch_tag" docker run $dockerOpts registry.cern.ch/cmsweb/couchdb:$couch_tag && docker logs -f couchdb \ No newline at end of file From 8ac4210367ae71cbc1a8070a450978e0c244b239 Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Fri, 7 Jun 2024 08:07:38 -0400 Subject: [PATCH 4/9] Remove scp from other node --- docker/couchdb/docker-run.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docker/couchdb/docker-run.sh b/docker/couchdb/docker-run.sh index bbb4e7e15..6c0fcdbba 100644 --- a/docker/couchdb/docker-run.sh +++ b/docker/couchdb/docker-run.sh @@ -15,12 +15,6 @@ sudo chown -R $COUCH_USR $COUCH_DB_DIR/.. COUCH_SECR_DIR=/data/srv/auth/couchdb/ echo "Creating directory to store credentials and local.ini under: $COUCH_SECR_DIR" mkdir -p $COUCH_SECR_DIR - -# export the NODE variable before running it -echo "Copying couch credentials from node: $NODE to $COUCH_SECR_DIR" -scp $USER@$NODE:/data/srv/current/auth/couchdb/couch_creds $COUCH_SECR_DIR -echo "Copying couch standard local.ini from node: $NODE to $COUCH_SECR_DIR" -scp $USER@$NODE:/data/srv/current/config/couchdb/local.ini $COUCH_SECR_DIR sudo chown -R $COUCH_USR:zh $COUCH_SECR_DIR # Define command line arguments for docker run From a41f54347068069b54770268620a528d32719ef5 Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Fri, 7 Jun 2024 09:28:33 -0400 Subject: [PATCH 5/9] added zh --- docker/couchdb/docker-run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/couchdb/docker-run.sh b/docker/couchdb/docker-run.sh index 6c0fcdbba..6eea81f8f 100644 --- a/docker/couchdb/docker-run.sh +++ b/docker/couchdb/docker-run.sh @@ -8,8 +8,8 @@ echo "Creating necessary directories on the host to persist logs and data" mkdir -p $COUCH_LOGS_DIR mkdir -p $COUCH_DB_DIR mkdir -p $COUCH_STAGING_DIR -sudo chown $COUCH_USR $COUCH_LOGS_DIR -sudo chown -R $COUCH_USR $COUCH_DB_DIR/.. +sudo chown $COUCH_USR:zh $COUCH_LOGS_DIR +sudo chown -R $COUCH_USR:zh $COUCH_DB_DIR/.. # Define directory to store credentials and standard configuration COUCH_SECR_DIR=/data/srv/auth/couchdb/ From ffb19657b8a768b5a03557bb97021006270fb28b Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Mon, 10 Jun 2024 18:25:15 -0400 Subject: [PATCH 6/9] Util script only needed for the migration Print sizes field too --- docker/couchdb/check_couchdb.py | 64 +++++++++++++++++++++++++++++++++ docker/couchdb/db_summary.py | 30 ++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 docker/couchdb/check_couchdb.py create mode 100644 docker/couchdb/db_summary.py diff --git a/docker/couchdb/check_couchdb.py b/docker/couchdb/check_couchdb.py new file mode 100644 index 000000000..c4e1c085b --- /dev/null +++ b/docker/couchdb/check_couchdb.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +""" +Script meant to be used in the CouchDB VM migration, providing commands that need to +be executed in the backend VMs. +""" +import os +import sys +import socket +import requests +from itertools import chain + +db_map = [{"src_node": "vocms0841", "target_node": "vocms0846", "db_names": ["workqueue", "workqueue_inbox"]}, + {"src_node": "vocms0842", "target_node": "vocms0847", "db_names": ["reqmgr_workload_cache", "reqmgr_config_cache", + "acdcserver", "reqmgr_auxiliary"]}, + {"src_node": "vocms0843", "target_node": "vocms0848", "db_names": ["wmstats", "wmstats_logdb", "workloadsummary"]}, + {"src_node": "vocms0844", "target_node": "vocms0849", "db_names": ["tier0_wmstats", "t0_workloadsummary", + "t0_request", "t0_logdb"]}] + +if len(sys.argv) != 3: + print(f"You need to provide a source and destination directory for the database shards.") + print(f"Example: python3 check_couchdb.py /data/srv/couch_bkp_vocms0841/shards /data/srv/state/couchdb/database/shards") + sys.exit(1) + +src_dir = sys.argv[1] +dest_dir = sys.argv[2] +print(f"Meant to copy files from {src_dir} to {dest_dir}\n") + +this_node = socket.gethostname() +all_dbs = [] +for item in db_map: + if item["target_node"] in this_node: + these_db = item["db_names"] + all_dbs.extend([db_name for db_name in item["db_names"]]) +print(f"Running on node: {socket.gethostname()}, responsible for databases: {these_db}") + +print(f"\n***** Summary of databases ****") +for db_name in all_dbs: + resp = requests.get(f'http://localhost:5984/{db_name}') + if resp.status_code >= 400: + print(f"Request failed with status code: {resp.status_code}") + else: + data = {} + for kname, kdata in resp.json().items(): + if kname in ["db_name", "doc_count", "doc_del_count", "sizes"]: + data[kname] = kdata + print(data) + +print(f"\n***** Databases to be overwritten ****") +print(f"The following databases will need to be overwritten: {these_db}.\nPlease run these commands:") +for shard_dir in os.listdir(dest_dir): + src_dir_shard = os.path.join(src_dir, shard_dir) + src_dir_content = os.listdir(src_dir_shard) + #print(f"Content of source directory {src_dir_shard}: {src_dir_content}") + dest_dir_shard = os.path.join(dest_dir, shard_dir) + dest_dir_content = os.listdir(dest_dir_shard) + #print(f"Content of destination directory {dest_dir_shard}: {dest_dir_content}") + for db_name in these_db: + for src_db in src_dir_content: + if db_name == src_db.split(".")[0]: + break + for dest_db in dest_dir_content: + if db_name == dest_db.split(".")[0]: + break + print(f"cp {os.path.join(src_dir_shard, src_db)} {os.path.join(dest_dir_shard, dest_db)}") diff --git a/docker/couchdb/db_summary.py b/docker/couchdb/db_summary.py new file mode 100644 index 000000000..8d1ec41d4 --- /dev/null +++ b/docker/couchdb/db_summary.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +""" +Script to list all databases in CouchDB and print a basic summary for each of them. +""" +import os +import sys +import socket +import requests +from itertools import chain + +# Fetch a list of databases +resp = requests.get(f'http://localhost:5984/_all_dbs') +if resp.status_code >= 400: + print(f"Failed to list databases: {resp.status_code}") +else: + all_dbs = resp.json() +print(f"Node contains the following databases: {all_dbs}") + + +print(f"\n***** Summary of databases ****") +for db_name in all_dbs: + resp = requests.get(f'http://localhost:5984/{db_name}') + if resp.status_code >= 400: + print(f"Request failed for db {db_name} with status code: {resp.status_code}") + else: + data = {} + for kname, kdata in resp.json().items(): + if kname in ["db_name", "doc_count", "doc_del_count", "sizes"]: + data[kname] = kdata + print(data) From 650d8d013cbe7a76ecbdd5ae669117be67d81155 Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Wed, 19 Jun 2024 15:52:54 -0400 Subject: [PATCH 7/9] update tag to stable --- docker/couchdb/docker-run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/couchdb/docker-run.sh b/docker/couchdb/docker-run.sh index 6eea81f8f..c7f44886e 100644 --- a/docker/couchdb/docker-run.sh +++ b/docker/couchdb/docker-run.sh @@ -29,6 +29,6 @@ dockerOpts=" \ --mount type=bind,source=$COUCH_LOGS_DIR,target=$COUCH_LOGS_DIR \ " -couch_tag=3.2.2-v6 +couch_tag=3.2.2-stable echo "Executing docker run for CouchDB tag: $couch_tag" docker run $dockerOpts registry.cern.ch/cmsweb/couchdb:$couch_tag && docker logs -f couchdb \ No newline at end of file From a9c851d8c349e416e16f62d107e054d9f759860e Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Wed, 19 Jun 2024 15:55:18 -0400 Subject: [PATCH 8/9] remove check_couchdb.py script --- docker/couchdb/check_couchdb.py | 64 --------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 docker/couchdb/check_couchdb.py diff --git a/docker/couchdb/check_couchdb.py b/docker/couchdb/check_couchdb.py deleted file mode 100644 index c4e1c085b..000000000 --- a/docker/couchdb/check_couchdb.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python -""" -Script meant to be used in the CouchDB VM migration, providing commands that need to -be executed in the backend VMs. -""" -import os -import sys -import socket -import requests -from itertools import chain - -db_map = [{"src_node": "vocms0841", "target_node": "vocms0846", "db_names": ["workqueue", "workqueue_inbox"]}, - {"src_node": "vocms0842", "target_node": "vocms0847", "db_names": ["reqmgr_workload_cache", "reqmgr_config_cache", - "acdcserver", "reqmgr_auxiliary"]}, - {"src_node": "vocms0843", "target_node": "vocms0848", "db_names": ["wmstats", "wmstats_logdb", "workloadsummary"]}, - {"src_node": "vocms0844", "target_node": "vocms0849", "db_names": ["tier0_wmstats", "t0_workloadsummary", - "t0_request", "t0_logdb"]}] - -if len(sys.argv) != 3: - print(f"You need to provide a source and destination directory for the database shards.") - print(f"Example: python3 check_couchdb.py /data/srv/couch_bkp_vocms0841/shards /data/srv/state/couchdb/database/shards") - sys.exit(1) - -src_dir = sys.argv[1] -dest_dir = sys.argv[2] -print(f"Meant to copy files from {src_dir} to {dest_dir}\n") - -this_node = socket.gethostname() -all_dbs = [] -for item in db_map: - if item["target_node"] in this_node: - these_db = item["db_names"] - all_dbs.extend([db_name for db_name in item["db_names"]]) -print(f"Running on node: {socket.gethostname()}, responsible for databases: {these_db}") - -print(f"\n***** Summary of databases ****") -for db_name in all_dbs: - resp = requests.get(f'http://localhost:5984/{db_name}') - if resp.status_code >= 400: - print(f"Request failed with status code: {resp.status_code}") - else: - data = {} - for kname, kdata in resp.json().items(): - if kname in ["db_name", "doc_count", "doc_del_count", "sizes"]: - data[kname] = kdata - print(data) - -print(f"\n***** Databases to be overwritten ****") -print(f"The following databases will need to be overwritten: {these_db}.\nPlease run these commands:") -for shard_dir in os.listdir(dest_dir): - src_dir_shard = os.path.join(src_dir, shard_dir) - src_dir_content = os.listdir(src_dir_shard) - #print(f"Content of source directory {src_dir_shard}: {src_dir_content}") - dest_dir_shard = os.path.join(dest_dir, shard_dir) - dest_dir_content = os.listdir(dest_dir_shard) - #print(f"Content of destination directory {dest_dir_shard}: {dest_dir_content}") - for db_name in these_db: - for src_db in src_dir_content: - if db_name == src_db.split(".")[0]: - break - for dest_db in dest_dir_content: - if db_name == dest_db.split(".")[0]: - break - print(f"cp {os.path.join(src_dir_shard, src_db)} {os.path.join(dest_dir_shard, dest_db)}") From 173c869d11489f969d46a36014ca98e550f09b85 Mon Sep 17 00:00:00 2001 From: Alan Malta Rodrigues Date: Wed, 19 Jun 2024 16:06:05 -0400 Subject: [PATCH 9/9] Update readme --- docker/couchdb/README.md | 59 +++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/docker/couchdb/README.md b/docker/couchdb/README.md index 91728f869..26e4fb36e 100644 --- a/docker/couchdb/README.md +++ b/docker/couchdb/README.md @@ -1,31 +1,28 @@ - - -### build image -docker build -t cmssw/couchdb . - -### list images -docker images - -### list of running containers -docker ps --no-trunc -aq - -### remove all running containers -docker rm -f `docker ps --no-trunc -aq` - -### run given image -docker run --rm -h `hostname -f` -v /tmp/vk:/etc/secrets -i -t cmssw/couchdb /bin/bash - -### remove existing image -docker rmi cmssw/couchdb - -### inspect running container -docker ps # find docker id -docker inspect | grep IPAddress - -### push image to docker.com -docker push cmssw/couchdb - -### references -https://stackoverflow.com/questions/18497688/run-a-docker-image-as-a-container#18498313 -https://stackoverflow.com/questions/17236796/how-to-remove-old-docker-containers#17237701 -http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/ +### CouchDB image construction +Image is built with the expected `_couchdb` user, also used to run the service. +* latest version has been tagged as `3.2.2-stable`. +* **configuration**: available under `/data/srv/auth/couchdb/`, +* **database**: both database and views are available under `/data/srv/state/couchdb/database/`. +* **couchapps**: couchapps libraries and code is available under `/data/srv/state/couchdb/stagingarea/`. +* **logs**: finally, service logs can be found at `/data/srv/logs/couchdb/`. + +### Run CouchDB container +Connect to the cmsweb backend VM with the cmsweb account and: +``` +cd /data/srv +curl https://raw.githubusercontent.com/dmwm/CMSKubernetes/ffb19657b8a768b5a03557bb97021006270fb28b/docker/couchdb/docker-run.sh > docker-run.sh +chmod +x docker-run.sh +./docker-run.sh +``` + +### Stop CouchDB container +Connect to the cmsweb backend VM with the cmsweb account and: +``` +docker stop couchdb +docker rm couchdb +``` + +### Checking status of CouchDB service +``` +docker exec -it couchdb sh -c "/data/srv/current/config/couchdb/manage status" +``` \ No newline at end of file