From 8d2acbe203d6905c51a28ebe81db7ac90d0df52d Mon Sep 17 00:00:00 2001 From: startxfr Date: Sun, 6 Dec 2015 21:02:28 +0100 Subject: initialize couchbase service container --- Services/couchbase/Dockerfile | 16 +++++ Services/couchbase/README.md | 117 ++++++++++++++++++++++++++++++++++ Services/couchbase/docker-compose.yml | 15 +++++ Services/couchbase/run.sh | 62 ++++++++++++++++++ 4 files changed, 210 insertions(+) create mode 100644 Services/couchbase/Dockerfile create mode 100644 Services/couchbase/README.md create mode 100644 Services/couchbase/docker-compose.yml create mode 100644 Services/couchbase/run.sh diff --git a/Services/couchbase/Dockerfile b/Services/couchbase/Dockerfile new file mode 100644 index 0000000..6568f53 --- /dev/null +++ b/Services/couchbase/Dockerfile @@ -0,0 +1,16 @@ +FROM startx/fedora +MAINTAINER Christophe LARUE + +USER root +RUN dnf -y install couchbase && \ + dnf clean all +ENV STARTUPLOG=/data/logs/couchbase/startup.log \ + LOG_PATH=/data/logs/couchbase +COPY *.sh /bin/ +RUN chmod 775 /bin/run.sh && \ + mkdir -p $LOG_PATH && \ + touch $STARTUPLOG + +EXPOSE 11211 +VOLUME [$LOG_PATH] +CMD ["/bin/run.sh"] \ No newline at end of file diff --git a/Services/couchbase/README.md b/Services/couchbase/README.md new file mode 100644 index 0000000..979a246 --- /dev/null +++ b/Services/couchbase/README.md @@ -0,0 +1,117 @@ +# Docker OS Images : COUCHBASE + +Simple container used to deliver distributed and low latency document oriented database +Run [couchbase daemon](https://www.couchbase.org/) under a container +based on [startx/fedora container](https://hub.docker.com/r/startx/fedora) + +| [![Build Status](https://travis-ci.org/startxfr/docker-images.svg)](https://travis-ci.org/startxfr/docker-images) | [Dockerhub Registry](https://hub.docker.com/r/startx/sv-couchbase/) | [Sources](https://github.com/startxfr/docker-images/Services/couchbase) | [STARTX Profile](https://github.com/startxfr) | +|-------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------------------------|-----------------------------------------------| + +## Available flavours + +* `:latest` : Fedora core 23 + couchbase 1.4.17 +* `:fc23` : Fedora core 23 + couchbase 1.4.17 +* `:centos7` : CentOS 7 + couchbase + +## Running from dockerhub registry + +* with `docker` you can run `docker run -it --name="service-couchbase" startx/sv-couchbase` from any docker host +* with `docker-compose` you can create a docker-compose.yml file with the following content +``` +service: + image: startx/sv-couchbase:latest + container_name: "service-couchbase" + environment: + CONTAINER_TYPE: "service" + CONTAINER_SERVICE: "couchbase" + CONTAINER_INSTANCE: "service-couchbase" + volumes: + - "/tmp/container/logs/couchbase:/data/logs/couchbase" +``` + +## Docker-compose in various situations + +* sample docker-compose.yml linked to host port 1000 +``` +service: + image: startx/sv-couchbase:latest + container_name: "service-couchbase" + environment: + CONTAINER_INSTANCE: "service-couchbase" + ports: + - "1000:11211" +``` +* sample docker-compose.yml with port exposed only to linked services +``` +service: + image: startx/sv-couchbase:latest + container_name: "service-couchbase" + environment: + CONTAINER_INSTANCE: "service-couchbase" + expose: + - "11211" +``` + +## Using this image in your own container + +You can use this Dockerfile template to start a new personalized container based on this container. Create a file named Dockerfile in your project directory and copy this content inside. See [docker guide](http://docs.docker.com/engine/reference/builder/) for instructions on how to use this file. + ``` +FROM startx/sv-couchbase:latest +#... your container specifications +CMD ["/bin/run.sh"] +``` + +## Environment variable + +| Variable | Type | Mandatory | Description | +|---------------------------|----------|-----------|--------------------------------------------------------------------------| +| CONTAINER_INSTANCE | `string` | `yes` | Container name. Should be uning to get fine grained log and application reporting +| CONTAINER_TYPE | `string` | `no` | Container family (os, service, application. could be enhanced +| CONTAINER_SERVICE | `string` | `no` | Define the type of service or application provided +| HOSTNAME | `auto` | `auto` | Container unique id automatically assigned by docker daemon at startup +| LOG_PATH | `auto` | `auto` | default set to /data/logs/couchbase and used as a volume mountpoint + +## Exposed port + +| Port | Description | +|-------|--------------------------------------------------------------------------| +| 11211 | standard couchbase network port used for key/value recovery + +## Exposed volumes + +| Container directory | Description | +|----------------------|--------------------------------------------------------------------------| +| /data/logs/couchbase | log directory used to record container and couchbase logs +| /data/couchbase | data directory served by couchbase. If empty will be filled with app on startup. In other case use content from mountpoint or data volumes + +## Testing the service + +access to the running couchbase daemon with `telnet localhost 11211; stats`. Change port and hostname according to your current configuration + +## For advanced users + +You want to use this container and code to build and create locally this container, follow theses instructions. + +This section will help you if you want to : +* Get latest version of this service container +* Enhance container content by adding instruction in Dockefile before build step + +You must have a working environment with the source code of this repository. Read and follow [how to setup your working environment](https://github.com/startxfr/docker-images#setup-your-working-environment-mandatory) to get a working directory. The following instructions assume you are at the top level of your working directory. + +### Build & run a container using `docker` + +1. Jump into the container directory with `cd Services/couchbase` +2. Build the container using `docker build -t sv-couchbase .` +3. Run this container + 1. Interactively with `docker run -p 11211:11211 -v /data/logs/couchbase -it sv-couchbase`. If you add a second parameter (like `/bin/bash`) to will run this command instead of the default entrypoint. Usefull to interact with this container (ex: `/bin/bash`, `/bin/ps -a`, `/bin/df -h`,...) + 2. As a daemon with `docker run -p 11211:11211 -v /data/logs/couchbase -d sv-couchbase` + + +### Build & run a container using `docker-compose` + +1. Jump into the container directory with `cd Services/couchbase` +2. Run this container + 1. Interactively with `docker-compose up` Startup logs appears and escaping this command stop the container + 2. As a daemon with `docker-compose up -d`. Container startup logs can be read using `docker-compose logs` + +If you experience trouble with port already used, edit docker-compose.yml file and change port mapping diff --git a/Services/couchbase/docker-compose.yml b/Services/couchbase/docker-compose.yml new file mode 100644 index 0000000..1a23ea5 --- /dev/null +++ b/Services/couchbase/docker-compose.yml @@ -0,0 +1,15 @@ +server: + build: ./ + container_name: "couchbase-server" + mem_limit: 2g + memswap_limit: 3g + cpu_shares: 2 + restart: "on-failure:2" + ports: + - "9271:11211" + environment: + CONTAINER_TYPE: "service" + CONTAINER_SERVICE: "couchbase" + CONTAINER_INSTANCE: "service-couchbase" + volumes: + - "/tmp/container/logs/couchbase:/data/logs/couchbase" \ No newline at end of file diff --git a/Services/couchbase/run.sh b/Services/couchbase/run.sh new file mode 100644 index 0000000..f853ada --- /dev/null +++ b/Services/couchbase/run.sh @@ -0,0 +1,62 @@ +#!/bin/bash +source /bin/sx-lib.sh + + +function display_container_couchbase_header { + echo "+=====================================================" + echo "| Container : $HOSTNAME" + echo "| OS : $( BEGIN COUCHBASE CONFIGURATION" + if [[ ! -d $LOG_PATH ]]; then + echo "log directory $LOG_PATH not found" + mkdir -p $LOG_PATH; + echo "log directory $LOG_PATH CREATED" + else + echo "log directory $LOG_PATH EXIST" + fi + chmod 0774 $LOG_PATH; +} + +# End configuration process just before starting daemon +function end_config { + echo "=> END COUCHBASE CONFIGURATION" +} + +# Start the couchbase server as a deamon and execute it inside +# the running shell +function start_daemon { + echo "=> Starting couchbase daemon ..." | tee -a $STARTUPLOG + display_container_started | tee -a $STARTUPLOG + exec couchbase -u daemon -v +} + + +if [[ "$0" == *"run.sh" && ! $1 = "" ]];then + eval "$@"; +fi + +check_environment | tee -a $STARTUPLOG +display_container_couchbase_header | tee -a $STARTUPLOG +begin_config | tee -a $STARTUPLOG +end_config | tee -a $STARTUPLOG +start_daemon -- cgit v1.2.3