{"id":16908,"date":"2017-04-19T12:15:52","date_gmt":"2017-04-19T09:15:52","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=16908"},"modified":"2017-04-19T11:34:43","modified_gmt":"2017-04-19T08:34:43","slug":"docker-windows-linux-mac","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/","title":{"rendered":"Docker for Windows, Linux, and Mac"},"content":{"rendered":"<p>Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and created a better experience for developers using those platforms.<\/p>\n<p>The previous solution, Docker Toolbox, depended on VirtualBox to create a small Linux virtual machine that hosted your images and containers. It worked well but could be unreliable at times and required workarounds that sometimes resulted in unexpected outcomes or not working at all.<\/p>\n<p>Docker for Mac instead uses virtualization technology that is already part of Mac OS X: <a href=\"https:\/\/developer.apple.com\/library\/mac\/documentation\/DriversKernelHardware\/Reference\/Hypervisor\/\">HyperVisor<\/a>. Docker for Windows uses Microsoft\u2019s virtualization technology, <a href=\"https:\/\/www.microsoft.com\/en-us\/server-cloud\/solutions\/virtualization.aspx\">Hyper-V<\/a>. These changes aim to make your Docker containers run faster than before, take up less disk space, and fit better into your operating system.<\/p>\n<p>This post is intended as a getting-started overview alongside tips and gotchas that I noticed whilst using Docker on different platforms. I am by no means an advanced Docker user, but I hope having everything you need in one place is helpful to you.<\/p>\n<h2>Docker for Windows and Mac<\/h2>\n<p>As the application uses newer technologies only available in newer machines and OS versions, it has minimum requirements, which are:<\/p>\n<p><strong>Mac<\/strong><\/p>\n<ul>\n<li>A 2010 or newer model, with Intel\u2019s hardware support for memory management unit (MMU) virtualization<\/li>\n<li>OS X 10.11 or newer<\/li>\n<li>At least 4GB of RAM<\/li>\n<li>VirtualBox prior to version 4.3.30 must not be installed, as it will cause issues with Docker for Mac<\/li>\n<\/ul>\n<p><strong>Windows<\/strong><\/p>\n<ul>\n<li>Microsoft Windows 10 Professional or Enterprise 64-bit<\/li>\n<\/ul>\n<p>If your computer or OS doesn\u2019t meet requirements, then you can still use the older Docker Toolbox version that uses VirtualBox. But even to use Docker Toolbox, you will still need a 64-bit version of Windows 7 or later.<\/p>\n<p>One of the first gotchas to look out for when using Docker natively on Windows is that it needs Virtualization and <a href=\"https:\/\/docs.microsoft.com\/en-us\/virtualization\/hyper-v-on-windows\/quick-start\/enable-hyper-v\">Hyper-V<\/a> (Windows native virtualization) enabled; this will cause VirtualBox to stop working. If you use any other virtual machines (including Vagrant), then you\u2019re out of luck.<\/p>\n<p>When you run Docker for the first time, it will check that Hyper-V is enabled and if not, enable it for you. You may need to enable virtualization on your processor, which involves changing BIOS settings. This is a potentially complex step, but <a href=\"https:\/\/www.howtogeek.com\/213795\/how-to-enable-intel-vt-x-in-your-computers-bios-or-uefi-firmware\/\">this guide<\/a> might help.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_no_hyper_v.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16911\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_no_hyper_v.png\" alt=\"\" width=\"697\" height=\"262\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_no_hyper_v.png 697w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_no_hyper_v-300x113.png 300w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><\/a><\/p>\n<h3>Install and set up<\/h3>\n<p>Download <a href=\"https:\/\/store.docker.com\/editions\/community\/docker-ce-desktop-mac?tab=description\">for Mac here<\/a> and <a href=\"https:\/\/store.docker.com\/editions\/community\/docker-ce-desktop-windows?tab=description\">Windows here<\/a>. Recent changes to the way Docker brands its versions have made this more confusing than it used to be, but these links should take you directly to the correct pages.<\/p>\n<h3>Co-existing with Docker Toolbox<\/h3>\n<p>If you are using Docker Toolbox and Docker Machine on a Mac, your images and containers can typically coexist together.<\/p>\n<p>On Windows, this is not possible locally, but you can use Docker Machine to create remote containers. Docker for Mac and Windows are fully native to the host platform and install everything into locations you would expect (e.g., the <em>Applications<\/em> folder on a Mac), using symlinks to make certain tools accessible on the command line.<\/p>\n<figure id=\"attachment_16912\" aria-describedby=\"caption-attachment-16912\" style=\"width: 860px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package.png\"><img decoding=\"async\" class=\"wp-image-16912\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package.png\" alt=\"\" width=\"860\" height=\"411\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package.png 1626w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package-300x144.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package-768x367.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_package-1024x490.png 1024w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption id=\"caption-attachment-16912\" class=\"wp-caption-text\">Cracking open the Docker Mac application<\/figcaption><\/figure>\n<h3>First launch and configuration<\/h3>\n<p>When you first run the Docker application, it will check your system for compatibility and requirements, show a welcome screen, and then start the Docker process. Your main interaction with the Docker application will be via a menu bar item, for example, to stop and start the Docker process, open Kitematic for GUI access to your containers, find documentation, and access preferences.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_prefs.gif\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16913\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_prefs.gif\" alt=\"\" width=\"760\" height=\"790\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_prefs.gif\"><img decoding=\"async\" class=\"aligncenter wp-image-16914\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_prefs.gif\" alt=\"\" width=\"860\" height=\"577\" \/><\/a><\/p>\n<h2>General<\/h2>\n<p>The <em>General<\/em> pane has settings for launch, updates, usage statistics, and excluding the virtual machine from backups (Mac only), which is a simple but useful feature to have, as it can end up being a large file.<\/p>\n<h2>File sharing<\/h2>\n<p>While sharing volumes between Docker containers and the host operating system was possible with Docker Toolbox, it could be slow and suffer permissions issues.<\/p>\n<p>Docker for Mac uses a new file system created by Docker called \u2018osxfs\u2019. I can\u2019t find much detail on the new file system, but there is some info <a href=\"https:\/\/docs.docker.com\/docker-for-mac\/osxfs\/\">here<\/a>. You can add or remove share local paths to share with containers using the <em>+<\/em> and <em>\u2013<\/em> buttons, but these paths shouldn\u2019t overlap, e.g., not <em>Users<\/em> and <em>Users\/homefolder<\/em>.<\/p>\n<p>Docker for Windows uses SMB and you can only share an entire drive to Docker. Make sure you use credentials that have necessary permissions to access the paths you will need in containers.<\/p>\n<h2>Advanced<\/h2>\n<p>This pane lets you change the specs of the virtual machine and change the location of the disk image.<\/p>\n<h2>Proxies<\/h2>\n<p>The application should automatically detect any HTTP(s) proxy settings you have at an operating system level, but you can check or override them here. While not a part of this preference pane, it will also automatically detect any VPN settings you have, allowing access to any containers running within it.<\/p>\n<h2>Daemon<\/h2>\n<p>Finally, in the <em>Daemon<\/em> pane, you can opt in to experimental features and configure registries you use for custom images. If you\u2019re feeling bold, you can configure the same options via the embedded JSON field.<\/p>\n<h3>Using Docker natively<\/h3>\n<p>Little of the process for using Docker has changed, except that it requires fewer steps. To start Docker, open the Docker application, and quit it to stop Docker. While Docker is running, you should be able to access it via Kitematic and any Mac or Windows shells (except Bash for Windows, as that is its own virtualized environment) and issue Docker commands as normal.<\/p>\n<p>For example, with the application running, you can use Kitematic or the command line to download and start images as containers. Here\u2019s the \u2018hello world\u2019 image running in Kitematic:<\/p>\n<figure id=\"attachment_16915\" aria-describedby=\"caption-attachment-16915\" style=\"width: 860px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost.png\"><img decoding=\"async\" class=\"wp-image-16915\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost.png\" alt=\"\" width=\"860\" height=\"574\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost.png 2108w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost-300x200.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost-768x512.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_localhost-1024x683.png 1024w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption id=\"caption-attachment-16915\" class=\"wp-caption-text\">New localhost<\/figcaption><\/figure>\n<p>Notice something else cool there? No more custom IP addresses to remember! All your Docker containers now run on <code>localhost<\/code> and will be port mapped to the address.<\/p>\n<figure id=\"attachment_16916\" aria-describedby=\"caption-attachment-16916\" style=\"width: 860px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser.png\"><img decoding=\"async\" class=\"wp-image-16916\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser.png\" alt=\"\" width=\"860\" height=\"732\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser.png 2480w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser-300x255.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser-768x654.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_mac_browser-1024x872.png 1024w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption id=\"caption-attachment-16916\" class=\"wp-caption-text\">Application running<\/figcaption><\/figure>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic.png\"><img decoding=\"async\" class=\"aligncenter wp-image-16917\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic.png\" alt=\"\" width=\"860\" height=\"547\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic.png 1091w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic-300x191.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic-768x489.png 768w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_kitematic-1024x651.png 1024w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_cli.png\"><img decoding=\"async\" class=\"aligncenter wp-image-16918\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_cli.png\" alt=\"\" width=\"860\" height=\"454\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_cli.png 990w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_cli-300x158.png 300w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_cli-768x406.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>Other Docker commands such as <code>docker-compose<\/code> and <code>docker-machine<\/code> work, but for Machine (and thus Swarm) you will need to define a <a href=\"https:\/\/docs.docker.com\/machine\/drivers\/\">non-native driver<\/a>. This means you can manage Docker Machine from your Mac or Windows machine, but they will still be hosted elsewhere and still need to be managed by the traditional <code>eval $(docker-machine env default)<\/code> commands.<\/p>\n<h3>Bonus: Want to access the VM on a Mac?<\/h3>\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">oh just : screen ~\/Library\/Containers\/com.docker.docker\/Data\/com.docker.driver.amd64-linux\/tty  &#8211; and boom you&#39;re in the vm<\/p>\n<p>&mdash; Lorenzo Fontana (@fntlnz) <a href=\"https:\/\/twitter.com\/fntlnz\/status\/849029982521356289?ref_src=twsrc%5Etfw\">April 3, 2017<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>Here\u2019s a random tip that doesn\u2019t completely fit into this post, but I wanted to share with you. I was fortunate enough to have dinner with Lorenzo Fontana, a Docker Networking contributor and also <a href=\"https:\/\/blog.codeship.com\/author\/lorenzofontana\/\">a Codeship contributor<\/a>. During dinner, he mentioned a peculiar command that allowed you to jump straight into the VM on a Mac.<\/p>\n<pre class=\"brush:php\">screen ~\/Library\/Containers\/com.docker.docker\/Data\/com.docker.driver.amd64-linux\/tty<\/pre>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker-mac-vm.gif\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16919\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker-mac-vm.gif\" alt=\"\" width=\"650\" height=\"702\" \/><\/a><\/p>\n<p>This may or may not be useful to you, but I thought it was cool.<\/p>\n<h3>Windows containers<\/h3>\n<p>An interesting feature of Docker for Windows is the ability to toggle running Windows containers as well as Linux containers by changing the daemon that Docker speaks to in the settings pane.<\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_switch_engine.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16920\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_switch_engine.png\" alt=\"\" width=\"335\" height=\"319\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_switch_engine.png 335w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_switch_engine-300x286.png 300w\" sizes=\"(max-width: 335px) 100vw, 335px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_enable_feature.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16921\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_enable_feature.png\" alt=\"\" width=\"697\" height=\"264\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_enable_feature.png 697w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_windows_enable_feature-300x114.png 300w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><\/a><\/p>\n<p>This means you can also experiment with containers running Windows server services and .NET applications.<\/p>\n<h2>Linux<\/h2>\n<p>Docker is Linux-native, so theoretically Linux should be the easiest platform to install on. Well, yes and no. As is traditional with Linux, you have more control over setup, but that control requires extra steps and configuration.<\/p>\n<p>Installing Docker on Linux has become more complicated. As there are differences between the community and enterprise editions, I will stick to explaining the community edition.<\/p>\n<p>I won\u2019t repeat the steps for installing Docker on every flavor of Linux here, as <a href=\"https:\/\/docs.docker.com\/engine\/installation\/linux\/\">the Docker documentation<\/a> does a fine job, but I will highlight necessary steps to ensure you can follow easily, as well as problems I\u2019ve experienced.<\/p>\n<h3>System requirements<\/h3>\n<p>For Docker to function, you need the Linux kernel version 3.10 or above. If you have an up-to-date version of Linux, you probably already have this installed, but you might not. You can update the kernel, but this can potentially change the behavior of your operating system in other ways. If you want to give that a try, then <a href=\"http:\/\/www.makeuseof.com\/tag\/update-linux-kernel-improved-system-performance\/\">this post<\/a> will hopefully help.<\/p>\n<p>Most distributions need you to have certain packages installed. These are for storage drivers and secure repository access; again, these are all easy to install.<\/p>\n<h3>Installing<\/h3>\n<p>Before installing Docker, make sure you remove any older versions, as some distributions maintain their own packages that are out of date.<\/p>\n<p>As noted above, Docker now comes in two versions, so make sure that after following the prerequisite steps, you install the correct version:<\/p>\n<pre class=\"brush:php\">sudo apt-get install docker-ce # Community edition\r\nsudo apt-get install docker-ee # Enterprise edition<\/pre>\n<h3>Running Docker<\/h3>\n<p>All interaction with Docker on Linux is via the command line, so you will need to <a href=\"https:\/\/docs.docker.com\/engine\/userguide\/intro\/\">become familiar with the command line tools it offers<\/a>.<\/p>\n<h3>Running Docker as a non-root user<\/h3>\n<p>As Docker binds to a Unix socket owned by the <code>root<\/code> user and not a TCP port, the Docker daemon by default runs as the root user. When running Docker on a local machine, I found this can become annoying and confusing and I found myself wanting to switch to a non-root user.<\/p>\n<p>To change this behavior, you need to create a new group and give it permissions to access that socket. Note that while this is more convenient, it does grant privileges equivalent to a root user, <a href=\"https:\/\/docs.docker.com\/engine\/security\/security\/#docker-daemon-attack-surface\">which has security implications<\/a>.<\/p>\n<p>Create the group:<\/p>\n<pre class=\"brush:php\">sudo groupadd docker<\/pre>\n<p>Add yourself to that group (or another user):<\/p>\n<pre class=\"brush:php\">sudo usermod -aG docker $USER<\/pre>\n<p>Log out and log in again, and the following command should work:<\/p>\n<pre class=\"brush:php\">docker run hello-world<\/pre>\n<p><a href=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_linux_non_root.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-16922\" src=\"http:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_linux_non_root.png\" alt=\"\" width=\"740\" height=\"447\" srcset=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_linux_non_root.png 740w, https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2017\/04\/docker_linux_non_root-300x181.png 300w\" sizes=\"(max-width: 740px) 100vw, 740px\" \/><\/a><\/p>\n<h2>Docker for All<\/h2>\n<p>Recent additions to Docker editions have complicated this slightly, but now more than ever, you should find installing and using Docker as seamless as possible for your operating system, with earlier versions containing more irritations and edge cases. It\u2019s still not perfect, but the team works hard to solve any issues you may find or propose workarounds.<\/p>\n<p>What have been some of your biggest confusions with Docker on your OS of choice?<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/blog.codeship.com\/docker-for-windows-linux-and-mac\/\">Docker for Windows, Linux, and Mac<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Chris Ward\u00a0at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and created a better experience for developers using those platforms. The previous solution, Docker Toolbox, depended on VirtualBox to create a small Linux virtual machine that hosted your images and containers. It &hellip;<\/p>\n","protected":false},"author":148,"featured_media":10356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[217],"class_list":["post-16908","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 for Windows, Linux, and Mac - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and\" \/>\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-windows-linux-mac\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker for Windows, Linux, and Mac - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\" \/>\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-04-19T09:15:52+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=\"Chris Ward\" \/>\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=\"Chris Ward\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\"},\"author\":{\"name\":\"Chris Ward\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ec768d779e3ecb955c5f552f0f734757\"},\"headline\":\"Docker for Windows, Linux, and Mac\",\"datePublished\":\"2017-04-19T09:15:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\"},\"wordCount\":1661,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#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-windows-linux-mac\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\",\"name\":\"Docker for Windows, Linux, and Mac - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg\",\"datePublished\":\"2017-04-19T09:15:52+00:00\",\"description\":\"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#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-windows-linux-mac\/#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 for Windows, Linux, and Mac\"}]},{\"@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\/ec768d779e3ecb955c5f552f0f734757\",\"name\":\"Chris Ward\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g\",\"caption\":\"Chris Ward\"},\"description\":\"Chris Ward is a technical writer, speaker, and developer.\",\"url\":\"https:\/\/www.webcodegeeks.com\/author\/chris-ward\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker for Windows, Linux, and Mac - Web Code Geeks - 2026","description":"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and","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-windows-linux-mac\/","og_locale":"en_US","og_type":"article","og_title":"Docker for Windows, Linux, and Mac - Web Code Geeks - 2026","og_description":"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and","og_url":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2017-04-19T09:15:52+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":"Chris Ward","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Chris Ward","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/"},"author":{"name":"Chris Ward","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ec768d779e3ecb955c5f552f0f734757"},"headline":"Docker for Windows, Linux, and Mac","datePublished":"2017-04-19T09:15:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/"},"wordCount":1661,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#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-windows-linux-mac\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/","url":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/","name":"Docker for Windows, Linux, and Mac - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2016\/01\/docker-logo.jpg","datePublished":"2017-04-19T09:15:52+00:00","description":"Released earlier in 2017, Docker\u2019s new native applications for Windows and Mac replaced the older methods for running Docker on Windows and Mac and","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/devops\/docker-windows-linux-mac\/#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-windows-linux-mac\/#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 for Windows, Linux, and Mac"}]},{"@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\/ec768d779e3ecb955c5f552f0f734757","name":"Chris Ward","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e715e4a95de958fcd3da75cde89b6459b80f977d665284e37751ecdcb2b1e4c4?s=96&d=mm&r=g","caption":"Chris Ward"},"description":"Chris Ward is a technical writer, speaker, and developer.","url":"https:\/\/www.webcodegeeks.com\/author\/chris-ward\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16908","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\/148"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=16908"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/16908\/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=16908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=16908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=16908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}