Containers have been a hot topic in recent years and they’re a surprisingly easy method of starting out with any new software: GridDB is no exception. With just a few easy steps you’re able to deploy a GridDB Container in Docker to test and develop code. The basic process is:
-
Download Docker and Other Prerequisites.
-
Build a Docker Image.
-
Run the Container
-
Build and Run Sample Code
This post is not meant to be all encompassing, just a quick howto on running the GridDB server in Docker so that a developer could try some basic code. There are many other considerations if you wanted to put GridDB and Docker into a production environment with external access.
Download Docker and Prerequisites
-
Download and install Docker from https://www.docker.com/get-docker for your preferred platform. For this article, we used Docker on MacOSX.
-
Download Oracle JDK (the Linux x64 RPM pacakge) from: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
-
Using Docker, download the CentOS Base Image. 6.7, 6.8, or 6.9 will work.
$ docker pull centos:6.8 6.8: Pulling from library/centos 67f15db7c18f: Pull complete Digest: sha256:37ee2dcd9a3a430136b566efb4aa1111ed332bfdef8b0de51a25d26891689fd7 Status: Downloaded newer image for centos:6.8
Build A Docker Image
First create an empty directory to store the files necessary to create a Docker image. 1. Place the Java JDK you previously downloaded in this directory. 2. Create a file named griddb.sh that will be used by the Dockerfile with the following content:
#!/bin/bash export GS_HOME=/var/lib/gridstore/ export GS_LOG=/var/lib/gridstore/log
- Create the a file named “Dockerfile” with the following content:
FROM centos:6.8 RUN set -x &&\ HOST=`hostname` && \ sed -i "s/^\(HOSTNAME=\).*/\1$HOST/" /etc/sysconfig/network && \ rpm -Uvh https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm RUN set -x &&\ su - gsadm -c "gs_passwd admin -p admin" RUN set -x && \ sed -i -e s/\"clusterName\":\"\"/\"clusterName\":\"dockerGridDB\"/g \ -e s/\"replicationNum\":2/\"replicationNum\":1/g /var/lib/gridstore/conf/gs_cluster.json ADD jdk-8u121-linux-x64.rpm /tmp RUN set -x && \ rpm -Uvh /tmp/jdk-8u121-linux-x64.rpm CMD su - gsadm -c \ "gs_startnode -u admin/admin -w 0 && gs_joincluster -c dockerGridDB -n 1 -u admin/admin" &&\ tail -f /dev/null
Now after you’ve created the Dockerfile you can create the image with the following command:
$ docker build -t docker-griddb . Step 1/7 : FROM centos:6.8 ---> ab44245321a8 Step 2/7 : RUN set -x && HOST=`hostname` && sed -i "s/^\(HOSTNAME=\).*/\1$HOST/" /etc/sysconfig/network && rpm -Uvh https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm ---> Running in b723cc52a3a6 ++ hostname + HOST=0de5ce56403a + sed -i 's/^\(HOSTNAME=\).*/\10de5ce56403a/' /etc/sysconfig/network + rpm -Uvh https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm Retrieving https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm Preparing... ################################################## ------------------------------------------------------------ Information: User gsadm and group gridstore have been registered. GridDB uses new user and group. ------------------------------------------------------------ griddb_nosql ################################################## ---> e742811e19c1 Removing intermediate container b723cc52a3a6 Step 3/7 : RUN set -x && su - gsadm -c "gs_passwd admin -p admin" ---> Running in bb1e0fff55d6 + su - gsadm -c 'gs_passwd admin -p admin' ---> 13efc76ae454 Removing intermediate container bb1e0fff55d6 Step 4/7 : RUN set -x && sed -i -e s/\"clusterName\":\"\"/\"clusterName\":\"dockerGridDB\"/g -e s/\"replicationNum\":2/\"replicationNum\":1/g /var/lib/gridstore/conf/gs_cluster.json ---> Running in 7f0e0d4dd443 + sed -i -e 's/"clusterName":""/"clusterName":"dockerGridDB"/g' -e 's/"replicationNum":2/"replicationNum":1/g' /var/lib/gridstore/conf/gs_cluster.json ---> 9fc93177a6d6 Removing intermediate container 7f0e0d4dd443 Step 5/9 : ADD griddb.sh /etc/profile.d/ ---> 2950c8327419 Removing intermediate container 520da00ea008 Step 6/9 : RUN set -x && chmod +x /etc/profile.d/griddb.sh ---> Running in 1882151bf8f8 + chmod +x /etc/profile.d/griddb.sh ---> 610c1a75042d Removing intermediate container 1882151bf8f8 Step 7/7 : ADD jdk-8u121-linux-x64.rpm /tmp ---> 82e290734a6d Removing intermediate container 438a4b84f818 Step 8/9 : RUN set -x && rpm -Uvh /tmp/jdk-8u121-linux-x64.rpm ---> Running in 73335ba1f265 + rpm -Uvh /tmp/jdk-8u121-linux-x64.rpm Preparing... ################################################## jdk1.8.0_121 ################################################## Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar... ---> 831d58936710 Removing intermediate container 73335ba1f265 Step 9/9 : CMD su - gsadm -c "gs_startnode -u admin/admin -w 0 && gs_joincluster -c dockerGridDB -n 1 -u admin/admin" && tail -f /dev/null ---> Running in 5143de19c598 ---> 944a0436f719 Removing intermediate container 5143de19c598 Successfully built 944a0436f719
Run
$ docker run docker-griddb .. Started node.
You can see your container running in with Docker ps:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f10c6cb4a3af griddb-docker "/bin/sh -c 'su - ..." 39 seconds ago Up 38 seconds jovial_morse
The container ID is important as we’ll use it as the argument other docker commands such as exec as demonstrated below to see gs_stat information.
$ docker exec f10c su - gsadm -c "gs_stat -u admin/admin" { "checkpoint": { "endTime": 1491496340738, "mode": "RECOVERY_CHECKPOINT", "normalCheckpointOperation": 0, "pendingPartition": 0, "requestedCheckpointOperation": 0, "startTime": 1491496340586 }, "cluster": { "activeCount": 1, "clusterName": "dockerGridDB", "clusterStatus": "MASTER", "designatedCount": 1, "loadBalancer": "ACTIVE", "master": { "address": "172.17.0.2", "port": 10040 }, "nodeList": [ { "address": "172.17.0.2", "port": 10040 } ], "nodeStatus": "ACTIVE", "notificationMode": "MULTICAST", "partitionStatus": "NORMAL", "startupTime": "2017-04-06T16:32:18Z", "syncCount": 2 }, "currentTime": "2017-04-06T16:47:00Z", "performance": { "batchFree": 0, "checkpointFileAllocateSize": 65536, "checkpointFileSize": 65536, "checkpointFileUsageRate": 0, "checkpointMemory": 0, "checkpointMemoryLimit": 1073741824, "checkpointWriteSize": 0, "checkpointWriteTime": 0, "currentCheckpointWriteBufferSize": 0, "currentTime": 1491497220407, "numConnection": 2, "numSession": 0, "numTxn": 0, "peakProcessMemory": 312152064, "processMemory": 312152064, "recoveryReadSize": 65536, "recoveryReadTime": 0, "storeCompressionMode": "NO_BLOCK_COMPRESSION", "storeDetail": { "batchFreeMapData": { "storeMemory": 0, "storeUse": 0, "swapRead": 0, "swapWrite": 0 }, "batchFreeRowData": { "storeMemory": 0, "storeUse": 0, "swapRead": 0, "swapWrite": 0 }, "mapData": { "storeMemory": 0, "storeUse": 0, "swapRead": 0, "swapWrite": 0 }, "metaData": { "storeMemory": 0, "storeUse": 0, "swapRead": 0, "swapWrite": 0 }, "rowData": { "storeMemory": 0, "storeUse": 0, "swapRead": 0, "swapWrite": 0 } }, "storeMemory": 0, "storeMemoryLimit": 1073741824, "storeTotalUse": 0, "swapRead": 0, "swapReadSize": 0, "swapReadTime": 0, "swapWrite": 0, "swapWriteSize": 0, "swapWriteTime": 0, "syncReadSize": 0, "syncReadTime": 0, "totalLockConflictCount": 0, "totalReadOperation": 0, "totalRowRead": 0, "totalRowWrite": 0, "totalWriteOperation": 0 }, "recovery": { "progressRate": 1 }, "version": "3.0.0-27877 CE" }
Build and Run Sample Code
There are several ways you could build GridDB source code, such as with Eclipse as demonstrated in the the Documentation, but for this simple case we’ll use the JDK within the container to build a Sample app. Start up a shell in your container with:
$ docker exec -it f10c bash
Then run the following commands:
# export CLASSPATH=/usr/share/java/gridstore.jar:$CLASSPATH # mkdir gsSample # cp /usr/griddb-3.0.0/docs/sample/program/Sample1.java gsSample/ # javac gsSample/Sample1.java # java gsSample/Sample1 239.0.0.1 31999 dockerGridDB admin admin name=name02 status=false count=2 lob=[65, 66, 67, 68, 69, 70, 71, 72, 73, 74]
Congratulations, your container is able to execute the GridDB Sample. If you want to copy a file from your host to the container, that is easily done using:
$ docker cp sourceFile containerId:destinationPath
If you have any questions about the blog, please create a Stack Overflow post here https://stackoverflow.com/questions/ask?tags=griddb .
Make sure that you use the “griddb” tag so our engineers can quickly reply to your questions.
[…] I have given up working with GridDB in other ways on MacOS (source code with automake warnings, config failing with no fallocate available), and moved on to creating a Docker image following the steps in GridDB’s blog: https://griddb.net/en/blog/running-griddb-in-docker/ […]
I relish, cause I found just what I was taking a look for. You’ve ended my four day long hunt! God Bless you man. Have a nice day. Bye
купить свидетельство о рождении
https://www.brodyaga.org/club/user/110627/blog/5434/
купить свидетельство о браке