{"id":46592,"date":"2019-09-16T00:00:00","date_gmt":"2019-09-16T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/"},"modified":"2025-11-13T12:54:47","modified_gmt":"2025-11-13T20:54:47","slug":"improve-your-devops-with-griddb-server-and-client-docker-containers","status":"publish","type":"post","link":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/","title":{"rendered":"Improve your DevOps with GridDB Server and Client Docker Containers"},"content":{"rendered":"<p>DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be using software such as Docker, Kubernetes, Jenkins, and more. In this blog, we&#8217;re going to build on our previous <a href=\"https:\/\/griddb.net\/en\/blog\/running-griddb-in-docker\/\">Docker post<\/a> and show a ready built Dockerfile and startup script that allows developers to deploy individual, easily customizable containers for their GridDB server, Python client, and Java client. <\/p>\n<p>First off, a user-created Docker network is required to allow clients to easily connect to the GridDB server, which can be created with the following command&#8230;<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker network create griddb-net<\/code><\/pre>\n<\/div>\n<p>If you prefer to learn via video: <\/p>\n<div style=\"text-align: center\">\n<iframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/AifvxA3VegA\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div>\n<h2>The Server<\/h2>\n<p>The server container consists of two parts, the Dockerfile and the griddb_start.sh script. The Dockerfile is quite simple, it installs the GridDB RPM from Github, sets environment variables, exposes the required ports, and then executes the griddb_start.sh script which does most of the heavy lifting.<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker pull griddbnet\/griddb<\/code><\/pre>\n<\/div>\n<pre>\nFROM centos:7\n\nRUN rpm -Uvh https:\/\/github.com\/griddb\/griddb_nosql\/releases\/download\/v4.2.1\/griddb_nosql-4.2.1-1.linux.x86_64.rpm\n\nENV GS_HOME \/var\/lib\/gridstore\nENV GS_LOG $GS_HOME\/log\nENV HOME $GS_HOME\n\nWORKDIR $HOME\n\nADD start_griddb.sh \/\nUSER gsadm\nCMD \/start_griddb.sh\nEXPOSE 10001 10010 10020 10030 10040 10050 10080 20001\n<\/pre>\n<p>In griddb_start.sh, the container&#8217;s IP address is retrieved so that it can be used within the gs_cluster.json configuration file which is written via cat. gs_node.json is also written with cat allowing changes to be easily made. <\/p>\n<pre>\n#!\/bin\/bash\n\nchown gsadm.gridstore \/var\/lib\/gridstore\/data\n\nIP=`grep $HOSTNAME \/etc\/hosts | awk ' { print $1 }'`\n\ncat << EOF > \/var\/lib\/gridstore\/conf\/gs_cluster.json\n{\n        \"dataStore\":{\n                \"partitionNum\":128,\n                \"storeBlockSize\":\"64KB\"\n        },\n        \"cluster\":{\n                \"clusterName\":\"defaultCluster\",\n                \"replicationNum\":2,\n                \"notificationInterval\":\"5s\",\n                \"heartbeatInterval\":\"5s\",\n                \"loadbalanceCheckInterval\":\"180s\",\n                \"notificationMember\": [\n                        {\n                                \"cluster\": {\"address\":\"$IP\", \"port\":10010},\n                                \"sync\": {\"address\":\"$IP\", \"port\":10020},\n                                \"system\": {\"address\":\"$IP\", \"port\":10080},\n                                \"transaction\": {\"address\":\"$IP\", \"port\":10001},\n                                \"sql\": {\"address\":\"$IP\", \"port\":20001}\n                       }\n                ]\n        },\n        \"sync\":{\n                \"timeoutInterval\":\"30s\"\n        }\n}\nEOF\ncat << EOF > \/var\/lib\/gridstore\/conf\/gs_node.json\n{\n    \"dataStore\":{\n        \"dbPath\":\"data\",\n        \"backupPath\":\"backup\",\n        \"syncTempPath\":\"sync\",\n        \"storeMemoryLimit\":\"1024MB\",\n        \"storeWarmStart\":false,\n        \"storeCompressionMode\":\"NO_COMPRESSION\",\n        \"concurrency\":4,\n        \"logWriteMode\":1,\n        \"persistencyMode\":\"NORMAL\",\n        \"affinityGroupSize\":4,\n        \"autoExpire\":false\n    },\n    \"checkpoint\":{\n        \"checkpointInterval\":\"60s\",\n        \"checkpointMemoryLimit\":\"1024MB\",\n        \"useParallelMode\":false\n    },\n    \"cluster\":{\n        \"servicePort\":10010\n    },\n    \"sync\":{\n        \"servicePort\":10020\n    },\n    \"system\":{\n        \"servicePort\":10040,\n        \"eventLogPath\":\"log\"\n    },\n    \"transaction\":{\n        \"servicePort\":10001,\n        \"connectionLimit\":5000\n    },\n   \"trace\":{\n        \"default\":\"LEVEL_ERROR\",\n        \"dataStore\":\"LEVEL_ERROR\",\n        \"collection\":\"LEVEL_ERROR\",\n        \"timeSeries\":\"LEVEL_ERROR\",\n        \"chunkManager\":\"LEVEL_ERROR\",\n        \"objectManager\":\"LEVEL_ERROR\",\n        \"checkpointFile\":\"LEVEL_ERROR\",\n        \"checkpointService\":\"LEVEL_INFO\",\n        \"logManager\":\"LEVEL_WARNING\",\n        \"clusterService\":\"LEVEL_ERROR\",\n        \"syncService\":\"LEVEL_ERROR\",\n        \"systemService\":\"LEVEL_INFO\",\n        \"transactionManager\":\"LEVEL_ERROR\",\n        \"transactionService\":\"LEVEL_ERROR\",\n        \"transactionTimeout\":\"LEVEL_WARNING\",\n        \"triggerService\":\"LEVEL_ERROR\",\n        \"sessionTimeout\":\"LEVEL_WARNING\",\n        \"replicationTimeout\":\"LEVEL_WARNING\",\n        \"recoveryManager\":\"LEVEL_INFO\",\n        \"eventEngine\":\"LEVEL_WARNING\",\n        \"clusterOperation\":\"LEVEL_INFO\",\n        \"ioMonitor\":\"LEVEL_WARNING\"\n    }\n}\nEOF\n<\/pre>\n<p>A password is set and the node started, this happens before a while loop waits for the GridDB service to finish recovering which then joins the cluster. Finally, <code>tailing<\/code> the gridstore log file, GridDB logs can be accessed easily using the log command. <\/p>\n<pre>\ngs_passwd admin -p admin\ngs_startnode\n\nwhile gs_stat -u admin\/admin | grep RECOV > \/dev\/null; do\n    echo Waiting for GridDB to be ready.\n    sleep 5\ndone\n\ngs_joincluster -n 1 -u admin\/admin\n\ntail -f \/var\/lib\/gridstore\/log\/gridstore*.log\n<\/pre>\n<p>The image is built with docker build:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker build -t griddb-server .<\/code><\/pre>\n<\/div>\n<p>Now, if you don&#8217;t need or want persistent data storage (if you kill the container or it otherwise shuts down, all data in GridDB will be lost) you can start the GridDB server container with the following: <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker run --network griddb-net --name griddb-server -d -t griddbnet\/griddb<\/code><\/pre>\n<\/div>\n<p>If you want data to be stored, first you need to create a volume to store it in:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker volume create griddb-data<\/code><\/pre>\n<\/div>\n<p>Then, you can start GridDB to include the mount option:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker run --network griddb-net --name griddb-server \n     --mount source=griddb-data,target=\/var\/lib\/gridstore\/data -d -t griddbnet\/griddb<\/code><\/pre>\n<\/div>\n<p>That&#8217;s it, your GridDB server Docker container should now be running.<\/p>\n<pre>\n$ docker ps\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                                    NAMES\nbef6eecc959d        griddb-server       \"\/bin\/sh -c \/start_g\u00e2\u20ac\u00a6\"   5 minutes ago      Up 5 minutes       10001\/tcp, 10010\/tcp, 10020\/tcp, 10030\/tcp, 10040\/tcp, 10050\/tcp, 10080\/tcp, 20001\/tcp   griddb-server\n$ docker logs bef6\nWaiting for GridDB to be ready.\nWaiting for GridDB to be ready.\nWaiting for GridDB to be ready.\nWaiting for GridDB to be ready.\nWaiting for GridDB to be ready.\nWaiting for GridDB to be ready.\n2019-07-31T19:23:41.270Z bef6eecc959d 13 INFO RECOVERY_MANAGER [160903:RM_REDO_LOG_STATUS] Redo finished (pId=125, lsn=0)\n2019-07-31T19:23:41.270Z bef6eecc959d 13 INFO RECOVERY_MANAGER [160903:RM_REDO_LOG_STATUS] Redo finished (pId=126, lsn=0)\n2019-07-31T19:23:41.270Z bef6eecc959d 13 INFO RECOVERY_MANAGER [160903:RM_REDO_LOG_STATUS] Redo finished (pId=127, lsn=0)\n2019-07-31T19:23:41.270Z bef6eecc959d 13 INFO CHECKPOINT_SERVICE [30902:CP_STATUS] [RecoveryCheckpoint]\n2019-07-31T19:23:42.366Z bef6eecc959d 36 INFO CHECKPOINT_SERVICE [30902:CP_STATUS] [CP_START] mode=RECOVERY_CHECKPOINT, backupPath=\n2019-07-31T19:23:48.913Z bef6eecc959d 36 INFO CHECKPOINT_SERVICE [30902:CP_STATUS] [CP_END] mode=RECOVERY_CHECKPOINT, backupPath=, commandElapsedMillis=6547\n2019-07-31T19:23:48.913Z bef6eecc959d 20 INFO CLUSTER_OPERATION [40906:CS_NORMAL_OPERATION] Recovery checkpoint is completed, start all services\n2019-07-31T19:24:42.417Z bef6eecc959d 36 INFO CHECKPOINT_SERVICE [30902:CP_STATUS] [CP_END] mode=NORMAL_CHECKPOINT, backupPath=, commandElapsedMillis=0\n2019-07-31T19:24:42.785Z bef6eecc959d 16 INFO SYSTEM_SERVICE [50903:SC_WEB_API_CALLED] Join cluster called (clusterName=defaultCluster, clusterNodeNum=1)\n2019-07-31T19:24:42.785Z bef6eecc959d 20 INFO CLUSTER_OPERATION [40906:CS_NORMAL_OPERATION] Called Join cluster\n2019-07-31T19:24:47.486Z bef6eecc959d 20 INFO CLUSTER_OPERATION [40906:CS_NORMAL_OPERATION] Detect cluster status change (active nodeCount=1, checked nodeNum=1)\n2019-07-31T19:24:47.486Z bef6eecc959d 20 WARNING CLUSTER_OPERATION [180061:CLM_STATUS_TO_MASTER] Cluster status change to MASTER <VVZp3r1cddYJJmfTpk5m1glXacK4D3fcEh0q8aRacsceC0fTpk5m1glDMMe4S2DHHjpmx7tbZMEoDWvGvVwp8BcMecatXVLHGg1\/wZxdYN0IEH7bp0EtkxkWZd7hD23aFRw3gf8WIdECWV\/BrV1EyxgcesahQG+TVVZp3r1cddYJJmfTpk5m1glXacK4D3fcEh0q8aRacsceC0fTpk5m1glDMMe4S2DHHjpmx7tbZMEoDWvGvVwp8BcMecatXVLHGg1\/wZxdYN0IEH7bp0EtkxkWZd7hD23aFRw3gf8WIehKQTqC\/h478Dc0VeGcblXmKCZe\/ZdiQOAvPFjv6GxtxggNb8DoXHXSDwx5kqtHYN0cHCrGpw9M8igtT+A=>\n... snip ...\n2019-07-31T19:28:43.734Z bef6eecc959d 36 INFO CHECKPOINT_SERVICE [30902:CP_STATUS] [CP_END] mode=NORMAL_CHECKPOINT, backupPath=, commandElapsedMillis=0\n<\/pre>\n<h2>Java Container<\/h2>\n<p>The GridDB Java client Dockerfile is quite simple; the sequence of steps are: installing the OpenJDK Development package and then the GridDB RPM, adding the source, compiling, and executing it. <\/p>\n<pre>\nFROM centos:7\n\nRUN yum install -y java-1.8.0-openjdk-devel\nRUN rpm -Uvh https:\/\/github.com\/griddb\/griddb_nosql\/releases\/download\/v4.2.1\/griddb_nosql-4.2.1-1.linux.x86_64.rpm\n\nADD Sample1.java \/\n\nENV CLASSPATH \/usr\/share\/java\/gridstore.jar:$CLASSPATH\n\nRUN javac Sample1.java\n\nCMD java Sample1\n<\/pre>\n<p>The only particular source code change required is with the Gridstore Properties object which connects to &#8220;griddb-server&#8221;, the griddb-server container&#8217;s name. <\/p>\n<pre>\nProperties props = new Properties();\nprops.setProperty(\"notificationMember\", \"griddb-server:10001\");\nprops.setProperty(\"clusterName\", \"defaultCluster\");\nprops.setProperty(\"user\", \"admin\");\nprops.setProperty(\"password\", \"admin\");\n<\/pre>\n<p>If you don&#8217;t want to run your application in a Docker container, you can change the notificationMember to point to the IP address of the server container. The following command will output its IP address if you do not know how to look it up:<\/p>\n<pre>\n$ CONT=`docker ps | grep griddb-server | awk '{ print $1 }'`; docker exec $CONT cat \/etc\/hosts | grep $CONT | awk '{ print $1 }'\n172.18.0.2\n<\/pre>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ CONT=`docker ps | grep griddb-server | awk '{ print $1 }'`; docker exec $CONT cat \/etc\/hosts | grep $CONT | awk '{ print $1 }'<\/code><\/pre>\n<\/div>\n<pre>172.18.0.2<\/pre>\n<p>Building and running are both quite simple:<\/p>\n<pre>$ docker build -t griddb-java .\nSending build context to Docker daemon   5.12kB\nStep 1\/7 : FROM centos:7\n ---> 9f38484d220f\nStep 2\/7 : RUN yum install -y java-1.8.0-openjdk-devel\n ---> Using cache\n ---> 34e283d179ac\nStep 3\/7 : RUN rpm -Uvh https:\/\/github.com\/griddb\/griddb_nosql\/releases\/download\/v4.2.1\/griddb_nosql-4.2.1-1.linux.x86_64.rpm\n ---> Using cache\n ---> 83669ae6deda\nStep 4\/7 : ADD Sample1.java \/\n ---> Using cache\n ---> 042eea3c5645\nStep 5\/7 : ENV CLASSPATH \/usr\/share\/java\/gridstore.jar:$CLASSPATH\n ---> Using cache\n ---> c6e5f9a2760a\nStep 6\/7 : RUN javac Sample1.java\n ---> Using cache\n ---> b0c5757cdb90\nStep 7\/7 : CMD java Sample1\n ---> Using cache\n ---> eb70502014bd\nSuccessfully built eb70502014bd\nSuccessfully tagged griddb-java:latest\n<\/pre>\n<p>As is running the container:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker run --network griddb-net -t griddb-java<\/code><\/pre>\n<\/div>\n<pre>Person:  name=name02 status=false count=2 lob=[65, 66, 67, 68, 69, 70, 71, 72, 73, 74]<\/pre>\n<h2>Python Container<\/h2>\n<p>The Python client&#8217;s Dockerfile is a bit more complex as PCRE, SWIG, and the Python Client need to be compiled. <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker pull griddbnet\/griddb-python<\/code><\/pre>\n<\/div>\n<pre>FROM centos:7\n\nRUN yum -y groupinstall \"Development Tools\"\nRUN yum -y install epel-release wget\nRUN yum -y install python36 python36-devel \nRUN rpm -Uvh https:\/\/github.com\/griddb\/c_client\/releases\/download\/v4.2.0\/griddb_c_client-4.2.0-1.linux.x86_64.rpm\nRUN ln -sf \/usr\/include\/python3.6m \/usr\/include\/python3.6\n\nRUN wget https:\/\/sourceforge.net\/projects\/pcre\/files\/pcre\/8.39\/pcre-8.39.tar.gz\nRUN tar xvfz pcre-8.39.tar.gz \nRUN cd pcre-8.39 && .\/configure &&  make &&  make install\nRUN cd ..\n\nRUN wget https:\/\/prdownloads.sourceforge.net\/swig\/swig-3.0.12.tar.gz\nRUN tar xvfz swig-3.0.12.tar.gz \nRUN cd swig-3.0.12 && .\/configure &&  make && make install\nRUN cd ..\n\nRUN wget https:\/\/github.com\/griddb\/python_client\/archive\/0.8.1-rc0.tar.gz\nRUN tar xvfz 0.8.1-rc0.tar.gz\nRUN cd python_client-0.8.1-rc0 && make\n\nENV PYTHONPATH \/python_client-0.8.1-rc0\n\nADD sample1.py \/\nCMD \/sample1.py<\/pre>\n<p>The only changes required the python source code is changing Gridstore parameters to point to the server container:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">gridstore = factory.get_store(\n        notification_member=\"griddb-server:10001\",\n        cluster_name=\"defaultCluster\",\n        username=\"admin\",\n        password=\"admin\"\n)<\/code><\/pre>\n<\/div>\n<p>Like with Java, if you don&#8217;t want to run your application in a Docker container, you can change the notificationMember to point to the IP address of the server container. The following command will output its IP address. If you do not know how to look it up:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ CONT=`docker ps | grep griddb-server | awk '{ print $1 }'`; docker exec $CONT cat \/etc\/hosts | grep $CONT | awk '{ print $1 }'<\/code><\/pre>\n<\/div>\n<pre>172.18.0.2<\/pre>\n<p>Building is essentially the same as the Java client:<\/p>\n<pre>\n$ docker build -t griddb-python .\nSending build context to Docker daemon   5.12kB\nStep 1\/20 : FROM centos:7\n ---> 9f38484d220f\nStep 2\/20 : RUN yum -y groupinstall \"Development Tools\"\n ---> Using cache\n ---> 2eb55fc14acb\nStep 3\/20 : RUN yum -y install epel-release wget\n ---> Using cache\n ---> 3f8a1bfb8999\nStep 4\/20 : RUN yum -y install python36 python36-devel\n ---> Using cache\n ---> 8ced1273c292\nStep 5\/20 : RUN rpm -Uvh https:\/\/github.com\/griddb\/c_client\/releases\/download\/v4.2.0\/griddb_c_client-4.2.0-1.linux.x86_64.rpm\n ---> Using cache\n ---> e5188e0704e0\nStep 6\/20 : RUN ln -sf \/usr\/include\/python3.6m \/usr\/include\/python3.6\n ---> Using cache\n ---> 4828bdbb0711\nStep 7\/20 : RUN wget https:\/\/sourceforge.net\/projects\/pcre\/files\/pcre\/8.39\/pcre-8.39.tar.gz\n ---> Using cache\n ---> b57e7fa48df5\nStep 8\/20 : RUN tar xvfz pcre-8.39.tar.gz\n ---> Using cache\n ---> f06336db97c0\nStep 9\/20 : RUN cd pcre-8.39 && .\/configure &&  make &&  make install\n ---> Using cache\n ---> c28540943d49\nStep 10\/20 : RUN cd ..\n ---> Using cache\n ---> 3b24d85b842c\nStep 11\/20 : RUN wget https:\/\/prdownloads.sourceforge.net\/swig\/swig-3.0.12.tar.gz\n ---> Using cache\n ---> 71df54189d11\nStep 12\/20 : RUN tar xvfz swig-3.0.12.tar.gz\n ---> Using cache\n ---> 96cbb828bef0\nStep 13\/20 : RUN cd swig-3.0.12 && .\/configure &&  make && make install\n ---> Using cache\n ---> 9af12ad99d1d\nStep 14\/20 : RUN cd ..\n ---> Using cache\n ---> e1dd5e9259b7\nStep 15\/20 : RUN wget https:\/\/github.com\/griddb\/python_client\/archive\/0.8.1-rc0.tar.gz\n ---> Using cache\n ---> 746a4db157bf\nStep 16\/20 : RUN tar xvfz 0.8.1-rc0.tar.gz\n ---> Using cache\n ---> 278cd4d8b37a\nStep 17\/20 : RUN cd python_client-0.8.1-rc0 && make\n ---> Using cache\n ---> ead9d38a0424\nStep 18\/20 : ENV PYTHONPATH \/python_client-0.8.1-rc0\n ---> Using cache\n ---> f5326e3a4c7d\nStep 19\/20 : ADD sample1.py \/\n ---> c5426a34cc29\nStep 20\/20 : CMD \/sample1.py\n ---> Running in b4b197e78139\nRemoving intermediate container b4b197e78139\n ---> 95e6c3cc7859\nSuccessfully built 95e6c3cc7859\nSuccessfully tagged griddb-python:latest\n<\/pre>\n<p>Running the Python Client:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">$ docker run --network griddb-net -t griddbnet\/griddb-python<\/code><\/pre>\n<\/div>\n<pre> Person: name=name02 status=False count=2 lob=[65, 66, 67, 68, 69, 70, 71, 72, 73, 74] <\/pre>\n<p>We hope this blog post has helped demonstrate just how easy it is to start using GridDB in Docker containers. If you&#8217;d like to download the Dockerfiles, startup scripts, and samples they can be downloaded here: <a  data-e-Disable-Page-Transition=\"true\" class=\"download-link\" title=\"\" href=\"https:\/\/griddb.net\/en\/download\/26095\/?tmstv=1775791307\" rel=\"nofollow\" id=\"download-link-26095\" data-redirect=\"false\" >\n\tdocker\t(1928 downloads\t)\n<\/a>\n (zip)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be using software such as Docker, Kubernetes, Jenkins, and more. In this blog, we&#8217;re going to build on our previous Docker post and show a ready built Dockerfile and startup script that allows developers to [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":26101,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-46592","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-16T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T20:54:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1669\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Owen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Owen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\"},\"author\":{\"name\":\"Owen\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\"},\"headline\":\"Improve your DevOps with GridDB Server and Client Docker Containers\",\"datePublished\":\"2019-09-16T07:00:00+00:00\",\"dateModified\":\"2025-11-13T20:54:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\"},\"wordCount\":589,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\",\"url\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\",\"name\":\"Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg\",\"datePublished\":\"2019-09-16T07:00:00+00:00\",\"dateModified\":\"2025-11-13T20:54:47+00:00\",\"description\":\"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg\",\"contentUrl\":\"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg\",\"width\":2560,\"height\":1669},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\",\"name\":\"Owen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"caption\":\"Owen\"},\"url\":\"https:\/\/griddb.net\/en\/author\/owen\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT","description":"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/","og_locale":"en_US","og_type":"article","og_title":"Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT","og_description":"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be","og_url":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2019-09-16T07:00:00+00:00","article_modified_time":"2025-11-13T20:54:47+00:00","og_image":[{"width":2560,"height":1669,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg","type":"image\/jpeg"}],"author":"Owen","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Owen","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/"},"author":{"name":"Owen","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66"},"headline":"Improve your DevOps with GridDB Server and Client Docker Containers","datePublished":"2019-09-16T07:00:00+00:00","dateModified":"2025-11-13T20:54:47+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/"},"wordCount":589,"commentCount":0,"publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/","url":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/","name":"Improve your DevOps with GridDB Server and Client Docker Containers | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg","datePublished":"2019-09-16T07:00:00+00:00","dateModified":"2025-11-13T20:54:47+00:00","description":"DevOps has changed how many developers and system administrators develop, publish, and operate their software services. These days developers will be","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/blog\/improve-your-devops-with-griddb-server-and-client-docker-containers\/#primaryimage","url":"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg","contentUrl":"\/wp-content\/uploads\/2019\/07\/colorful-shipping-containers-scaled.jpg","width":2560,"height":1669},{"@type":"WebSite","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66","name":"Owen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","caption":"Owen"},"url":"https:\/\/griddb.net\/en\/author\/owen\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/comments?post=46592"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46592\/revisions"}],"predecessor-version":[{"id":51277,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46592\/revisions\/51277"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media\/26101"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media?parent=46592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/categories?post=46592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/tags?post=46592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}