{"id":1067,"date":"2017-09-05T12:49:23","date_gmt":"2017-09-05T17:49:23","guid":{"rendered":"https:\/\/www.softwareab.net\/wordpress\/?p=1067"},"modified":"2017-09-05T20:05:21","modified_gmt":"2017-09-06T01:05:21","slug":"e-z-minishift-environment","status":"publish","type":"post","link":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/","title":{"rendered":"An E-Z MiniShift Environment"},"content":{"rendered":"<p>We just created a new GitHub project to run <a href=\"https:\/\/docs.openshift.org\/latest\/minishift\/index.html\">MiniShift<\/a> &#8211; the easy-to-use and easy-to-configure <a href=\"https:\/\/docs.openshift.org\/latest\/welcome\/index.html\">OpenShift<\/a> environment you can run locally. Read on to see why we made this project and how it can help you.<\/p>\n<p><strong>Where is the Code??<\/strong> Just want to get the code and bang around on it? Don&#8217;t blame you! <a href=\"https:\/\/github.com\/andybrucenet\/sab-minishift\">Use this link to get to our supporting GitHub project<\/a>.<\/p>\n<h2>Why? <em>The Mac Dilemma for MiniShift<\/em><\/h2>\n<p>The driving factor behind this effort was to provide better support for MiniShift running on Mac OSx. The problem is that MiniShift actually runs as <a href=\"https:\/\/hub.docker.com\/_\/docker\/\">a Docker-in-Docker solution<\/a> on the Mac (as well as on Windows). This is vexing because we already run a native <a href=\"https:\/\/docs.docker.com\/docker-for-mac\/\">Docker for Mac<\/a>; the problems are threefold:<\/p>\n<ul>\n<li><strong>Why have two Dockers?<\/strong> &#8211; Basically, why even use two separate Docker instances?<\/il>\n<li><strong>Running <code>docker<\/code> becomes ambiguous<\/strong> &#8211; When we run the the <code>docker<\/code> command, which Docker will be executed?<\/li>\n<li><strong>How to Access the Docker running Minishift<\/strong> &#8211; In other words, if you want to run a command <em>directly on the Docker VM<\/em>, how can you do so when Docker itself is hidden behind your Minishift deployment?<\/li>\n<\/ul>\n<p>As we said&#8211;a vexing set of problems. Let us tackle them individually, shall we?<\/p>\n<h2>The Case of the Multiple Dockers<\/h2>\n<p>Our solution &#8211; at least today &#8211; does not address Vexing Problem #1 &#8211; <em>Why have two Dockers?<\/em>. But we came very close to solving it \ud83d\ude42<\/p>\n<p>Basically, remember that MiniShift is nothing more than a basic OpenShift installed on top of a single-node <a href=\"https:\/\/kubernetes.io\">Kubernetes<\/a> deployment. When you deploy MiniShift, you are actually creating a Kubernetes environment &#8211; and that Kubernetes environment requires a container management system. By default (and the most common solution), this Kubernetes will use an already-present <a href=\"https:\/\/www.docker.com\">Docker<\/a> installation. So&#8230;all MiniShift is doing is:<\/p>\n<ol>\n<li>Install a local Docker<\/li>\n<li>Deploy a local Kubernetes on top of that Docker<\/li>\n<li>Install OpenShift command-line tools and configure the Kubernetes environment to run OpenShift<\/li>\n<\/ol>\n<p>Thus, if one already has a local Docker (<em>check!<\/em>), and one has a local Kubernetes environment already created (<em>check check!<\/em>), then one should be able to deploy a full OpenShift on top of that environment relatively easily.<\/p>\n<p>Except one cannot. Sadly, as <a href=\"https:\/\/github.com\/kubernetes\/examples\/issues\/23\">this post highlights<\/a>, one <strong>must<\/strong> install OpenShift on a &#8220;built-in&#8221; Kubernetes. Which was quite sad, especially since the <a href=\"https:\/\/github.com\/streamplace\/kube-for-mac\">Kube-for-Mac project<\/a> that runs Kubernetes natively on top of the Docker already on the Mac (and to which we contribute <strong>heavily<\/strong>) would have allowed us to run an entire OpenShift on our local MacBook Pro.<\/p>\n<p>So what does this have to do with MiniShift? Quite a lot&#8230;since we did not crack the code to get OpenShift running on our own Kubernetes (thus, on the locally-installed Docker), we had to settle for running on an OpenShift-deployed Docker \/ Kubernetes. And the easiest way to do this is by using MiniShift &#8211; which will install a helper VM to run a reserved Docker instance and will then install Kubernetes on top of that Docker.<\/p>\n<p>In short &#8211; we have to accept that at least two Docker instances will be running. And we wanted an easy way to handle that from the command line, which led us to create this project.<\/p>\n<h2>Running an Isolated MiniShift Environment<\/h2>\n<p>OK &#8211; so we aren&#8217;t directly addressing our vexing two problems (&#8220;<em>Running <code>docker<\/code> becomes ambiguous<\/em>&#8221; and &#8220;<em>How to Access the Docker running Minishift<\/em> directly&#8221;). But, if you read on you will see that we hit both of those topics &#8211; as well as others.<\/p>\n<p>By this point we have learned that we are going to require a dedicated Docker \/ Kubernetes environment to run OpenShift, and MiniShift is a great, simple way to do this. But we want to use MiniShift in such a way that we never interfere with our &#8220;native&#8221; Docker installation. Furthermore, since we also run <a href=\"\/wordpress\/kubernetes-for-mac\/\">Kubernetes for Mac<\/a> locally &#8211; it&#8217;s quite possible that at any given time we&#8217;ll have Kubernetes up and running &#8211; and this Kubernetes is completely independent of the MiniShift \/ OpenShift environment we want to install.<\/p>\n<p>That is where our code project comes into play. You simply clone <a href=\"https:\/\/github.com\/andybrucenet\/sab-minishift\">our MiniShift GitHub project<\/a>, verify a few prerequisites, and you should be able to install, configure, and use MiniShift without any impact either from or to any other Docker \/ Kubernetes environments you have locally installed.<\/p>\n<h3>1. Get Ready&#8230;<\/h3>\n<p>From a shell, clone the project:<\/p>\n<pre><code>\r\ngit clone https:\/\/github.com\/andybrucenet\/sab-minishift.git\r\n<\/code><\/pre>\n<p>Review the <a href=\"https:\/\/github.com\/andybrucenet\/sab-minishift\">README<\/a> and verify you have the prerequisites installed.<\/p>\n<h3>2. Get Set&#8230;<\/h3>\n<p>Still in your shell, startup the environment:<\/p>\n<pre><code>\r\n.\/scripts\/build-utils.sh up\r\n<\/code><\/pre>\n<p>This configures your local MiniShift environment and starts everything up. Here is some sample output:<\/p>\n<pre><code>\r\n***Build project...\r\nStart MiniShift...\r\n-- Checking if xhyve driver is installed ...\r\n   Driver is available at \/usr\/local\/bin\/docker-machine-driver-xhyve\r\n   Checking for setuid bit ... OK\r\n-- Starting local OpenShift cluster using 'xhyve' hypervisor ...\r\n-- Minishift VM will be configured with ...\r\n   Memory:    2 GB\r\n   vCPUs :    2\r\n   Disk size: 20 GB\r\n\r\n   Downloading ISO\r\n[...much cruft ensues...]\r\nThe server is accessible via web console at:\r\n    https:\/\/192.168.64.2:8443\r\n\r\nYou are logged in as:\r\n    User:     developer\r\n    Password: <any value>\r\n\r\nTo login as administrator:\r\n    oc login -u system:admin\r\n<\/code><\/pre>\n<h3>3. Go!<\/h3>\n<p>At this point, you should have a complete MiniShift \/ OpenShift environment. To access, you can use the command line or the browser.<\/p>\n<h4>Access MiniShift via Browser<\/h4>\n<ul>\n<li>The browser should be Chrome or Firefox. For sure, Safari does <strong>not<\/strong> work.<\/li>\n<li>Open <a href=\"https:\/\/192.168.64.2:8443\">https:\/\/192.168.64.2:8443<\/a> (<em>check this against the address output by <code>.\/scripts\/build-utils.sh up<\/code> above.<\/em>)<\/li>\n<li>Click through any of the <a href=\"https:\/\/support.google.com\/chrome\/answer\/6098869?hl=en\">&#8220;Your connection is not private&#8221;<\/a> error screens; you will get these because MiniShift creates its own <a href=\"https:\/\/github.com\/minishift\/minishift\/issues\/1031\">local Certificate Authority<\/a> that results in these screens.<\/li>\n<li>Login to the OpenShift console; use <code>developer<\/code> as the Username and anything you want as the password (it just cannot be an empty password).<\/li>\n<li>You should see the result:<br \/>\n<figure id=\"attachment_1068\" aria-describedby=\"caption-attachment-1068\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-300x146.png\" alt=\"OpenShift console via MiniShift\" width=\"300\" height=\"146\" class=\"size-medium wp-image-1068\" srcset=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-300x146.png 300w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-100x49.png 100w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-150x73.png 150w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-200x98.png 200w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-450x219.png 450w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console-600x293.png 600w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2017\/09\/minishift-console.png 691w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-1068\" class=\"wp-caption-text\">OpenShift Console<\/figcaption><\/figure>\n<\/ul>\n<h4>Access MiniShift via Command Line<\/h4>\n<p>This one is simpler: simply use our wrapper functions:<\/p>\n<pre><code>\r\n.\/scripts\/build-utils.sh minishift oc [...oc command arguments...]\r\n<\/code><\/pre>\n<p>Here&#8217;s an example:<\/p>\n<pre><code>\r\nMacBook-Pro:sab-minishift l.abruce$ <strong>.\/scripts\/build-utils.sh minishift oc get project<\/strong>\r\n<em>NAME        DISPLAY NAME   STATUS\r\nmyproject   My Project     Active<\/em>\r\n<\/code><\/pre>\n<p>Please see the <a href=\"https:\/\/github.com\/andybrucenet\/sab-minishift\">project README<\/a> for more details and examples.<\/p>\n<h4>Access MiniShift Docker VM<\/h4>\n<p>The third question we had was: how to access the VM running Docker that MiniShift creates? You may want to do this if you need to setup shares to your local disk, take actions on the actual Docker engine&#8230;for example, our <a href=\"https:\/\/github.com\/andybrucenet\/kube-for-mac\">Kubernetes-for-Mac<\/a> fork does a <em>lot<\/em> to Docker under the covers, and you never know if you may need the same access.<\/p>\n<p>Our approach is simplicity itself: we simply run a Docker container that <em>mounts the Docker Engine on its local host<\/em>. In the case where Docker is running as a VM, this means the Docker Engine&#8217;s local host is the running VM.<\/p>\n<p>Here&#8217;s how to access a shell on the MiniShift-created VM running Docker: <\/p>\n<pre><code>\r\n.\/scripts\/build-utils.sh minishift-docker sh\r\n<\/code><\/pre>\n<p>Here&#8217;s another example to list the network interfaces:<\/p>\n<pre><code>\r\n.\/scripts\/build-utils.sh minishift-docker ip a show\r\n<\/code><\/pre>\n<p>That is all for now; please check out the project for more information.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We just created a new GitHub project to run MiniShift &#8211; the easy-to-use and easy-to-configure OpenShift environment you can run locally. Read on to see why we made this project and how it can help you. Where is the Code?? &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\"> <span class=\"screen-reader-text\">An E-Z MiniShift Environment<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[96,1],"tags":[87,94,97,71],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>An E-Z MiniShift Environment - softwareab<\/title>\n<meta name=\"description\" content=\"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!\" \/>\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.softwareab.net\/wordpress\/e-z-minishift-environment\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An E-Z MiniShift Environment - softwareab\" \/>\n<meta property=\"og:description\" content=\"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\" \/>\n<meta property=\"og:site_name\" content=\"softwareab\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-05T17:49:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-09-06T01:05:21+00:00\" \/>\n<meta name=\"author\" content=\"Andrew Bruce\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:site\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Bruce\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\"},\"author\":{\"name\":\"Andrew Bruce\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"headline\":\"An E-Z MiniShift Environment\",\"datePublished\":\"2017-09-05T17:49:23+00:00\",\"dateModified\":\"2017-09-06T01:05:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\"},\"wordCount\":1040,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"keywords\":[\"docker\",\"kubernetes\",\"OpenShift\",\"virtualization\"],\"articleSection\":[\"OpenShift\",\"Teknocratica\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\",\"name\":\"An E-Z MiniShift Environment - softwareab\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\"},\"datePublished\":\"2017-09-05T17:49:23+00:00\",\"dateModified\":\"2017-09-06T01:05:21+00:00\",\"description\":\"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"docker\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/tag\/docker\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An E-Z MiniShift Environment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/\",\"name\":\"softwareab\",\"description\":\"Technocratica, Technopolitik, Technophobia\",\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\",\"name\":\"Andrew Bruce\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"contentUrl\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"width\":400,\"height\":330,\"caption\":\"Andrew Bruce\"},\"logo\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\"},\"description\":\"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!\",\"sameAs\":[\"http:\/\/cloudraticsolutions.net\/\",\"https:\/\/www.facebook.com\/cloudraticsolutions\/\",\"https:\/\/twitter.com\/realcloudratics\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An E-Z MiniShift Environment - softwareab","description":"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!","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.softwareab.net\/wordpress\/e-z-minishift-environment\/","og_locale":"en_US","og_type":"article","og_title":"An E-Z MiniShift Environment - softwareab","og_description":"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!","og_url":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/","og_site_name":"softwareab","article_publisher":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_author":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_published_time":"2017-09-05T17:49:23+00:00","article_modified_time":"2017-09-06T01:05:21+00:00","author":"Andrew Bruce","twitter_card":"summary_large_image","twitter_creator":"@realcloudratics","twitter_site":"@realcloudratics","twitter_misc":{"Written by":"Andrew Bruce","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#article","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/"},"author":{"name":"Andrew Bruce","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"headline":"An E-Z MiniShift Environment","datePublished":"2017-09-05T17:49:23+00:00","dateModified":"2017-09-06T01:05:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/"},"wordCount":1040,"commentCount":0,"publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"keywords":["docker","kubernetes","OpenShift","virtualization"],"articleSection":["OpenShift","Teknocratica"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/","url":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/","name":"An E-Z MiniShift Environment - softwareab","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#website"},"datePublished":"2017-09-05T17:49:23+00:00","dateModified":"2017-09-06T01:05:21+00:00","description":"We just created a new project to run MiniShift - the easy-to-use and easy-to-configure local OpenShift environment. Read on to see why and how we did this!","breadcrumb":{"@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.softwareab.net\/wordpress\/e-z-minishift-environment\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.softwareab.net\/wordpress\/"},{"@type":"ListItem","position":2,"name":"docker","item":"https:\/\/www.softwareab.net\/wordpress\/tag\/docker\/"},{"@type":"ListItem","position":3,"name":"An E-Z MiniShift Environment"}]},{"@type":"WebSite","@id":"https:\/\/www.softwareab.net\/wordpress\/#website","url":"https:\/\/www.softwareab.net\/wordpress\/","name":"softwareab","description":"Technocratica, Technopolitik, Technophobia","publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600","name":"Andrew Bruce","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","contentUrl":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","width":400,"height":330,"caption":"Andrew Bruce"},"logo":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/"},"description":"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!","sameAs":["http:\/\/cloudraticsolutions.net\/","https:\/\/www.facebook.com\/cloudraticsolutions\/","https:\/\/twitter.com\/realcloudratics"]}]}},"_links":{"self":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1067"}],"collection":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/comments?post=1067"}],"version-history":[{"count":5,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1067\/revisions"}],"predecessor-version":[{"id":1074,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1067\/revisions\/1074"}],"wp:attachment":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/media?parent=1067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/categories?post=1067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/tags?post=1067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}