{"id":3621,"date":"2017-05-24T07:16:50","date_gmt":"2017-05-24T14:16:50","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3621"},"modified":"2023-06-19T02:19:02","modified_gmt":"2023-06-19T09:19:02","slug":"using-docker-develop-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/using-docker-develop-couchbase\/","title":{"rendered":"Uso de Docker para desarrollar con Couchbase"},"content":{"rendered":"<p><em><a href=\"https:\/\/twitter.com\/rafaelugolini\">Rafael Ugolini<\/a> is a full stack software developer currently based in Brussels, Belgium. <a href=\"https:\/\/www.linkedin.com\/in\/rafaelugolini\">He<\/a> has been working with software development for more than 10 years and is lately focused on designing web solutions and <a href=\"https:\/\/github.com\/rafaelugolini\">developing<\/a> using Python and JavaScript. Rafael Ugolini is Senior Software Developer at Famoco.<\/em><\/p>\n<h1><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/FullSizeRender.jpg\" alt=\"FullSizeRender\" width=\"213\" height=\"284\" \/><\/h1>\n<h3>Introduction<\/h3>\n<p>Docker is a great project that is helping developers around the world run applications in <a \/>containers<\/a>. This not only helps shipping software faster, but it also results with the famous \u201cit works in my machine\u201d phrase. In this article I will explain how to create a modular Couchbase image that doesn\u2019t require any Web UI interaction to have a ready-to-go database for you.<\/p>\n<p>All the code is available <a href=\"https:\/\/github.com\/rafaelugolini\/couchbase-server-nosetup\">online here<\/a>.<\/p>\n<h3>Dockerfile<\/h3>\n<p>The first step is to create the Dockerfile.<\/p>\n<h3>Couchbase Version<\/h3>\n<pre class=\"lang:default decode:true \">FROM\u00a0couchbase\/server:enterprise-4.6.1\r\n\r\n<\/pre>\n<p>This example is based on Couchbase Server Enterprise 4.6.1,\u00a0but you can feel free to change to the specific version you are running in your environment.<\/p>\n<h3>Memory Configuration<\/h3>\n<pre class=\"lang:default decode:true\">ENV\u00a0MEMORY_QUOTA 256\r\nENV\u00a0INDEX_MEMORY_QUOTA 256\r\nENV\u00a0FTS_MEMORY_QUOTA 256\r\n\r\n<\/pre>\n<p><span style=\"font-weight: 400\">All the values here are in MB:<\/span><\/p>\n<p><span style=\"font-weight: 400\">&#8211; MEMORY_QUOTA: per node data service ram quota<\/span><\/p>\n<p><span style=\"font-weight: 400\">&#8211; INDEX_MEMORY_QUOTA: per node index service ram quota<\/span><\/p>\n<p><span style=\"font-weight: 400\">&#8211; FTS_MEMORY_QUOTA: per node index service ram quota<\/span><\/p>\n<h3>Services<\/h3>\n<pre class=\"lang:default decode:true \">ENV SERVICES \"kv,n1ql,index,fts\"<\/pre>\n<p>These are the services that will be available for the node created:<\/p>\n<p>&#8211; kv: Data<\/p>\n<p>&#8211; n1ql: Query<\/p>\n<p>&#8211; index: Index<\/p>\n<p>&#8211; fts: Full-Text Search<\/p>\n<h3>Credentials<\/h3>\n<pre class=\"lang:default decode:true \">ENV\u00a0USERNAME \"Administrator\"\r\nENV\u00a0PASSWORD \"password\"<\/pre>\n<p>Username and password to be used in Couchbase Server.<\/p>\n<h3>Cluster Options<\/h3>\n<pre class=\"lang:default decode:true \">ENV\u00a0CLUSTER_HOST \"\"\r\nENV\u00a0CLUSTER_REBALANCE \"\"<\/pre>\n<p>These options are only used if you want to add more than one node in the cluster.<\/p>\n<p>&#8211; CLUSTER_HOST: hostname of the cluster for this node to join<\/p>\n<p>&#8211; CLUSTER_REBALANCE: set &#8220;true&#8221; if you want the cluster to rebalance after the node is joined<\/p>\n<h3>Entrypoint<\/h3>\n<pre class=\"lang:default decode:true \">COPY\u00a0entrypoint.sh \/config-entrypoint.sh\r\n\r\nENTRYPOINT\u00a0[\"\/config-entrypoint.sh\"]<\/pre>\n<p>The Couchbase Server image already ships with an entrypoint.sh script and we don&#8217;t want to override it. The trick here is to copy our version of entrypoint.sh to \/config-entrypoint.sh,\u00a0run Couchbase Server entrypoint.sh in the background,\u00a0and after configuring the node attach the script back to the original <em>ENTRYPOINT<\/em>.<\/p>\n<h3>Entrypoint<\/h3>\n<p>The <em>ENTRYPOINT<\/em>\u00a0is used in combination with the original script from the Couchbase Server image. Let\u2019s go line by line to understand how it works.<\/p>\n<h3>Initialize Couchbase Server<\/h3>\n<pre class=\"lang:default decode:true \"># Monitor mode (used to attach into couchbase entrypoint)\r\nset\u00a0-m\r\n# Send it to background\r\n\/entrypoint.sh couchbase-server &amp;<\/pre>\n<p>First we use set -m to enable job control, process running in background (like the original <em>ENTRYPOINT<\/em>) run in a separate process group. This option is turned off by default in non-interactive mode, like scripts.<\/p>\n<h3>Util Functions<\/h3>\n<pre class=\"lang:default decode:true \"># Check if couchbase server is up\r\ncheck_db() {\r\n\u00a0curl --silent https:\/\/127.0.0.1:8091\/pools &gt; \/dev\/null\r\n\u00a0echo\u00a0$?\r\n}\r\n\r\n<\/pre>\n<p>This function is used to check when Couchbase Server starts answering HTTP calls.<\/p>\n<pre class=\"lang:default decode:true \"># Variable used in echo\r\ni=1\r\n# Echo with\r\nnumbered_echo() {\r\necho\u00a0\"[$i] $@\"\r\ni=`expr $i\u00a0+ 1`\r\n}<\/pre>\n<p>This is just a util function, add a number before any echo in the script to count the steps taken automatically.<\/p>\n<pre class=\"lang:default decode:true \"># Parse JSON and get nodes from the cluster\r\nread_nodes() {\r\ncmd=\"import sys,json;\"\r\ncmd=\"${cmd} print(','.join([node['otpNode']\"\r\ncmd=\"${cmd} for node in json.load(sys.stdin)['nodes']\"\r\ncmd=\"${cmd} ]))\"\r\npython -c \"${cmd}\"\r\n}<\/pre>\n<p>In order to parse the output of the nodes in Couchbase Server API, I\u2019m using a function which runs ython to read <em>STDIN<\/em>, transform it to\u00a0JSON and the Couchbase nodes. This is used for rebalancing.<\/p>\n<h3>Configure the Node<\/h3>\n<pre class=\"lang:default decode:true \"># Wait until it's ready\r\nuntil [[ $(check_db) = 0 ]]; do\r\n&gt;&amp;2 numbered_echo \"Waiting for Couchbase Server to be available\"\r\nsleep 1\r\ndone\r\n\r\necho\u00a0\"# Couchbase Server Online\"\r\necho\u00a0\"# Starting setup process\"<\/pre>\n<p>The first step is to wait until the server is ready, then using the function <em>numbered_echo<\/em>\u00a0you can see how long it took for Couchbase Server to have the API calls available.<\/p>\n<pre class=\"lang:default decode:true \">HOSTNAME=`hostname -f`\r\n\r\n# Reset steps\r\ni=1<\/pre>\n<p>Then we set a variable <em>HOSTNAME<\/em>\u00a0to be used in all the API calls we do and we also reset the counter from <em>numbered_echo <\/em>by setting it to 1.<\/p>\n<pre class=\"lang:default decode:true \">numbered_echo \"Initialize the node\"\r\ncurl --silent \"https:\/\/${HOSTNAME}:8091\/nodes\/self\/controller\/settings\"\u00a0\\\r\n-d path=\"\/opt\/couchbase\/var\/lib\/couchbase\/data\"\u00a0\\\r\n-d index_path=\"\/opt\/couchbase\/var\/lib\/couchbase\/data\"\r\n\r\nnumbered_echo \"Setting hostname\"\r\ncurl --silent \"https:\/\/${HOSTNAME}:8091\/node\/controller\/rename\"\u00a0\\\r\n-d hostname=${HOSTNAME}<\/pre>\n<p>&nbsp;<\/p>\n<p>First thing to do is to set up disk storage configuration and then we set the hostname.<\/p>\n<h3>Joining a Cluster<\/h3>\n<pre class=\"lang:default decode:true \">if\u00a0[[ ${CLUSTER_HOST}\u00a0]];then\r\nnumbered_echo \"Joining cluster ${CLUSTER_HOST}\"\r\ncurl --silent -u ${USERNAME}:${PASSWORD}\u00a0\\\r\n\"https:\/\/${CLUSTER_HOST}:8091\/controller\/addNode\"\u00a0\\\r\n-d hostname=\"${HOSTNAME}\"\u00a0\\\r\n-d user=\"${USERNAME}\"\u00a0\\\r\n-d password=\"${PASSWORD}\"\u00a0\\\r\n-d services=\"${SERVICES}\"\u00a0&gt; \/dev\/null<\/pre>\n<p>If <em>CLUSTER_HOST <\/em>is set, the script will try to add the current <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.5\/install\/deploy-with-docker-hub.html\">container<\/a> to the cluster.<\/p>\n<pre class=\"lang:default decode:true \">if\u00a0[[ ${CLUSTER_REBALANCE}\u00a0]]; then\r\n# \"Unexpected server error without the sleep 2\r\nsleep 2\r\nnumbered_echo \"Retrieving nodes\"\r\nknown_nodes=$(\r\ncurl --silent -u ${USERNAME}:${PASSWORD}\u00a0https:\/\/${CLUSTER_HOST}:8091\/pools\/default | read_nodes\r\n)\r\n\r\nnumbered_echo \"Rebalancing cluster\"\r\ncurl -u ${USERNAME}:${PASSWORD}\u00a0\\\r\n\"https:\/\/${CLUSTER_HOST}:8091\/controller\/rebalance\"\u00a0\\\r\n-d knownNodes=\"${known_nodes}\"\r\nfi\r\n\r\nelse<\/pre>\n<p>After adding the node into the cluster, the script can also check for the variable <em>CLUSTER_REBALANCE<\/em>\u00a0to see if it needs to rebalance the cluster automatically. This is where we use the Python function to read the nodes from <em>\/pools\/default <\/em>endpoint.<\/p>\n<h3>Not joining a cluster<\/h3>\n<pre class=\"lang:default decode:true \">numbered_echo \"Setting up memory\"\r\ncurl --silent \"https:\/\/${HOSTNAME}:8091\/pools\/default\"\u00a0\\\r\n-d memoryQuota=${MEMORY_QUOTA}\u00a0\\\r\n-d indexMemoryQuota=${INDEX_MEMORY_QUOTA}\u00a0\\\r\n-d ftsMemoryQuota=${FTS_MEMORY_QUOTA}<\/pre>\n<p>Memory settings for the services.<\/p>\n<pre class=\"lang:default decode:true \">numbered_echo \"Setting up services\"\r\ncurl --silent \"https:\/\/${HOSTNAME}:8091\/node\/controller\/setupServices\"\u00a0\\\r\n-d services=\"${SERVICES}\"<\/pre>\n<p>Services to be used by the node.<\/p>\n<pre class=\"lang:default decode:true \">numbered_echo \"Setting up user credentials\"\r\ncurl --silent \"https:\/\/${HOSTNAME}:8091\/settings\/web\"\u00a0\\\r\n-d port=8091 \\\r\n-d username=${USERNAME}\u00a0\\\r\n-d password=${PASSWORD}\u00a0&gt; \/dev\/null\r\n\r\nfi<\/pre>\n<p>Set up the credentials for the node.<\/p>\n<h3>Finalize<\/h3>\n<pre class=\"lang:default decode:true \"># Attach to couchbase entrypoint\r\nnumbered_echo \"Attaching to couchbase-server entrypoint\"\r\nfg\u00a01<\/pre>\n<p>To end the script,\u00a0we attach it to the original <em>ENTRYPOINT<\/em>.<\/p>\n<h3>Example<\/h3>\n<p>To demonstrate how to use it, I will be using the image registered in <a href=\"https:\/\/hub.docker.com\/r\/rugolini\/couchbase-server-nosetup\/\">Docker Hub<\/a> with the code <a href=\"https:\/\/github.com\/rafaelugolini\/couchbase-server-nosetup\"><u>here<\/u><\/a>.<\/p>\n<h3>Single node<\/h3>\n<p>&nbsp;<\/p>\n<pre class=\"lang:default decode:true\">docker run -ti --name couchbase-server-nosetup \\\r\n-h node1.cluster \\\r\n-p 8091-8093:8091-8093 \\\r\n-p 11210:11210 \\\r\n-p 4369:4369 \\\r\n-p 21100-21299:21100-21299 \\\r\nrugolini\/couchbase-server-nosetup<\/pre>\n<p>This runs a single node using the minimum required memory and the default credentials (<em>Administrator\/password<\/em>) registered in the image. All the network ports <a href=\"https:\/\/www.couchbase.com\/products\/server\/\">Couchbase Server<\/a> uses are exposed as well.<\/p>\n<pre class=\"lang:default decode:true \">docker run -ti --name couchbase-server-nosetup \\\r\n-h node1.cluster \\\r\n-p 8091-8093:8091-8093 \\\r\n-p 11210:11210 \\\r\n-p 4369:4369 \\\r\n-e MEMORY_QUOTA=512 \\\r\n-e INDEX_MEMORY_QUOTA=512 \\\r\n-e FTS_MEMORY_QUOTA=512 \\\r\n-e USERNAME=admin \\\r\n-e PASSWORD=adminadmin \\\r\n-p 21100-21299:21100-21299 \\\r\nrugolini\/couchbase-server-nosetup<\/pre>\n<p>The command above plays a little with the environment variables available in the Dockerfile.<\/p>\n<h3>Cluster<\/h3>\n<p>In this example, we will connect 3 nodes in the cluster.<\/p>\n<pre class=\"lang:default decode:true \">docker network create couchbase\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>We\u00a0must\u00a0first create a network Couchbase where we will connect all nodes.<\/p>\n<pre class=\"lang:default decode:true \">docker run -ti --name node1.cluster \\\r\n-p 8091-8093:8091-8093 \\\r\n-p 11210:11210 \\\r\n-p 4369:4369 \\\r\n-p 21100-21299:21100-21299 \\\r\n-h node1.cluster \\\r\n--network=couchbase \\\r\nrugolini\/couchbase-server-nosetup<\/pre>\n<p>Then we create the first node.<\/p>\n<pre class=\"lang:default decode:true \">docker run -ti --name node2.cluster \\\r\n--network=couchbase \\\r\n-h node2.cluster \\\r\n-e CLUSTER_HOST=node1.cluster \\\r\n-e CLUSTER_REBALANCE=true\u00a0\\\r\nrugolini\/couchbase-server-nosetup<\/pre>\n<p>&nbsp;<\/p>\n<p>Since all the network ports are exposed in the first node, it\u2019s not necessary to expose them here.<\/p>\n<p>Attention to the detail that <em>CLUSTER_HOST<\/em>\u00a0is set to <em>node1.cluster<\/em>\u00a0which is the hostname of the first node and <em>CLUSTER_REBALANCE<\/em>\u00a0is also set to <em>true<\/em>. Once the node is added to the cluster, it will rebalance automatically.<\/p>\n<pre class=\"lang:default decode:true \">docker run -ti --name node3.cluster \\\r\n--network=couchbase \\\r\n-h node3.cluster \\\r\n-e CLUSTER_HOST=node1.cluster \\\r\nrugolini\/couchbase-server-nosetup<\/pre>\n<p>&nbsp;<\/p>\n<p>The node3 is also added to the cluster,\u00a0but since <em>CLUSTER_REBALANCE<\/em>\u00a0wasn\u2019t set, it will require manual rebalance of the cluster for it to become available.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/community\/community-writers-program\/\"><em>This post is part of the Couchbase Community Writing Program<\/em><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker es un gran proyecto que est\u00e1 ayudando a desarrolladores de todo el mundo a ejecutar aplicaciones en contenedores. Esto no s\u00f3lo ayuda a enviar software m\u00e1s r\u00e1pido, sino que tambi\u00e9n da lugar a la famosa frase \"funciona en mi m\u00e1quina\". En este art\u00edculo explicar\u00e9 c\u00f3mo crear una imagen modular de Couchbase que no requiera ninguna interacci\u00f3n con la interfaz de usuario web para tener una base de datos lista para usar.<\/p>","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[1520,1519],"ppma_author":[9026],"class_list":["post-3621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-containers","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Using Docker to develop with Couchbase - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"See how to create a modular Couchbase image that doesn\u2019t require any Web UI interaction to have a ready-to-go database for you.\" \/>\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\/es\/using-docker-develop-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Docker to develop with Couchbase\" \/>\n<meta property=\"og:description\" content=\"See how to create a modular Couchbase image that doesn\u2019t require any Web UI interaction to have a ready-to-go database for you.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/using-docker-develop-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-24T14:16:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-19T09:19:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/FullSizeRender.jpg\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, 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=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Using Docker to develop with Couchbase\",\"datePublished\":\"2017-05-24T14:16:50+00:00\",\"dateModified\":\"2023-06-19T09:19:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/\"},\"wordCount\":857,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"containers\",\"docker\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/\",\"name\":\"Using Docker to develop with Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-05-24T14:16:50+00:00\",\"dateModified\":\"2023-06-19T09:19:02+00:00\",\"description\":\"See how to create a modular Couchbase image that doesn\u2019t require any Web UI interaction to have a ready-to-go database for you.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/using-docker-develop-couchbase\\\/#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\\\/using-docker-develop-couchbase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Docker to develop with Couchbase\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\\\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/laura-czajkowski\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using Docker to develop with Couchbase - The Couchbase Blog","description":"Mira c\u00f3mo crear una imagen modular de Couchbase que no requiera ninguna interacci\u00f3n con la interfaz de usuario web para tener una base de datos lista para usar.","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\/es\/using-docker-develop-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"Using Docker to develop with Couchbase","og_description":"See how to create a modular Couchbase image that doesn\u2019t require any Web UI interaction to have a ready-to-go database for you.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/using-docker-develop-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-05-24T14:16:50+00:00","article_modified_time":"2023-06-19T09:19:02+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/05\/FullSizeRender.jpg","type":"","width":"","height":""}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Using Docker to develop with Couchbase","datePublished":"2017-05-24T14:16:50+00:00","dateModified":"2023-06-19T09:19:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/"},"wordCount":857,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["containers","docker"],"articleSection":["Couchbase Server"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/","name":"Using Docker to develop with Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-05-24T14:16:50+00:00","dateModified":"2023-06-19T09:19:02+00:00","description":"Mira c\u00f3mo crear una imagen modular de Couchbase que no requiera ninguna interacci\u00f3n con la interfaz de usuario web para tener una base de datos lista para usar.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/using-docker-develop-couchbase\/#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\/using-docker-develop-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Docker to develop with Couchbase"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, Directora de la Comunidad de Desarrolladores, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/laura-czajkowski\/"}]}},"acf":[],"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3621"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3621"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}