{"id":1947,"date":"2015-06-03T06:41:55","date_gmt":"2015-06-03T06:41:54","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1947"},"modified":"2017-05-03T14:22:58","modified_gmt":"2017-05-03T21:22:58","slug":"running-couchbase-server-under-docker-on-joyent","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/","title":{"rendered":"Running Couchbase Server under Docker on Joyent Trident"},"content":{"rendered":"<p>Joyent has recently announced their new Triton Docker container hosting service. There are several advantages of running Docker containers on Triton rather than on a more traditional cloud hosting platform:<\/p>\n<ul>\n<li>Better performance since there is no hardware level virtualization overhead. Your containers run on bare\u00a0metal.<\/li>\n<li>Simplified networking between containers. Each container gets its own private (and optionally public) ip address.<\/li>\n<li>Hosts are abstracted away \u2013 you just deploy into the \u201ccontainer cloud\u201d, and don\u2019t care which host your container is running on.<\/li>\n<\/ul>\n<p>For more details, check out Bryan Cantrill\u2019s talk about Docker and the Future of Containers in Production.<\/p>\n<p>Let\u2019s give it a spin with a \u201chello world\u201d container, and then with a cluster of Couchbase servers.<\/p>\n<h2>Sign up for a Joyent account<\/h2>\n<p>Follow the signup instructions on the <a href=\"https:\/\/www.joyent.com\/triton\/compute?utm_source=Google-PPC&amp;utm_campaign=Brand&amp;utm_content=joyent%20-%20phrase%20and%20exact&amp;utm_term=joyent&amp;gclid=CPre7cHF1NMCFcWOfgodKe4MFQ\">Joyent<\/a> website.<\/p>\n<p>You will also need to add your SSH key to your account.<\/p>\n<h2>Upgrade Docker client to 1.4.1 or later<\/h2>\n<p>Check your version of Docker with:<\/p>\n<pre>$ docker --version\r\nDocker version 1.0.1, build 990021a\r\n<\/pre>\n<p>If you are on a version before 1.4.1 (like I was), you can upgrade Docker via the <a href=\"https:\/\/github.com\/boot2docker\/osx-installer\/releases\">boot2docker installers<\/a>.<\/p>\n<h2>Joyent + Docker setup<\/h2>\n<p>Get the sdc-docker repo (sdc == Smart Data Center):<\/p>\n<pre>$ git clone https:\/\/github.com\/joyent\/sdc-docker.git\r\n<\/pre>\n<p>Perform setup via:<\/p>\n<pre>$ cd sdc-docker\r\n$  .\/tools\/sdc-docker-setup.sh -k 165.225.168.22 $ACCOUNT ~\/.ssh\/$PRIVATE_KEY_FILE\r\n<\/pre>\n<p>Replace values as follows:<\/p>\n<ul>\n<li><strong>$ACCOUNT<\/strong>: you can get this by logging into the Joyent web ui and going to the Account menu from the pulldown in the top-right corner. Find the <strong>Username<\/strong> field, and use that<\/li>\n<li><strong>$PRIVATE_KEY_FILE<\/strong>: the name of the file where your private key is stored, typically this will be <code>id_rsa<\/code><\/li>\n<\/ul>\n<p>Run the command and you should see the following output:<\/p>\n<pre>Setting up Docker client for SDC using:\r\n    CloudAPI:        https:\/\/165.225.168.22\r\n    Account:         \r\n    Key:             \/home\/ubuntu\/.ssh\/id_rsa\r\n\r\n[..snip..]\r\n\r\nWrote certificate files to \/home\/ubuntu\/.sdc\/docker\/\r\n\r\nDocker service endpoint is: tcp:\/\/:2376\r\n\r\n* * *\r\nSuccess. Set your environment as follows:\r\n\r\n    export DOCKER_CERT_PATH=\/home\/ubuntu\/.sdc\/docker\/\r\n    export DOCKER_HOST=tcp:\/\/:2376\r\n    alias docker=\"docker --tls\"\r\n\r\nThen you should be able to run 'docker info' and see your account\r\nname 'SDCAccount: ' in the output.\r\n<\/pre>\n<p><strong>Export environment variables<\/strong><\/p>\n<p>As the output above suggests, copy and paste the commands from the output. Here\u2019s an example of what that will look like (but you should copy and paste from your command output, not the snippet below):<\/p>\n<pre>$ export DOCKER_CERT_PATH=\/home\/ubuntu\/.sdc\/docker\/\r\n$ export DOCKER_HOST=tcp:\/\/:2376\r\n$ alias docker=\"docker --tls\"\r\n<\/pre>\n<h2><\/h2>\n<h2>Docker Hello World<\/h2>\n<p>Let\u2019s spin up an Ubuntu docker image that says hello world.<\/p>\n<p>Remember, you\u2019re running the Docker client on your workstation, not in the cloud. Here\u2019s an overview on what\u2019s going to be happening:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/june\/running-couchbase-server-under-docker-on-joyent\/overview.png\" \/><\/p>\n<p>To start the docker container::<\/p>\n<pre>$ docker run --rm ubuntu:14.04 echo \"Hello Docker World, from Joyent\"\r\n<\/pre>\n<p>You should see the following output:<\/p>\n<pre>Unable to find image 'ubuntu:14.04' locally\r\nPulling repository library\/ubuntu\r\n...\r\nHello Docker World, from Joyent\r\n<\/pre>\n<p>Also, since the <code>--rm<\/code> flag was passed, the container will have been removed after exiting. You can verify this by running <code>docker ps -a<\/code>. This is important because <strong>stopped containers incur charges on Joyent<\/strong>.<\/p>\n<p>Congratulations! You\u2019ve gotten a \u201chello world\u201d Docker container running on Joyent.<\/p>\n<h2>Run Couchbase Server containers<\/h2>\n<p>Now it\u2019s time to run Couchbase Server.<\/p>\n<p>To kick off three Couchbase Server containers, run:<\/p>\n<pre>$ for i in `seq 1 3`; do \r\n      echo \"Starting container $i\"; \r\n      export container_$i=$(docker run --name couchbase-server-$i -d -P couchbase\/server); \r\n  done\r\n<\/pre>\n<p>To confirm the containers are up, run:<\/p>\n<pre>$ docker ps\r\n<\/pre>\n<p>and you should see:<\/p>\n<pre>CONTAINER ID        IMAGE                                       COMMAND             CREATED             STATUS              PORTS               NAMES\r\n5bea8901814c        couchbase\/server   \"couchbase-start\"   3 minutes ago       Up 2 minutes                            couchbase-server-1\r\nbef1f2f32726        couchbase\/server   \"couchbase-start\"   2 minutes ago       Up 2 minutes                            couchbase-server-2\r\n6f4e2a1e8e63        couchbase\/server   \"couchbase-start\"   2 minutes ago       Up About a minute                       couchbase-server-3\r\n<\/pre>\n<p>At this point you will have environment variables defined with the container ids of each container. You can check this by running:<\/p>\n<pre>$ echo $container_1 &amp;&amp; echo $container_2 &amp;&amp; echo $container_3\r\n21264e44d66b4004b4828b7ae408979e7f71924aadab435aa9de662024a37b0e\r\nff9fb4db7b304e769f694802e6a072656825aa2059604ba4ab4d579bd2e5d18d\r\n0c6f8ca2951448e497d7e12026dcae4aeaf990ec51e047cf9d8b2cbdd9bd7668\r\n<\/pre>\n<h3>Get public ip addresses of the containers<\/h3>\n<p>Each container will have two IP addresses assigned:<\/p>\n<ul>\n<li>A public IP, accessible from anywhere<\/li>\n<li>A private IP, only accessible from containers\/machines in your Joyent account<\/li>\n<\/ul>\n<p>To get the public IP, we can use the Docker client. (to get the private IP, you need to use the Joyent SmartDataCenter tools, which is described below)<\/p>\n<pre>$ container_1_ip=`docker inspect $container_1 | grep -i IPAddress | awk -F: '{print $2}' |  grep -oE \"b([0-9]{1,3}.){3}[0-9]{1,3}b\"`\r\n$ container_2_ip=`docker inspect $container_2 | grep -i IPAddress | awk -F: '{print $2}' |  grep -oE \"b([0-9]{1,3}.){3}[0-9]{1,3}b\"`\r\n$ container_3_ip=`docker inspect $container_3 | grep -i IPAddress | awk -F: '{print $2}' |  grep -oE \"b([0-9]{1,3}.){3}[0-9]{1,3}b\"`\r\n\r\n<\/pre>\n<p>You will now have the public IP addresses of each container defined in environment variables. You can check that it worked via:<\/p>\n<pre>$ echo $container_1_ip &amp;&amp; echo $container_2_ip &amp;&amp; echo $container_3_ip\r\n165.225.185.11\r\n165.225.185.12\r\n165.225.185.13\r\n<\/pre>\n<h3>Connect to Couchbase Web UI<\/h3>\n<p>Open your browser to $container_1_ip:8091 and you should see the\u00a0Couchbase welcome screen:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/june\/running-couchbase-server-under-docker-on-joyent\/cb-setup.png\" \/><\/p>\n<p>At this point, it\u2019s possible to set up the cluster by going to each Couchbase node\u2019s Web UI and following the Setup Wizard. However, in case you want to automate this in the future, let\u2019s do this over the command line instead.<\/p>\n<h3>Setup first Couchbase node<\/h3>\n<p>Let\u2019s arbitrarily pick <strong>container_1<\/strong> as the first node in the cluster. This node is special in the sense that other nodes will join it.<\/p>\n<p>The following command performs these operations:<\/p>\n<ul>\n<li>Sets the Administrator\u2019s username and password to Administrator \/ password (you should change this)<\/li>\n<li>Sets the cluster RAM size to 600 MB<\/li>\n<\/ul>\n<p>Note: the <code>-u admin -p password<\/code> should be left as-is, since that is just passing in the default admin name and password for auth purposes.<\/p>\n<pre>$ docker run --rm --entrypoint=\/opt\/couchbase\/bin\/couchbase-cli couchbase\/server \r\ncluster-init -c $container_1_ip \r\n--cluster-init-username=Administrator \r\n--cluster-init-password=password \r\n--cluster-init-ramsize=600 \r\n-u admin -p password\r\n<\/pre>\n<p>You should see a response like:<\/p>\n<pre>SUCCESS: init 165.225.185.11\r\n<\/pre>\n<h3>Create a default bucket<\/h3>\n<p>A bucket is equivalent to a database in typical RDMS systems.<\/p>\n<pre>$ docker run --rm --entrypoint=\/opt\/couchbase\/bin\/couchbase-cli couchbase\/server \r\nbucket-create -c $container_1_ip:8091 \r\n--bucket=default \r\n--bucket-type=couchbase \r\n--bucket-port=11211 \r\n--bucket-ramsize=600 \r\n--bucket-replica=1 \r\n-u Administrator -p password\r\n<\/pre>\n<p>You should see:<\/p>\n<pre>SUCCESS: bucket-create\r\n<\/pre>\n<h3>Add 2nd Couchbase node<\/h3>\n<p>Add in the second Couchbase node with this command<\/p>\n<pre>$ docker run --rm --entrypoint=\/opt\/couchbase\/bin\/couchbase-cli couchbase\/server \r\nserver-add -c $container_1_ip \r\n-u Administrator -p password \r\n--server-add $container_2_ip \r\n--server-add-username Administrator \r\n--server-add-password password \r\n<\/pre>\n<p>You should see:<\/p>\n<pre><code>SUCCESS: server-add 165.225.185.12:8091\r\n<\/code><\/pre>\n<p>To verify it was added, run:<\/p>\n<pre>$ docker run --rm --entrypoint=\/opt\/couchbase\/bin\/couchbase-cli couchbase\/server \r\nserver-list -c $container_1_ip \r\n-u Administrator -p password\r\n<\/pre>\n<p>which should return the list of Couchbase Server nodes that are now part of the cluster:<\/p>\n<pre>ns_1@165.225.185.11 165.225.185.11:8091 healthy active\r\nns_1@165.225.185.12 165.225.185.12:8091 healthy inactiveAdded\r\n<\/pre>\n<h3>Add 3rd Couchbase node and rebalance<\/h3>\n<p>In this step we will:<\/p>\n<ul>\n<li>Add the 3rd Couchbase node<\/li>\n<li>Trigger a \u201crebalance\u201d, which distributes the (empty) bucket\u2019s data across the cluster<\/li>\n<\/ul>\n<pre>$ docker run --rm --entrypoint=\/opt\/couchbase\/bin\/couchbase-cli couchbase\/server \r\nrebalance -c $container_1_ip \r\n-u Administrator -p password \r\n--server-add $container_3_ip \r\n--server-add-username Administrator \r\n--server-add-password password \r\n<\/pre>\n<p>You should see:<\/p>\n<pre>INFO: rebalancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\r\nSUCCESS: rebalanced cluster\r\nclose failed in file object destructor:\r\nError in sys.excepthook:\r\n\r\nOriginal exception was:\r\n<\/pre>\n<p>If you see <strong>SUCCESS<\/strong>, then it worked. <em>(I\u2019m not sure why the \u201cclose failed in file ..\u201d error is happening, but so far it appears that it can be safely ignored.)<\/em><\/p>\n<h3>Login to Web UI<\/h3>\n<p>Open your browser to $container_1_ip:8091 and you should see the Coucbase log in screen:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/june\/running-couchbase-server-under-docker-on-joyent\/cb-login.png\" \/><\/p>\n<p>Login with:<\/p>\n<ul>\n<li>Username: <strong>Administrator<\/strong><\/li>\n<li>Password: <strong>password<\/strong><\/li>\n<\/ul>\n<p>And you should see the Couchbase nodes:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2015\/june\/running-couchbase-server-under-docker-on-joyent\/cb-nodes.png\" \/><\/p>\n<p>Congratulations! You have a Couchbase Server cluster up and running on Joyent Triton.<\/p>\n<h2>Teardown<\/h2>\n<p>To stop and remove your Couchbase server containers, run:<\/p>\n<pre>$ docker stop $container_1 $container_2 $container_3\r\n$ docker rm $container_1 $container_2 $container_3\r\n<\/pre>\n<p>To double check that you no longer have any containers running or in the stopped state, run <code>docker ps -a<\/code> and you should see an empty list.<\/p>\n<h2>Installing the SDC tools (optional)<\/h2>\n<p>Installing the Joyent Smart Data Center (SDC) tools will allow you to gain more visibility into your container cluster \u2013 for example being able to view the internal IP of each continer.<\/p>\n<p>Here\u2019s how to install the sdc-tools suite.<\/p>\n<h3>Install smartdc<\/h3>\n<p>First install NodeJS + NPM<\/p>\n<p>Install smartdc:<\/p>\n<pre><code>npm install -g smartdc\r\n<\/code><\/pre>\n<h3>Configure environment variables<\/h3>\n<pre>$ export SDC_URL=https:\/\/us-east-3b.api.joyent.com\r\n$ export SDC_ACCOUNT=\r\n$ export SDC_KEY_ID=$(ssh-keygen -l -f $HOME\/.ssh\/id_rsa.pub | awk '{print $2}')\r\n<\/pre>\n<p>Replace values as follows:<\/p>\n<ul>\n<li><strong>ACCOUNT<\/strong>: you can get this by logging into the Joyent web ui and going to the Account menu from the pulldown in the top-right corner. Find the <strong>Username<\/strong> field, and use that<\/li>\n<\/ul>\n<h3>List machines<\/h3>\n<p>Run <code>sdc-listmachines<\/code> to list all the containers running under your Joyent account. Your output should look something like this:<\/p>\n<pre>$ sdc-listmachines\r\n[\r\n{\r\n    \"id\": \"0c6f8ca2-9514-48e4-97d7-e12026dcae4a\",\r\n    \"name\": \"couchbase-server-3\",\r\n    \"type\": \"smartmachine\",\r\n    \"state\": \"running\",\r\n    \"image\": \"335a8046-0749-1174-5666-6f084472b5ef\",\r\n    \"ips\": [\r\n      \"192.168.128.32\",\r\n      \"165.225.185.13\"\r\n    ],\r\n    \"memory\": 1024,\r\n    \"disk\": 25600,\r\n    \"metadata\": {},\r\n    \"tags\": {},\r\n    \"created\": \"2015-03-26T14:50:31.196Z\",\r\n    \"updated\": \"2015-03-26T14:50:45.000Z\",\r\n    \"networks\": [\r\n      \"7cfe29d4-e313-4c3b-a967-a28ea34342e9\",\r\n      \"178967cb-8d11-4f53-8434-9c91ff819a0d\"\r\n    ],\r\n    \"dataset\": \"335a8046-0749-1174-5666-6f084472b5ef\",\r\n    \"primaryIp\": \"165.225.185.13\",\r\n    \"firewall_enabled\": false,\r\n    \"compute_node\": \"44454c4c-4400-1046-8050-b5c04f383432\",\r\n    \"package\": \"t4-standard-1G\"\r\n  },\r\n]\r\n<\/pre>\n<h3>Find private IP of an individual machine<\/h3>\n<pre>$ sdc-getmachine  | json -aH ips | json -aH | egrep \"10.|192.\u201d<\/pre>\n<h2>References<\/h2>\n<ul>\n<li>Native Docker API vs Joyent Triton API<\/li>\n<li>https:\/\/www.joyent.com\/blog\/container-service-preview<\/li>\n<li>https:\/\/www.joyent.com\/blog\/docker-bake-off-aws-vs-joyent<\/li>\n<li>https:\/\/github.com\/joyent\/sdc-docker<\/li>\n<li>https:\/\/github.com\/joyent\/sdc-docker\/blob\/master\/docs\/divergence.md<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Joyent has recently announced their new Triton Docker container hosting service. There are several advantages of running Docker containers on Triton rather than on a more traditional cloud hosting platform: Better performance since there is no hardware level virtualization overhead. [&hellip;]<\/p>\n","protected":false},"author":59,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9030],"class_list":["post-1947","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Running Couchbase Server under Docker on Joyent Trident - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Running Couchbase Server under Docker on Joyent Trident\" \/>\n<meta property=\"og:description\" content=\"Joyent has recently announced their new Triton Docker container hosting service. There are several advantages of running Docker containers on Triton rather than on a more traditional cloud hosting platform: Better performance since there is no hardware level virtualization overhead. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-06-03T06:41:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-05-03T21:22:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Traun Leyden, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Traun Leyden, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\"},\"author\":{\"name\":\"Traun Leyden, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b9cdad74fec5e145772f6b482d307d81\"},\"headline\":\"Running Couchbase Server under Docker on Joyent Trident\",\"datePublished\":\"2015-06-03T06:41:54+00:00\",\"dateModified\":\"2017-05-03T21:22:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\"},\"wordCount\":1030,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\",\"name\":\"Running Couchbase Server under Docker on Joyent Trident - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-06-03T06:41:54+00:00\",\"dateModified\":\"2017-05-03T21:22:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Running Couchbase Server under Docker on Joyent Trident\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b9cdad74fec5e145772f6b482d307d81\",\"name\":\"Traun Leyden, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/30157f938e2acfb207327cb7f2dcb30f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2d64cd81c39730f92585d245c0e9595289dedd208ad8cb9513c055c72647873f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2d64cd81c39730f92585d245c0e9595289dedd208ad8cb9513c055c72647873f?s=96&d=mm&r=g\",\"caption\":\"Traun Leyden, Senior Software Engineer, Couchbase\"},\"description\":\"Traun Leyden is a Senior Software Engineer at Couchbase currently working on the Touch-DB\/Android project. Prior to Couchbase, Traun co-founded Signature Labs, a venture-backed startup that developed an iOS mobile CRM geolocation app that was deployed in Fortune 500 companies. Among his accomplishments, Traun developed a highly popular Android ringer control app called \\\"Buzzoff\\\" and created an open source Neural Network library written in Go that leverages Go channels\/goroutines to achieve high computation concurrency.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/traun-leyden\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Running Couchbase Server under Docker on Joyent Trident - The Couchbase Blog","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:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/","og_locale":"en_US","og_type":"article","og_title":"Running Couchbase Server under Docker on Joyent Trident","og_description":"Joyent has recently announced their new Triton Docker container hosting service. There are several advantages of running Docker containers on Triton rather than on a more traditional cloud hosting platform: Better performance since there is no hardware level virtualization overhead. [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-06-03T06:41:54+00:00","article_modified_time":"2017-05-03T21:22:58+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Traun Leyden, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Traun Leyden, Senior Software Engineer, Couchbase","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/"},"author":{"name":"Traun Leyden, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b9cdad74fec5e145772f6b482d307d81"},"headline":"Running Couchbase Server under Docker on Joyent Trident","datePublished":"2015-06-03T06:41:54+00:00","dateModified":"2017-05-03T21:22:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/"},"wordCount":1030,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/","url":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/","name":"Running Couchbase Server under Docker on Joyent Trident - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-06-03T06:41:54+00:00","dateModified":"2017-05-03T21:22:58+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/running-couchbase-server-under-docker-on-joyent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Running Couchbase Server under Docker on Joyent Trident"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b9cdad74fec5e145772f6b482d307d81","name":"Traun Leyden, Senior Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/30157f938e2acfb207327cb7f2dcb30f","url":"https:\/\/secure.gravatar.com\/avatar\/2d64cd81c39730f92585d245c0e9595289dedd208ad8cb9513c055c72647873f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2d64cd81c39730f92585d245c0e9595289dedd208ad8cb9513c055c72647873f?s=96&d=mm&r=g","caption":"Traun Leyden, Senior Software Engineer, Couchbase"},"description":"Traun Leyden is a Senior Software Engineer at Couchbase currently working on the Touch-DB\/Android project. Prior to Couchbase, Traun co-founded Signature Labs, a venture-backed startup that developed an iOS mobile CRM geolocation app that was deployed in Fortune 500 companies. Among his accomplishments, Traun developed a highly popular Android ringer control app called \"Buzzoff\" and created an open source Neural Network library written in Go that leverages Go channels\/goroutines to achieve high computation concurrency.","url":"https:\/\/www.couchbase.com\/blog\/author\/traun-leyden\/"}]}},"authors":[{"term_id":9030,"user_id":59,"is_guest":0,"slug":"traun-leyden","display_name":"Traun Leyden, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/2d64cd81c39730f92585d245c0e9595289dedd208ad8cb9513c055c72647873f?s=96&d=mm&r=g","author_category":"","last_name":"Leyden","first_name":"Traun","job_title":"","user_url":"","description":"Traun Leyden is a Senior Software Engineer at Couchbase currently working on the Touch-DB\/Android project. Prior to Couchbase, Traun co-founded Signature Labs, a venture-backed startup that developed an iOS mobile CRM geolocation app that was deployed in Fortune 500 companies. Among his accomplishments, Traun developed a highly popular Android ringer control app called \"Buzzoff\" and created an open source Neural Network library written in Go that leverages Go channels\/goroutines to achieve high computation concurrency."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/59"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1947"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1947\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=1947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1947"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}