{"id":979,"date":"2016-05-05T21:43:45","date_gmt":"2016-05-06T02:43:45","guid":{"rendered":"https:\/\/www.softwareab.net\/wordpress\/?p=979"},"modified":"2016-05-05T21:51:02","modified_gmt":"2016-05-06T02:51:02","slug":"run-gitlab-docker","status":"publish","type":"post","link":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/","title":{"rendered":"Run GitLab under Docker"},"content":{"rendered":"<p>My current project includes migrating my corporate site at will between cloud providers &#8211; including my own personal dev environment. So I could use OpenShift, possibly Cloud9, etc. but I already have so much running fine as a standalone VM. What I really want to do is to make sure I can provision my web site automatically&#8230;and I choose Git in conjunction with Puppet!<\/p>\n<p>More specifically &#8211; I will use GitLab as a web front-end and to manage team access to the web site source, and so I want to run GitLab in my dev environment. But&#8230;I want to run GitLab as a Docker VM. And my dev environment is based on Mac OS X &#8211; and that is a problem! According to numerous posts it can&#8217;t be solved without an NFS mount (for example, see https:\/\/github.com\/docker-library\/postgres\/issues\/60). But I&#8217;m here to tell you that yes, you can run GitLab (including the PostgreSQL backend) under Docker under the Mac. And &#8211; by extension &#8211; easily on any other system.<\/p>\n<p>The problem is that when you run docker-machine under the Mac (or Windows) you &#8211; of course &#8211; are running a proxy VM for the Docker hypervisor (in my case, via VirtualBox on my Mac). Moreover, docker-machine will permit you to mount host directories to the managed VM (and get <code>\/Users<\/code> mounted automatically) &#8211; but you are unable to manage permissions from the VM. So when you install \/ run GitLab from <a href=\"https:\/\/github.com\/sameersbn\/docker-gitlab\">Sameer Naik&#8217;s excellent work<\/a> you will run into the problem of PostgreSQL trying to change ownership on mounted file volumes. It simply doesn&#8217;t work under docker-machine.<\/p>\n<p>You can get around the problem by making the VM larger (larger disk) but then if you dump your GitLab VM you lose your Git repositories! Not a good plan.<\/p>\n<p>So my approach? It is to mount additional, persistent disks to the docker-machine VM and then present those disks to the relevant containers.<\/p>\n<h3>Step 1 &#8211; Create a Persistent Disk<\/h3>\n<p>My &#8220;persistent disk&#8221; is simply a VDI created through VirtualBox in a known folder. Here&#8217;s the code:<\/p>\n<pre><code>\r\n# create local folder on host which can be shared with docker.\r\n# see https:\/\/github.com\/docker\/machine\/issues\/1826 for mac osx description\r\nif [ ! -s \/srv\/docker\/sab-data-01.vdi ]; then\r\n  echo 'Create VDI...'\r\n  sudo mkdir -p \/srv\/docker\r\n  sudo VBoxManage createhd --filename \/srv\/docker\/sab-data-01.vdi --size 65536 --format vdi --variant Standard\r\n  sudo chmod 777 \/srv\/docker\/sab-data-01.vdi\r\nfi\r\n<\/code><\/pre>\n<p>I create the VDI to be a max of 64GB &#8211; but it&#8217;s a dynamic disk so won&#8217;t be any bigger than is necessary.<\/p>\n<h3>Step 2 &#8211; Start \/ Attach <code>docker-machine<\/code><\/h3>\n<p>When you run docker-machine, you very well can get a brand-new proxy VM created for you. So my next task is to make sure that docker-machine is running and then attach my VDI to it. Here&#8217;s some code:<\/p>\n<pre><code>\r\n# are we started?\r\nl_docker_machine=$(docker-machine ls --quiet)\r\nif docker-machine status $l_docker_machine 2>\/dev\/null | grep --quiet -e 'Stopped'; then\r\n  echo 'Start Docker machine...'\r\n  docker-machine start\r\n  l_docker_machine=$(docker-machine ls --quiet)\r\nfi\r\n\r\n# are we attached?\r\nl_needs_restart=0\r\nif ! VBoxManage showvminfo $l_docker_machine 2>\/dev\/null | grep --quiet -e '\/srv\/docker\/sab-data-01.vdi'; then\r\n  echo 'Attach to Docker...'\r\n  VBoxManage storageattach $l_docker_machine --storagectl \"SATA\" --device 0 --port 2 --type hdd --medium \/srv\/docker\/sab-data-01.vdi\r\n  l_needs_restart=1\r\nfi\r\n<\/code><\/pre>\n<h3>Step 3: Initialize the Disk<\/h3>\n<p>On first-run, we have an uninitialized disk attached to the docker-machine VM. Let&#8217;s initialize it using good old ext4 (use anything you like; xfs, btrfs). <\/p>\n<pre><code>\r\n# do we need to init the disk?\r\nl_sdb1_init=$(docker-machine ssh $l_docker_machine '! blkid \/dev\/sdb1 && echo 1' 2>\/dev\/null | grep UUID)\r\nif [ x\"$l_sdb1_init\" = x ]; then\r\n  echo 'Initialize sdb1 on Docker...'\r\n  docker-machine ssh $l_docker_machine '(echo n;echo p;echo 1;echo;echo;echo w; echo q) | sudo fdisk \/dev\/sdb' 2>\/dev\/null\r\n  docker-machine restart $l_docker_machine \r\n  docker-machine ssh $l_docker_machine 'sudo mkfs.ext4 \/dev\/sdb1' 2>\/dev\/null\r\n  l_needs_restart=1\r\nfi\r\nl_sdb1_UUID=$(docker-machine ssh $l_docker_machine 'sudo blkid \/dev\/sdb1' 2>\/dev\/null | awk '{print $2}' | sed -e 's#^UUID=\"\\([^\"]\\+\\).*#\\1#')\r\n<\/code><\/pre>\n<p>Once the disk is initialized, I have found I must restart the docker-machine VM:<\/p>\n<pre><code>\r\nif [ $l_needs_restart -eq 1 ]; then\r\n  echo 'Restart Docker machine...'\r\n  docker-machine restart $l_docker_machine \r\n  l_needs_restart=0\r\nfi\r\n<\/code><\/pre>\n<p>Next &#8211; I must ensure that the disk is mounted. This *appears* to be persistent (remounted) across docker-machine VM restarts, but (of course) must be performed both on first-run as well as any time that the actual underlying docker-machine VM is recreated (which can happen regularly).<\/p>\n<pre><code>\r\n# we do need to mount the disk...check\r\nif ! docker-machine ssh $l_docker_machine 'sudo mount' 2>\/dev\/null | grep --quiet -e '\/dev\/sdb1'; then\r\n  echo 'Mount \/dev\/sdb1...'\r\n  docker-machine ssh $l_docker_machine 'sudo mount \/dev\/sdb1 \/mnt\/sdb1'\r\nfi\r\n<\/code><\/pre>\n<p>Finally &#8211; let&#8217;s initialize the folder structure on the disks. We want space for all the GitLab components: PostgreSQL, Redis, and GitLab itself:<\/p>\n<pre><code>\r\n# create our folders - logic is in there to clean out existing folders (you'd need a backup!)\r\nl_needs_sab_gitlab_folders=$(docker-machine ssh $l_docker_machine '[ ! -d \/mnt\/sdb1\/sab-gitlab ] && echo 1' 2>\/dev\/null)\r\nif [ x\"$l_needs_sab_gitlab_folders\" = x1 ]; then\r\n  echo 'Create sab-gitlab folders....'\r\n  docker-machine ssh $l_docker_machine 'sudo mkdir -p \/mnt\/sdb1\/sab-gitlab' 2>\/dev\/null\r\n  docker-machine ssh $l_docker_machine 'sudo mkdir -p \/mnt\/sdb1\/sab-gitlab\/postgresql \/mnt\/sdb1\/sab-gitlab\/redis \/mnt\/sdb1\/sab-gitlab\/data' 2>\/dev\/null\r\n  docker-machine ssh $l_docker_machine 'sudo mkdir -p \/mnt\/sdb1\/sab-gitlab\/postgresql \/mnt\/sdb1\/sab-gitlab\/redis \/mnt\/sdb1\/sab-gitlab\/data; sudo chmod -R 777 \/mnt\/sdb1\/sab-gitlab' 2>\/dev\/null\r\nfi\r\n<\/code><\/pre>\n<h3>Create GitLab Containers<\/h3>\n<p>The next step is to create \/ restart our GitLab containers. I use three of them as mentioned above.<\/p>\n<p>First &#8211; let&#8217;s make sure we can use the <code>docker<\/code> command (by evaluating the docker-machine environment):<\/p>\n<pre><code>\r\n# load docker command\r\neval $(docker-machine env)\r\n<\/code><\/pre>\n<p>In the following examples, I specify &#8220;volumes&#8221; (automatically-mounted host directories) from the VDI I configured on the docker-machine VM.<\/p>\n<p>First &#8211; let&#8217;s start the PostgreSQL container. Our logic checks to see if we already have the container and &#8211; if so &#8211; we restart it:<\/p>\n<pre><code>\r\n# launch postgresql or restart - important to provide pg_trgm extension\r\nif docker ps -a -f 'name=sab-gitlab-postgresql' 2>\/dev\/null | grep --quiet -e 'sab-gitlab-postgresql$'; then\r\n  echo 'Start postgresql...'\r\n  docker start 'sab-gitlab-postgresql'\r\nelse\r\n  echo 'Run postgresql...'\r\n  docker run --name sab-gitlab-postgresql -d \\\r\n    --env 'DB_NAME=gitlabdb' \\\r\n    --env 'DB_EXTENSION=unaccent,pg_trgm' \\\r\n    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \\\r\n    --volume \/mnt\/sdb1\/sab-gitlab\/postgresql:\/var\/lib\/postgresql \\\r\n    sameersbn\/postgresql:latest\r\nfi\r\n<\/code><\/pre>\n<p>Next &#8211; let&#8217;s do the same thing for Redis:<\/p>\n<pre><code>\r\n# Launch a redis container\r\nif docker ps -a -f 'name=sab-gitlab-redis' 2>\/dev\/null | grep --quiet -e 'sab-gitlab-redis$'; then\r\n  echo 'Start redis...'\r\n  docker start 'sab-gitlab-redis'\r\nelse\r\n  echo 'Run redis...'\r\n  docker run --name sab-gitlab-redis -d \\\r\n    --volume \/mnt\/sdb1\/sab-gitlab\/redis:\/var\/lib\/redis \\\r\n    sameersbn\/redis:latest\r\nfi\r\n<\/code><\/pre>\n<p>And, of course, we want to run GitLab. Note that I&#8217;m publishing ports 10080 (Web) and 10022 (for SSH access). Also, note that I use the <code>--link<\/code> option to connect the GitLab container to the Redis and PostgreSQL containers:<\/p>\n<pre><code>\r\n# launch gitlab\r\nif docker ps -a -f 'name=sab-gitlab' 2>\/dev\/null | grep --quiet -e 'sab-gitlab$'; then\r\n  echo 'Start gitlab...'\r\n  docker start 'sab-gitlab'\r\nelse\r\n  echo 'Run gitlab...'\r\n  docker run --name sab-gitlab -d \\\r\n    --link sab-gitlab-postgresql:postgresql --link sab-gitlab-redis:redisio \\\r\n    --publish 10022:22 --publish 10080:80 \\\r\n    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \\\r\n    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \\\r\n    --volume \/mnt\/sdb1\/sab-gitlab\/data:\/home\/git\/data \\\r\n    sameersbn\/gitlab:latest\r\nfi\r\n<\/code><\/pre>\n<p>And it all works. I&#8217;ve taken the liberty of adding a new <code>\/etc\/hosts<\/code> entry that points to <code>sad-gitlab.softwareab.local<\/code>.<\/p>\n<p>Here&#8217;s the login page:<br \/>\n<a href=\"\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-300x290.png\" alt=\"sab-gitlab-010\" width=\"300\" height=\"290\" class=\"alignnone size-medium wp-image-994\" srcset=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-300x290.png 300w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-768x743.png 768w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-1024x990.png 1024w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-100x97.png 100w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-150x145.png 150w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-200x193.png 200w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-450x435.png 450w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-600x580.png 600w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010-900x871.png 900w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-010.png 1528w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>And here&#8217;s my web page project:<br \/>\n<a href=\"\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-300x272.png\" alt=\"sab-gitlab-020\" width=\"300\" height=\"272\" class=\"alignnone size-medium wp-image-995\" srcset=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-300x272.png 300w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-768x697.png 768w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-1024x930.png 1024w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-100x91.png 100w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-150x136.png 150w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-200x182.png 200w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-450x409.png 450w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-600x545.png 600w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020-900x817.png 900w, https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2016\/05\/sab-gitlab-020.png 1546w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>That is all.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My current project includes migrating my corporate site at will between cloud providers &#8211; including my own personal dev environment. So I could use OpenShift, possibly Cloud9, etc. but I already have so much running fine as a standalone VM. &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\"> <span class=\"screen-reader-text\">Run GitLab under Docker<\/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":[1],"tags":[87,89,71],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Run GitLab under Docker - softwareab<\/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.softwareab.net\/wordpress\/run-gitlab-docker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Run GitLab under Docker - softwareab\" \/>\n<meta property=\"og:description\" content=\"My current project includes migrating my corporate site at will between cloud providers &#8211; including my own personal dev environment. So I could use OpenShift, possibly Cloud9, etc. but I already have so much running fine as a standalone VM. &hellip; Run GitLab under Docker Read More &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\" \/>\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=\"2016-05-06T02:43:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-05-06T02:51:02+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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\"},\"author\":{\"name\":\"Andrew Bruce\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"headline\":\"Run GitLab under Docker\",\"datePublished\":\"2016-05-06T02:43:45+00:00\",\"dateModified\":\"2016-05-06T02:51:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\"},\"wordCount\":684,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"keywords\":[\"docker\",\"git\",\"virtualization\"],\"articleSection\":[\"Teknocratica\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\",\"name\":\"Run GitLab under Docker - softwareab\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\"},\"datePublished\":\"2016-05-06T02:43:45+00:00\",\"dateModified\":\"2016-05-06T02:51:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#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\":\"Run GitLab under Docker\"}]},{\"@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":"Run GitLab under Docker - softwareab","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\/run-gitlab-docker\/","og_locale":"en_US","og_type":"article","og_title":"Run GitLab under Docker - softwareab","og_description":"My current project includes migrating my corporate site at will between cloud providers &#8211; including my own personal dev environment. So I could use OpenShift, possibly Cloud9, etc. but I already have so much running fine as a standalone VM. &hellip; Run GitLab under Docker Read More &raquo;","og_url":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/","og_site_name":"softwareab","article_publisher":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_author":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_published_time":"2016-05-06T02:43:45+00:00","article_modified_time":"2016-05-06T02:51:02+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":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#article","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/"},"author":{"name":"Andrew Bruce","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"headline":"Run GitLab under Docker","datePublished":"2016-05-06T02:43:45+00:00","dateModified":"2016-05-06T02:51:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/"},"wordCount":684,"commentCount":0,"publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"keywords":["docker","git","virtualization"],"articleSection":["Teknocratica"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/","url":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/","name":"Run GitLab under Docker - softwareab","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#website"},"datePublished":"2016-05-06T02:43:45+00:00","dateModified":"2016-05-06T02:51:02+00:00","breadcrumb":{"@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.softwareab.net\/wordpress\/run-gitlab-docker\/#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":"Run GitLab under Docker"}]},{"@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\/979"}],"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=979"}],"version-history":[{"count":2,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/979\/revisions"}],"predecessor-version":[{"id":997,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/979\/revisions\/997"}],"wp:attachment":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/media?parent=979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/categories?post=979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/tags?post=979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}