diff options
| -rw-r--r-- | Services/couchbase/Dockerfile | 16 | ||||
| -rw-r--r-- | Services/couchbase/README.md | 117 | ||||
| -rw-r--r-- | Services/couchbase/docker-compose.yml | 15 | ||||
| -rw-r--r-- | Services/couchbase/run.sh | 62 | 
4 files changed, 210 insertions, 0 deletions
| 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 <dev@startx.fr> + +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) + +| [](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          : $(</etc/redhat-release)" +    echo "| Engine      : $(couchbase -h | head -1)"  +    if [ -v CONTAINER_TYPE ]; then +        echo "| Type        : $CONTAINER_TYPE" +    fi +    if [ -v CONTAINER_SERVICE ]; then +        echo "| Service     : $CONTAINER_SERVICE" +    fi +    if [ -v CONTAINER_INSTANCE ]; then +        echo "| Instance    : $CONTAINER_INSTANCE" +    fi +    if [ -v LOG_PATH ]; then +        echo "| Log path    : $LOG_PATH" +    fi +    echo "+=====================================================" +} + + +# Begin configuration before starting daemonized process +# and start generating host keys +function begin_config { +    echo "=> 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 | 
