{"id":16629,"date":"2017-03-17T16:15:11","date_gmt":"2017-03-17T14:15:11","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=16629"},"modified":"2017-12-19T12:09:56","modified_gmt":"2017-12-19T10:09:56","slug":"docker-ansible-example","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/","title":{"rendered":"Docker Ansible Example"},"content":{"rendered":"<p>When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and creating containers by hand, may not be the best way for managing Docker applications and services.<\/p>\n<p>Luckily, Ansible, one of the most powerful IT Automation tool, comes to the rescue here. Ansible offers modules for managing our Docker images and containers, in an amazingly easy way (as Ansible uses to with everything). Using Ansible for managing Docker containers, in combination with a version control system for keeping a track of the playbooks is, without any doubt, the best way to manage Docker.<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n[ulp id=&#8217;OCKUMTbC259tpbxG&#8217;]<br \/>\n&nbsp;<br \/>\nFor this tutorial, Linux Mint 18, Ansible 2.2.1.0 and Docker 1.12.6.<\/p>\n<div class=\"tip\"><strong>Tip<\/strong><br \/>\nYou may skip Ansible, Docker and Docker modules for Ansible,\u00a0and jump directly to the <a href=\"#section_2\"><strong>beginning of the example<\/strong><\/a> below.<\/div>\n<h2>1. Installation<\/h2>\n<p>We will start installing Ansible:<\/p>\n<pre class=\"brush:bash\">sudo apt-get update\r\nsudo apt-get install software-properties-common\r\nsudo apt-add-repository ppa:ansible\/ansible\r\nsudo apt-get update\r\nsudo apt-get install ansible<\/pre>\n<p>We will also need pip for installing the Docker module for Python:<\/p>\n<pre class=\"brush:bash\">sudo apt-get install python-pip python-dev build-essential \r\nsudo pip install --upgrade pip<\/pre>\n<p>Now, we can install the Docker module:<\/p>\n<pre class=\"brush:bash\">sudo pip install docker-py<\/pre>\n<p>Obviously, in the host we are going to run Docker (localhost for this example), we will need to have it installed:<\/p>\n<pre class=\"brush:bash\">sudo apt-get install docker.io<\/pre>\n<h2 id=\"section_2\">2. Using\u00a0Docker with Ansible<\/h2>\n<p>Ansible offers two modules for dealing with Docker: <code>docker_image<\/code> and <code>docker_container<\/code>. Let&#8217;s see how to use them for different scenarios.<\/p>\n<h3>2.1. Pulling images<\/h3>\n<p>For pulling images from the Docker Hub, the module to use is, naturally, the docker_image. For example, for pulling an Ubuntu image, our playbook would be:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker_pull.yml<\/em><\/span><\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: Pull Ubuntu image\r\n    docker_image:\r\n      name: ubuntu<\/pre>\n<p>That&#8217;s it! Executing this playbook:<\/p>\n<pre class=\"brush:bash\">ansible-playbook docker_pull.yml<\/pre>\n<p>Would result in the download of the Ubuntu image in the host (localhost, in this case). We can check that the image was effectively pulled executing:<\/p>\n<pre class=\"brush:bash\">docker images<\/pre>\n<p>We may also want to specify the tag of the image:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker_pull.yml<\/em><\/span><\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: Pull Ubuntu image\r\n    docker_image:\r\n      name: ubuntu\r\n      tag: 17.04<\/pre>\n<h3>2.2. Building images<\/h3>\n<p>Let&#8217;s consider a extremely simple Dockerfile, for installing Nginx in an Ubuntu image:<\/p>\n<p><em><span style=\"text-decoration: underline;\">docker_nginx\/Dockerfile<\/span><\/em><\/p>\n<pre class=\"brush:bash\">FROM ubuntu:17.04\r\nMAINTAINER Julen Pardo &lt;julen.pardo@outlook.es&gt;\r\n\r\nENV DEBIAN_FRONTEND=noninteractive\r\n\r\nRUN apt-get update\r\nRUN apt-get install -y nginx<\/pre>\n<p>For building it with Ansible, we also have to use the docker_image module, in almost an identical way as for pulling:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker_build.yml<\/em><\/span><\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: Build Nginx image\r\n    docker_image:\r\n      path: .\/docker_nginx\r\n      name: my-nginx\r\n      tag: 0.1<\/pre>\n<p>As we can see, the only difference is that we have to specify the path to the Dockerfile. The name and the tags are specified in the same way.<\/p>\n<p>We can also push it to a Docker Hub repository very easily:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker_build.yml<\/em><\/span><\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: Build Nginx image\r\n    docker_image:\r\n      path: .\/docker_nginx\r\n      name: registry.ansible.com\/julenpardo\/my-nginx\r\n      tag: 0.1\r\n      push: yes<\/pre>\n<h3>2.3. Creating containers<\/h3>\n<p>After seeing the ways to set our images, it&#8217;s time to create the containers!<\/p>\n<p>For this, we will take the example of the creation of the Nginx container, for starting to have more thorough playbooks:<\/p>\n<p><span style=\"text-decoration: underline;\"><em>docker_build.yml<\/em><\/span><\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n  - name: Build Nginx image\r\n    docker_image:\r\n      path: .\/docker_nginx\r\n      name: my-nginx\r\n      tag: 0.1\r\n\r\n  - name: Create Nginx container\r\n    docker_container:\r\n      name: my-nginx1\r\n      image: my-nginx:0.2<\/pre>\n<p>The second task is enough to create our Nginx container. But it will be exited immediately. And we didn&#8217;t even bind the ports with the host. To do so, we just have to do the following:<\/p>\n<pre class=\"brush:bash\">  - name: Create another Nginx container\r\n    docker_container:\r\n      name: my-nginx2\r\n      image: my-nginx:0.2\r\n      ports:\r\n        - \"80:80\"\r\n      env:\r\n        KEY: value\r\n      command: sleep infinity<\/pre>\n<p>That&#8217;s it. Note that we also defined some environmental variable as an example.<\/p>\n<h3>2.4. Other operations with containers<\/h3>\n<p>Of course, creating them is not the only operation we may need to do with Docker. For removing, stopping, etc. we have to use the <code>state<\/code>\u00a0parameter, which has the following values available:<\/p>\n<ul>\n<li><code>started<\/code> (default): create the container. The default option; if we don&#8217;t specify any, a container will be created.<\/li>\n<li><code>present<\/code>: checks that a container, for the given name and configuration, exists. If it doesn&#8217;t match, the container will be created.<\/li>\n<li><code>started<\/code>: same as <code>present<\/code>, but we can use the <code>restart<\/code> parameter for restarting the container if exists and it&#8217;s stopped.<\/li>\n<li><code>absent<\/code>: for stopping and removing the container of the given name.<\/li>\n<li><code>stopped<\/code>: checks that the container it&#8217;s first <code>present<\/code>, and then, sets it as stopped. For removing instead of stopping, we have to use <code>force_kill<\/code> parameter.<\/li>\n<\/ul>\n<p>Let&#8217;s play with this options:<\/p>\n<pre class=\"brush:bash\">---\r\n- hosts: localhost\r\n  tasks:\r\n    - name: Build Nginx image\r\n      docker_image:\r\n        path: .\/docker_nginx\r\n        name: my-nginx\r\n        tag: 0.3\r\n\r\n    - name: Create another Nginx container\r\n      docker_container:\r\n        name: my-nginx3\r\n        image: my-nginx:0.3\r\n        command: sleep infinity\r\n\r\n    - name: Stop Nginx container\r\n      docker_container:\r\n        name: my-nginx3\r\n        state: stopped\r\n\r\n    - name: Check that Nginx container exists (it does)\r\n      docker_container:\r\n        name: my-nginx3\r\n        image: my-nginx:0.3\r\n        state: present\r\n\r\n    - name: Check that Nginx container exists, and restart it if it does (it does)\r\n      docker_container:\r\n        name: my-nginx3\r\n        image: my-nginx:0.3\r\n        state: started\r\n        restart: true\r\n\r\n    - name: Remove Nginx container\r\n      docker_container:\r\n        name: my-nginx3\r\n        state: absent<\/pre>\n<h2>3. Summary<\/h2>\n<p>In this example we have seen how to manage our Docker images and containers with Ansible, in an extremely easy and comfortable way. Using Ansible in combination with Docker will allow us to manage our containers within our servers (or locally, as done in the example) more easily, and exactly knowing which configuration is set for each one.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and creating containers by hand, may not be the best way for managing Docker applications and services. Luckily, Ansible, one of the most powerful IT Automation tool, comes to the rescue &hellip;<\/p>\n","protected":false},"author":160,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217],"class_list":["post-16629","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Ansible Example - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and\" \/>\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.webcodegeeks.com\/devops\/docker-ansible-example\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Ansible Example - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2017-03-17T14:15:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-12-19T10:09:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Toni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Toni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\"},\"author\":{\"name\":\"Toni\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966\"},\"headline\":\"Docker Ansible Example\",\"datePublished\":\"2017-03-17T14:15:11+00:00\",\"dateModified\":\"2017-12-19T10:09:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\"},\"wordCount\":665,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"keywords\":[\"Docker\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\",\"name\":\"Docker Ansible Example - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2017-03-17T14:15:11+00:00\",\"dateModified\":\"2017-12-19T10:09:56+00:00\",\"description\":\"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker Ansible Example\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966\",\"name\":\"Toni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g\",\"caption\":\"Toni\"},\"url\":\"https:\/\/www.webcodegeeks.com\/author\/julen-pardo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker Ansible Example - Web Code Geeks - 2026","description":"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and","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.webcodegeeks.com\/devops\/docker-ansible-example\/","og_locale":"en_US","og_type":"article","og_title":"Docker Ansible Example - Web Code Geeks - 2026","og_description":"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and","og_url":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2017-03-17T14:15:11+00:00","article_modified_time":"2017-12-19T10:09:56+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","type":"image\/jpeg"}],"author":"Toni","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Toni","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/"},"author":{"name":"Toni","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966"},"headline":"Docker Ansible Example","datePublished":"2017-03-17T14:15:11+00:00","dateModified":"2017-12-19T10:09:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/"},"wordCount":665,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","keywords":["Docker"],"articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/","url":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/","name":"Docker Ansible Example - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2017-03-17T14:15:11+00:00","dateModified":"2017-12-19T10:09:56+00:00","description":"When one uses Docker for a while, after the excitement of how amazing is Docker is gone, he starts realizing that building and pulling images,\u00a0and","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-ansible-example\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.webcodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Docker Ansible Example"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/54a7be647b0b871cff41cbf3d2a95966","name":"Toni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c1661474c78b4757355b8beef9ab1d14f490ee3a3e67392f4e618d36643d4c?s=96&d=mm&r=g","caption":"Toni"},"url":"https:\/\/www.webcodegeeks.com\/author\/julen-pardo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/160"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=16629"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16629\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/10356"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=16629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=16629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=16629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}