<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kool.dev</title>
    <description>The latest articles on DEV Community by kool.dev (@kooldev).</description>
    <link>https://dev.to/kooldev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4328%2F797e37e5-9525-427d-91e3-39b27f576922.jpg</url>
      <title>DEV Community: kool.dev</title>
      <link>https://dev.to/kooldev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kooldev"/>
    <language>en</language>
    <item>
      <title>Kool's Next Chapter: Closing the Gap Between AI-Generated Code and Production</title>
      <dc:creator>Fabrício José Souza</dc:creator>
      <pubDate>Wed, 18 Mar 2026 03:03:53 +0000</pubDate>
      <link>https://dev.to/kooldev/kools-next-chapter-closing-the-gap-between-ai-generated-code-and-production-2kde</link>
      <guid>https://dev.to/kooldev/kools-next-chapter-closing-the-gap-between-ai-generated-code-and-production-2kde</guid>
      <description>&lt;p&gt;Five years ago we wrote about &lt;a href="https://dev.to/blog/using-docker-for-local-development"&gt;using Docker for local development the right way&lt;/a&gt;. A lot has changed since then — except our obsession with developer experience. Today, we're entering a new chapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where It All Started
&lt;/h2&gt;

&lt;p&gt;Back in 2021, Kool was born out of frustration. We were a software house juggling dozens of client projects across different stacks, and Docker — while powerful — kept getting in the way. Permission issues on mapped volumes, MTU mismatches, the &lt;code&gt;-t&lt;/code&gt; vs &lt;code&gt;-T&lt;/code&gt; flag dance, teammates siloing Docker knowledge... we had seen it all.&lt;/p&gt;

&lt;p&gt;So we built &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;Kool&lt;/a&gt;: a CLI tool that wrapped Docker and Docker Compose with sane defaults, presets for popular frameworks, and custom images optimized for local development. The goal was simple — &lt;strong&gt;remove the friction so developers could focus on code, not infrastructure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The developer community responded. Our articles on Dev.to reached over 33,000 views. We went from 60 to 600+ GitHub stars. People joined our Slack, opened issues, contributed code. Kool had found its audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hasn't Changed
&lt;/h2&gt;

&lt;p&gt;Five years later, the problems Kool was built to solve haven't gone away. If anything, they've gotten worse. Docker's ecosystem has grown more complex. Multi-service architectures are the norm. Teams are more distributed. Onboarding new developers onto a project still involves too much "works on my machine" debugging.&lt;/p&gt;

&lt;p&gt;The original arguments for Kool remain exactly as strong today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker is a container engine, not a development tool.&lt;/strong&gt; It was never designed to optimize the local dev experience. Kool bridges that gap with sane defaults and conventions that just work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge silos kill velocity.&lt;/strong&gt; When only senior engineers understand the Docker setup, the whole team slows down. Kool standardizes workflows through &lt;code&gt;kool.yml&lt;/code&gt; so every team member runs the same commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission issues, volume mapping, networking quirks&lt;/strong&gt; — these haven't been solved by Docker itself. Kool's custom images still handle the headaches that plague raw Docker setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No vendor lock-in.&lt;/strong&gt; Your &lt;code&gt;docker-compose.yml&lt;/code&gt; is yours. Kool wraps it, never replaces it. You keep full control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;kool create&lt;/code&gt; still spins up a fully configured local environment in minutes. &lt;code&gt;kool run&lt;/code&gt; still keeps your workflow scripts shared and versioned. The &lt;a href="https://dev.to/blog/using-docker-for-local-development"&gt;original value proposition&lt;/a&gt; holds stronger than ever — because the fundamental problems haven't changed, and neither has Kool's answer to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Local to Cloud — The Hard Way
&lt;/h2&gt;

&lt;p&gt;In 2023, we &lt;a href="https://dev.to/blog/taking-off"&gt;wrote about our journey&lt;/a&gt; and the natural next step: taking the same Docker Compose setup developers use locally and deploying it to the cloud. In early 2024, we &lt;a href="https://dev.to/blog/kool-cloud-general-availability"&gt;launched Kool Cloud&lt;/a&gt; publicly.&lt;/p&gt;

&lt;p&gt;We spent nearly two years running and refining the platform with a curated group of early adopters. That deliberate pace taught us what works in production — and what developers actually need when moving containers to the cloud. We iterated on the deploy experience, built out managed MySQL databases, environment management, team collaboration, and a billing model that makes sense for small teams and growing companies alike.&lt;/p&gt;

&lt;p&gt;The cloud platform matured. Quietly, intentionally, and with real users validating every decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Bottleneck
&lt;/h2&gt;

&lt;p&gt;Here's what's different now: AI agents are writing code faster than teams can ship it.&lt;/p&gt;

&lt;p&gt;Coding agents — Claude, Copilot, Cursor — are generating features, fixing bugs, and refactoring entire codebases in minutes. The bottleneck is no longer writing code. It's everything that happens after: spinning up a preview environment for PR validation, handing off to QA with a live URL, configuring deploys, provisioning infrastructure, debugging Kubernetes manifests, understanding cloud provider quirks. The same learning curve problem we solved for Docker locally now exists for the entire path from code to production — and it's worse, because the speed gap between code generation and code shipping has never been wider.&lt;/p&gt;

&lt;p&gt;Developers still need to feel in control. But the cost of that control should be managed. You shouldn't need to deep-dive into specific DevOps toolchains just to get your app live. Not when AI just wrote it in 30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reborn Phase
&lt;/h2&gt;

&lt;p&gt;This is where Kool's new chapter begins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built for Agents. Easy for Humans.
&lt;/h3&gt;

&lt;p&gt;We're building Kool to be the deployment layer that AI agents interact with natively. Your coding agent already writes your code — now let it deploy too. Deploy your app, provision a database, check logs, roll back — agents can do all of this on their own, autonomously, as part of their workflow.&lt;/p&gt;

&lt;p&gt;But here's the thing: the same interface works just as well for you. The Kool CLI was always designed for low learning curve, and that hasn't changed. &lt;code&gt;kool cloud deploy&lt;/code&gt; is one command. You don't need to understand Kubernetes, Helm charts, or cloud provider consoles. Whether it's your agent running the command or you typing it yourself, the experience is the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimized for agents. Accessible to humans. No DevOps degree required for either.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Borrow Our Cloud, or Bring Your Own
&lt;/h3&gt;

&lt;p&gt;Two paths, one experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Managed Cloud&lt;/strong&gt; — Deploy your Docker apps to Kool Cloud in minutes. No Kubernetes knowledge required. No servers to manage. Just &lt;code&gt;kool cloud deploy&lt;/code&gt; and your app is live on infrastructure managed by us. Think of it as borrowing a sane, simple cloud management layer so you can focus on your product. You pay a premium for the convenience — and that's a fair trade when you're getting started or want zero ops overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BYOC (Bring Your Own Cloud)&lt;/strong&gt; — When you want ownership and cost efficiency, bring your own servers. Cherry-pick your VPS provider, choose your architecture (amd64 or arm — yes, Graviton works), right-size your hardware for your workload. Kool installs and manages the entire stack on your servers — same deploy experience, same dashboard, same agent integration. You own the hardware, you control the costs, we provide the intelligence to manage it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With BYOC, the savings are real. You're not paying managed cloud margins on top of compute you could provision yourself for a fraction of the price. Pick Hetzner, DigitalOcean, AWS, or any provider you like. Run ARM instances where it makes sense. The infrastructure choices are yours — Kool just makes sure deploying to it stays simple.&lt;/p&gt;

&lt;p&gt;The transition is seamless. Same CLI. Same dashboard. Same deploy workflow. Same AI agent commands. The only thing that changes is where your containers run — and how much you pay for them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start by borrowing. Graduate to owning. No re-platforming required.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Ahead
&lt;/h2&gt;

&lt;p&gt;The learning curve argument that made Kool relevant in 2021 is stronger now than ever. Back then, Docker complexity was the bottleneck between an idea and a working local environment. Today, cloud deployment complexity is the bottleneck between AI-generated code and a live product.&lt;/p&gt;

&lt;p&gt;We're building toward a future where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deploying doesn't break your flow&lt;/strong&gt; — your AI agent handles it as part of the development cycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure choices don't lock you in&lt;/strong&gt; — borrow our cloud today, bring your own servers tomorrow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The cost of control stays low&lt;/strong&gt; — you stay in charge without becoming a DevOps expert&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kool started as a tool to make Docker suck less locally. It's becoming the platform that makes deploying suck less too — with AI agents as the interface and your choice of infrastructure underneath.&lt;/p&gt;

&lt;p&gt;We're just getting started on this new chapter. If you've been following Kool's journey since the early days, thank you — the best is ahead. If you're discovering us for the first time, there's never been a better moment to &lt;a href="https://kool.dev" rel="noopener noreferrer"&gt;give Kool a try&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Follow our journey:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://kool.dev/register" rel="noopener noreferrer"&gt;Try Kool Cloud&lt;/a&gt; — deploy your first app for free.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;Star us on GitHub&lt;/a&gt; — help us grow the community.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>docker</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The Kool Way to Run Hugo Static Sites on Docker</title>
      <dc:creator>Daniel Polito</dc:creator>
      <pubDate>Tue, 27 Jul 2021 16:02:53 +0000</pubDate>
      <link>https://dev.to/kooldev/the-kool-way-to-run-hugo-static-sites-on-docker-3k04</link>
      <guid>https://dev.to/kooldev/the-kool-way-to-run-hugo-static-sites-on-docker-3k04</guid>
      <description>&lt;p&gt;In just 2 simple steps, you can use &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;Kool&lt;/strong&gt;&lt;/a&gt; to start a new &lt;strong&gt;Hugo&lt;/strong&gt; application running in a local Docker development environment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a free, open source CLI tool that makes local development with Docker super easy. Kool CLI will level up your development workflow, and help you and your team improve the way you develop and deploy cloud native applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;If you haven't done so already, you first need to &lt;a href="https://kool.dev/docs/getting-started/installation" rel="noopener noreferrer"&gt;install Docker and the Kool CLI&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you already have &lt;code&gt;kool&lt;/code&gt; installed, make sure you're running the latest version with &lt;code&gt;kool self-update&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1 – Create a New Hugo Application
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://kool.dev/docs/commands/kool-create" rel="noopener noreferrer"&gt;&lt;code&gt;kool create&lt;/code&gt; command&lt;/a&gt; to create your new Hugo project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool create hugo my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;IMPORTANT: if you're on &lt;strong&gt;Windows WSL&lt;/strong&gt; or &lt;strong&gt;Linux&lt;/strong&gt;, you should run &lt;code&gt;sudo kool create hugo my-project&lt;/code&gt; as the superuser (via &lt;code&gt;sudo&lt;/code&gt;) to avoid permissions issues when creating the project directory and files.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Under the hood, this command will run &lt;code&gt;kool docker klakegg/hugo:ext-alpine new site my-project&lt;/code&gt; using the &lt;a href="https://hub.docker.com/r/klakegg/hugo/" rel="noopener noreferrer"&gt;klakegg/hugo&lt;/a&gt; Docker image.&lt;/p&gt;

&lt;p&gt;Now, move into your new Hugo project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installing Hugo, &lt;code&gt;kool create&lt;/code&gt; automatically runs the &lt;a href="https://kool.dev/docs/commands/kool-preset" rel="noopener noreferrer"&gt;&lt;code&gt;kool preset hugo&lt;/code&gt; command&lt;/a&gt;, which auto-generates the following configuration files and adds them to your project. As your project evolves, you can easily modify and extend these files to suit your needs.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+docker-compose.yml
+kool.yml
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2 – Start Your Local Environment
&lt;/h2&gt;

&lt;p&gt;As mentioned above, the &lt;a href="https://kool.dev/docs/commands/kool-preset" rel="noopener noreferrer"&gt;&lt;code&gt;kool preset&lt;/code&gt; command&lt;/a&gt; added a &lt;strong&gt;kool.yml&lt;/strong&gt; file to your project. To help get you started, &lt;strong&gt;kool.yml&lt;/strong&gt; comes prebuilt with an initial set of scripts based on your chosen framework and stack. Since Hugo requires a few extra steps to create a Hello World site, &lt;strong&gt;kool.yml&lt;/strong&gt; includes a special &lt;code&gt;quickstart&lt;/code&gt; script to make it super easy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of &lt;strong&gt;kool.yml&lt;/strong&gt; as an easy-to-use task &lt;em&gt;helper&lt;/em&gt;. Instead of writing custom shell scripts, add your own scripts to &lt;strong&gt;kool.yml&lt;/strong&gt; (under the &lt;code&gt;scripts&lt;/code&gt; key), and run them with &lt;code&gt;kool run SCRIPT&lt;/code&gt; (e.g. &lt;code&gt;kool run hugo&lt;/code&gt;). You can add your own single line commands (see &lt;code&gt;hugo&lt;/code&gt; below), or add a list of commands that will be executed in sequence (see &lt;code&gt;quickstart&lt;/code&gt; below).&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;hugo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool docker -p 1313:1313 klakegg/hugo:ext-alpine&lt;/span&gt;
    &lt;span class="na"&gt;dev&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool run hugo server -D&lt;/span&gt;

    &lt;span class="c1"&gt;# remove or modify to suit the needs of your project&lt;/span&gt;
    &lt;span class="na"&gt;quickstart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool start&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;git init&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;echo theme = \"ananke\" &amp;gt;&amp;gt; config.toml&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool run hugo new posts/my-first-post.md&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool run dev&lt;/span&gt;

    &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool start&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool run dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Go ahead and run &lt;code&gt;kool run quickstart&lt;/code&gt; to start your Docker environment and initialize your Hugo site.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kool run quickstart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;As you can see in &lt;strong&gt;kool.yml&lt;/strong&gt;, the &lt;code&gt;quickstart&lt;/code&gt; script does the following in sequence: runs the &lt;code&gt;kool start&lt;/code&gt; command to spin up your Docker environment; calls &lt;code&gt;git init&lt;/code&gt; to create a Git repository; downloads the Ananke theme; uses an &lt;code&gt;echo&lt;/code&gt; command to add the theme to your Hugo config file; adds your first post; and then calls &lt;code&gt;kool run dev&lt;/code&gt; to build your Hugo site.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;Once &lt;code&gt;kool run quickstart&lt;/code&gt; finishes, you should be able to access your new site at &lt;a href="http://localhost/" rel="noopener noreferrer"&gt;http://localhost&lt;/a&gt; and see the "My New Hugo Site" page. Hooray!&lt;/p&gt;



&lt;p&gt;Verify your Docker service containers are running using the &lt;a href="https://dev.to/docs/commands/kool-status"&gt;&lt;code&gt;kool status&lt;/code&gt; command&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kool status
+---------+---------+------------------------------+--------------+
| SERVICE | RUNNING | PORTS                        | STATE        |
+---------+---------+------------------------------+--------------+
| app     | Running | 0.0.0.0:80-&amp;gt;80/tcp, 1313/tcp | Up 2 minutes |
| static  | Running | 80/tcp                       | Up 2 minutes |
+---------+---------+------------------------------+--------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Run &lt;code&gt;kool logs app&lt;/code&gt; to see the logs from your running &lt;code&gt;app&lt;/code&gt; container.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use &lt;code&gt;kool logs&lt;/code&gt; to see the logs from all running containers. Add the &lt;code&gt;-f&lt;/code&gt; option after &lt;code&gt;kool logs&lt;/code&gt; to follow the logs (i.e. &lt;code&gt;kool logs -f app&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kool logs app
Attaching to my-project_app_1
app_1     |   Non-page files   |  0
app_1     |   Static files     |  0
app_1     |   Processed images |  0
app_1     |   Aliases          |  0
app_1     |   Sitemaps         |  1
app_1     |   Cleaned          |  0
app_1     |
app_1     | Built &lt;span class="k"&gt;in &lt;/span&gt;1 ms
app_1     | Watching &lt;span class="k"&gt;for &lt;/span&gt;changes &lt;span class="k"&gt;in&lt;/span&gt; /app/&lt;span class="o"&gt;{&lt;/span&gt;archetypes,content,data,layouts,static&lt;span class="o"&gt;}&lt;/span&gt;
app_1     | Watching &lt;span class="k"&gt;for &lt;/span&gt;config changes &lt;span class="k"&gt;in&lt;/span&gt; /app/config.toml
app_1     | Environment: &lt;span class="s2"&gt;"DEV"&lt;/span&gt;
app_1     | Serving pages from memory
app_1     | Running &lt;span class="k"&gt;in &lt;/span&gt;Fast Render Mode. For full rebuilds on change: hugo server &lt;span class="nt"&gt;--disableFastRender&lt;/span&gt;
app_1     | Web Server is available at http://localhost:80/ &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bind &lt;/span&gt;address 0.0.0.0&lt;span class="o"&gt;)&lt;/span&gt;
app_1     | Press Ctrl+C to stop
app_1     |
app_1     | Change of config file detected, rebuilding site.
app_1     | 2021-05-01 20:34:06.306 +0000
app_1     | Rebuilt &lt;span class="k"&gt;in &lt;/span&gt;136 ms
app_1     | adding created directory to watchlist /app/content/posts
app_1     |
app_1     | Change detected, rebuilding site.
app_1     | 2021-05-01 20:34:07.305 +0000
app_1     | Source changed &lt;span class="s2"&gt;"/app/content/posts/my-first-post.md"&lt;/span&gt;: CREATE
app_1     | Total &lt;span class="k"&gt;in &lt;/span&gt;26 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When it's time to stop working on the project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kool stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When you're ready to start coding again:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kool start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;If you like what we're doing, show your support for this new open source project by &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;starring us on GitHub&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Level Up Your Development Workflow
&lt;/h2&gt;

&lt;p&gt;Once you're up and running with your new Hugo project, you can use the &lt;code&gt;kool&lt;/code&gt; CLI to level up your development workflow. &lt;a href="https://kool.dev/docs/getting-started/how-it-works#better-development-workflow" rel="noopener noreferrer"&gt;Learn more in "How It Works"&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Support the Kool Open Source Project
&lt;/h2&gt;

&lt;p&gt;Kool is open source and totally free to use. If you're interested in learning more about the project, please check out &lt;a href="https://kool.dev" rel="noopener noreferrer"&gt;kool.dev&lt;/a&gt;. If you have questions, need support, or want to get involved, please &lt;a href="https://kool.dev/slack" rel="noopener noreferrer"&gt;join our Slack channel&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kool-dev" rel="noopener noreferrer"&gt;
        kool-dev
      &lt;/a&gt; / &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;
        kool
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      From local development to the cloud: web apps development with containers made easy.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2c9a131304755404c25d798a79d45732e52881150dd6b8ce7ccdf3043c061bce/68747470733a2f2f6b6f6f6c2e6465762f696d672f6c6f676f2e706e67" width="400" alt="kool - cloud native dev tool"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://goreportcard.com/report/github.com/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/41d1a6a1552a124ad859772350dca69e3f7a76608052b2724afb96ced4f1def9/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6b6f6f6c2d6465762f6b6f6f6c" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/21e096501f8e71afebf9b32021095c59ef40e8e2e70128960e2dc65f5fdea8ee/68747470733a2f2f636f6465636f762e696f2f67682f6b6f6f6c2d6465762f6b6f6f6c2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/docker" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/docker/badge.svg" alt="Docker Hub"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/golangci-lint" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/golangci-lint/badge.svg" alt="Golang CI Lint"&gt;&lt;/a&gt;
&lt;a href="https://codeclimate.com/github/kool-dev/kool/maintainability" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/734f5b6dd1cda2d34c0b7242f1e323282c3fb4d86af53c36f35dda3ae01692ff/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f31353131663832366465393264326162333963632f6d61696e7461696e6162696c697479" alt="Maintainability"&gt;&lt;/a&gt;
&lt;a href="https://kool.dev/slack" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24c53943c966db565633b087e876c58b7f572a6b9df694d4295fa5c9f79636fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6f696e253230536c61636b2d6b6f6f6c2d2d6465762d6f72616e67653f6c6f676f3d736c61636b" alt="Join Slack Kool community"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8693bde04030b1670d5097703441005eba34240c32d1df1eb82a5f0d6716518e/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About &lt;code&gt;kool&lt;/code&gt;
&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a CLI tool that brings the complexities of modern software development environments down to earth - making these environments lightweight, fast and reproducible. It reduces the complexity and learning curve of &lt;em&gt;Docker&lt;/em&gt; containers for local environments, and offers a simplified interface for using &lt;em&gt;Kubernetes&lt;/em&gt; to deploy staging and production environments to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; gets your local development environment up and running easily and quickly, so you have more time to build a great application. When the time is right, you can then use Kool.dev Cloud to deploy and share your work with the world!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is suitable for solo developers and teams of all sizes. It provides a hassle-free way to handle the Docker basics and immediately start using containers for development, while simultaneously guaranteeing no loss of control over more specialized Docker environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;Learn more at kool.dev&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Requirements: Kool is powered by…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>hugo</category>
      <category>docker</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Running NestJS on Docker is Really Easy with Kool</title>
      <dc:creator>Daniel Polito</dc:creator>
      <pubDate>Mon, 19 Jul 2021 20:33:49 +0000</pubDate>
      <link>https://dev.to/kooldev/running-nestjs-on-docker-is-really-easy-with-kool-5b8m</link>
      <guid>https://dev.to/kooldev/running-nestjs-on-docker-is-really-easy-with-kool-5b8m</guid>
      <description>&lt;p&gt;In just 3 simple steps, you can use &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;Kool&lt;/strong&gt;&lt;/a&gt; to start a new &lt;strong&gt;NestJS&lt;/strong&gt; application running in a local Docker development environment.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a free, open source CLI tool that makes local development with Docker super easy. Kool CLI will level up your development workflow, and help you and your team improve the way you develop and deploy cloud native applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;If you haven't done so already, you first need to &lt;a href="https://kool.dev/docs/getting-started/installation" rel="noopener noreferrer"&gt;install Docker and the Kool CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you already have &lt;code&gt;kool&lt;/code&gt; installed, make sure you're running the latest version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool self-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 1 – Create a New NestJS Application
&lt;/h2&gt;

&lt;p&gt;Use the &lt;a href="https://kool.dev/docs/commands/kool-create" rel="noopener noreferrer"&gt;&lt;code&gt;kool create&lt;/code&gt; command&lt;/a&gt; to create your new NestJS project.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool create nestjs my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Under the hood, this command will run &lt;code&gt;nest new my-project&lt;/code&gt; to install NestJS using a customized Kool Docker Image: &lt;a href="https://github.com/kool-dev/docker-node" rel="noopener noreferrer"&gt;kooldev/node:14-nest&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Learn more about Kool Docker Images in our article &lt;a href="https://dev.to/kooldev/use-kool-to-dockerize-your-local-development-environment-the-right-way-18gl#kool-docker-images"&gt;"Use Kool to Dockerize Your Local Development Environment the Right Way"&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After installing NestJS, &lt;code&gt;kool create&lt;/code&gt; automatically runs the &lt;a href="https://kool.dev/docs/commands/kool-preset" rel="noopener noreferrer"&gt;&lt;code&gt;kool preset nestjs&lt;/code&gt; command&lt;/a&gt;, which helps you set up the initial tech stack for your project using an interactive wizard.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Preset nestjs is initializing!
&lt;span class="go"&gt;
? Which database service do you want to use [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;MySQL 8.0
&lt;span class="go"&gt;  MySQL 5.7
  PostgreSQL 13.0
  none

? Which cache service do you want to use [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Redis 6.0
&lt;span class="go"&gt;  Memcached 1.6
  none

? Which package manager did you choose during Nest setup [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;npm
&lt;span class="go"&gt;  yarn

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Preset nestjs initialized!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, move into your new NestJS project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;kool preset&lt;/code&gt; command auto-generated the following configuration files and added them to your project, which you can easily modify and extend to suit your needs.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+docker-compose.yml
+kool.yml
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2 (Optional) – Add Environment Variables
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You can skip this step if you did &lt;em&gt;not&lt;/em&gt; add a database or cache service to your project via the wizard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you added a database and/or cache service, you'll need to add some local environment variables to match the services in your &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file (see below). For example, you'll need to change the hosts from &lt;em&gt;localhost&lt;/em&gt; to the appropriate service container name, which are accessible from within Docker.&lt;/p&gt;

&lt;p&gt;Create a &lt;strong&gt;.env&lt;/strong&gt; file inside your project's root directory, and add the appropriate environment variables to this file (as provided below) based on the services used in your project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Learn more about &lt;a href="https://docs.nestjs.com/techniques/configuration" rel="noopener noreferrer"&gt;how to configure NestJS&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Database Services
&lt;/h3&gt;

&lt;p&gt;MySQL 5.7 and 8.0&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+DB_CONNECTION=mysql
+DB_HOST=database
+DB_DATABASE=&amp;lt;some_database_name&amp;gt;
+DB_USERNAME=&amp;lt;some_username&amp;gt;
+DB_PASSWORD=&amp;lt;some_password&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;PostgreSQL 13.0&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+DB_CONNECTION=pgsql
+DB_HOST=database
+DB_PORT=5432
+DB_DATABASE=&amp;lt;some_database_name&amp;gt;
+DB_USERNAME=&amp;lt;some_username&amp;gt;
+DB_PASSWORD=&amp;lt;some_password&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Cache Services
&lt;/h3&gt;

&lt;p&gt;Redis&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+REDIS_HOST=cache
+REDIS_PORT=6379
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Memcached&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+MEMCACHED_HOST=cache
+MEMCACHED_PORT=11211
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 3 – Start Your Local Environment
&lt;/h2&gt;

&lt;p&gt;Now, spin up your local environment for the first time using the &lt;code&gt;setup&lt;/code&gt; script in your &lt;strong&gt;kool.yml&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool run setup
&lt;span class="go"&gt;
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.1 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

audited 879 packages in 32.143s

78 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Creating network "my-project_kool_local" with the default driver
Creating volume "my-project_database" with default driver
Creating volume "my-project_cache" with default driver
Creating my-project_database_1 ... done
Creating my-project_app_1      ... done
Creating my-project_cache_1    ... done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;Once &lt;code&gt;kool run setup&lt;/code&gt; finishes, you can access your new NestJS app at &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; and see the NestJS "Hello World!" welcome page.&lt;/p&gt;
&lt;h2&gt;
  
  
  Level Up Your Workflow
&lt;/h2&gt;

&lt;p&gt;Now that you have your new NestJS app up and running, you can use the Kool CLI to start leveling up your development workflow.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add Scripts to kool.yml
&lt;/h3&gt;

&lt;p&gt;Think of &lt;strong&gt;kool.yml&lt;/strong&gt; as a super easy-to-use task helper. Instead of writing custom shell scripts, you can add your own scripts to &lt;strong&gt;kool.yml&lt;/strong&gt; (under the &lt;code&gt;scripts&lt;/code&gt; key), and run them with &lt;code&gt;kool run SCRIPT&lt;/code&gt;. You can add single line commands (&lt;code&gt;kool run nest&lt;/code&gt;), or add a list of commands that will be executed in sequence (&lt;code&gt;kool run setup&lt;/code&gt;). For example, add scripts to run database migrations, reset local environments, run static analysis tools, and so on. &lt;strong&gt;Think about how much easier it will be to onboard a teammate or new developer :)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;scripts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mysql&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool exec -e MYSQL_PWD=$DB_PASSWORD database mysql -u $DB_USERNAME $DB_DATABASE&lt;/span&gt; &lt;span class="c1"&gt;# or psql for PostgreSQL&lt;/span&gt;
  &lt;span class="na"&gt;nest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool exec app nest&lt;/span&gt;
  &lt;span class="na"&gt;npm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool exec app npm&lt;/span&gt; &lt;span class="c1"&gt;# or yarn&lt;/span&gt;
  &lt;span class="na"&gt;npx&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kool exec app npx&lt;/span&gt;

  &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool docker kooldev/node:14 npm install&lt;/span&gt; &lt;span class="c1"&gt;# or yarn install&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Run Commands
&lt;/h3&gt;

&lt;p&gt;When you need to execute a command inside a running service container, use the &lt;a href="https://kool.dev/docs/commands/kool-exec" rel="noopener noreferrer"&gt;&lt;code&gt;kool exec&lt;/code&gt; command&lt;/a&gt;. Run the following to check the version of Node running in your &lt;code&gt;app&lt;/code&gt; container.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool &lt;span class="nb"&gt;exec &lt;/span&gt;app node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;span class="go"&gt;
v14.17.1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Connect to the Database
&lt;/h3&gt;

&lt;p&gt;If you added a database service, start a new SQL client session inside your running &lt;code&gt;database&lt;/code&gt; container by executing &lt;code&gt;kool run mysql&lt;/code&gt; (MySQL) or &lt;code&gt;kool run psql&lt;/code&gt; (PostgreSQL). This runs the &lt;code&gt;mysql&lt;/code&gt; or &lt;code&gt;psql&lt;/code&gt; script in your &lt;strong&gt;kool.yml&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add Dependencies
&lt;/h3&gt;

&lt;p&gt;As your project evolves, and you add more dependencies to &lt;code&gt;package.json&lt;/code&gt;, use the &lt;a href="https://kool.dev/docs/commands/kool-restart" rel="noopener noreferrer"&gt;&lt;code&gt;kool restart&lt;/code&gt; command&lt;/a&gt; to restart your &lt;code&gt;app&lt;/code&gt; container and load the new packages.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool restart app
&lt;span class="go"&gt;
Stopping my-project_app_1 ... done
Going to remove my-project_app_1
Removing my-project_app_1 ... done
Creating my-project_app_1 ... done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  View the Logs
&lt;/h3&gt;

&lt;p&gt;View container logs using the &lt;a href="https://kool.dev/docs/commands/kool-logs" rel="noopener noreferrer"&gt;&lt;code&gt;kool logs&lt;/code&gt; command&lt;/a&gt;. Run &lt;code&gt;kool logs&lt;/code&gt; to see the logs for all running containers, or &lt;code&gt;kool logs app&lt;/code&gt; to specify a service and only see the logs for the &lt;code&gt;app&lt;/code&gt; container. Add the &lt;code&gt;-f&lt;/code&gt; option after &lt;code&gt;kool logs&lt;/code&gt; to follow the logs (i.e. &lt;code&gt;kool logs -f app&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;
  
  
  Share Your Work
&lt;/h3&gt;

&lt;p&gt;When you need to quickly share local changes with your team, use the &lt;a href="https://kool.dev/docs/commands/kool-share" rel="noopener noreferrer"&gt;&lt;code&gt;kool share&lt;/code&gt; command&lt;/a&gt; to share your local environment over the Internet via an HTTP tunnel. Specify your own subdomain using the &lt;code&gt;--subdomain&lt;/code&gt; flag.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool share &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3000
&lt;span class="go"&gt;
Thank you for using expose.
Local-URL:     app:3000
Dashboard-URL: http://127.0.0.1:4040
Expose-URL:    https://eeskzijcbe.kool.live

Remaining time: 00:59:59
Remaining time: 00:59:58
Remaining time: 00:59:57
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Switch Projects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; supports any language or framework, so you can standardize the way you work across all your tech stacks. When it's time to stop working on your new NestJS app and switch to a different project, you can easily change local Docker environments by running &lt;code&gt;kool stop&lt;/code&gt; on the NestJS project, moving into the other project directory, and running &lt;code&gt;kool start&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool stop
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/my-other-project
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pretty kool, right?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you like what we're doing, show your support for this new open source project by &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;starring us on GitHub&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Dive Deeper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kool.dev/docs/presets/nestjs" rel="noopener noreferrer"&gt;Read the docs for our NestJS Preset&lt;/a&gt; to learn more about using Kool with NestJS.&lt;/li&gt;
&lt;li&gt;Check out the &lt;a href="https://kool.dev/docs/presets/nestjs" rel="noopener noreferrer"&gt;Kool Presets&lt;/a&gt; for other popular frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kool.dev" rel="noopener noreferrer"&gt;Go to kool.dev&lt;/a&gt; to learn more about the Kool open source project.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kool-dev" rel="noopener noreferrer"&gt;
        kool-dev
      &lt;/a&gt; / &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;
        kool
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      From local development to the cloud: web apps development with containers made easy.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2c9a131304755404c25d798a79d45732e52881150dd6b8ce7ccdf3043c061bce/68747470733a2f2f6b6f6f6c2e6465762f696d672f6c6f676f2e706e67" width="400" alt="kool - cloud native dev tool"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://goreportcard.com/report/github.com/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/41d1a6a1552a124ad859772350dca69e3f7a76608052b2724afb96ced4f1def9/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6b6f6f6c2d6465762f6b6f6f6c" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/21e096501f8e71afebf9b32021095c59ef40e8e2e70128960e2dc65f5fdea8ee/68747470733a2f2f636f6465636f762e696f2f67682f6b6f6f6c2d6465762f6b6f6f6c2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/docker" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/docker/badge.svg" alt="Docker Hub"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/golangci-lint" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/golangci-lint/badge.svg" alt="Golang CI Lint"&gt;&lt;/a&gt;
&lt;a href="https://codeclimate.com/github/kool-dev/kool/maintainability" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/734f5b6dd1cda2d34c0b7242f1e323282c3fb4d86af53c36f35dda3ae01692ff/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f31353131663832366465393264326162333963632f6d61696e7461696e6162696c697479" alt="Maintainability"&gt;&lt;/a&gt;
&lt;a href="https://kool.dev/slack" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24c53943c966db565633b087e876c58b7f572a6b9df694d4295fa5c9f79636fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6f696e253230536c61636b2d6b6f6f6c2d2d6465762d6f72616e67653f6c6f676f3d736c61636b" alt="Join Slack Kool community"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8693bde04030b1670d5097703441005eba34240c32d1df1eb82a5f0d6716518e/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About &lt;code&gt;kool&lt;/code&gt;
&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a CLI tool that brings the complexities of modern software development environments down to earth - making these environments lightweight, fast and reproducible. It reduces the complexity and learning curve of &lt;em&gt;Docker&lt;/em&gt; containers for local environments, and offers a simplified interface for using &lt;em&gt;Kubernetes&lt;/em&gt; to deploy staging and production environments to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; gets your local development environment up and running easily and quickly, so you have more time to build a great application. When the time is right, you can then use Kool.dev Cloud to deploy and share your work with the world!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is suitable for solo developers and teams of all sizes. It provides a hassle-free way to handle the Docker basics and immediately start using containers for development, while simultaneously guaranteeing no loss of control over more specialized Docker environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;Learn more at kool.dev&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Requirements: Kool is powered by…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>nestjs</category>
      <category>javascript</category>
      <category>docker</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Use Kool to run Multiple Docker Applications at the same time in your Local Development Environment</title>
      <dc:creator>Fabrício José Souza</dc:creator>
      <pubDate>Mon, 12 Jul 2021 14:30:29 +0000</pubDate>
      <link>https://dev.to/kooldev/use-kool-to-run-multiple-docker-applications-at-the-same-time-in-your-local-development-environment-5ec6</link>
      <guid>https://dev.to/kooldev/use-kool-to-run-multiple-docker-applications-at-the-same-time-in-your-local-development-environment-5ec6</guid>
      <description>&lt;p&gt;More and more, we find ourselves working with Docker containers in the context of microservice architectures comprising multiple, loosely-coupled applications and services, and/or projects made up of two or more distinct apps running side-by-side talking to each other via APIs. As developers who work on these types of projects know all too well, setting up your local development environment to run &lt;strong&gt;multiple&lt;/strong&gt; Docker applications &lt;strong&gt;at the same time&lt;/strong&gt; can be a real hassle. Developing each app &lt;strong&gt;on its own&lt;/strong&gt; is a breeze &lt;a href="https://blog.kool.dev/article/using-docker-for-local-development/"&gt;using Kool and Docker Compose&lt;/a&gt;. However, when you need to run multiple apps at the same time, configuring the routing and intercommunication between different containers can be challenging.&lt;/p&gt;

&lt;p&gt;In this tutorial, we'll show you how to set up your local environment to run more than one Docker application at the same time using Kool and a Caddy web server. No doubt, this is just one of several ways to solve for this use case, but we think it's an approach that works really well for most projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;Before you start, if you haven't done so already, you need to &lt;a href="https://kool.dev/docs/getting-started/installation"&gt;install Docker and &lt;strong&gt;Kool CLI&lt;/strong&gt;&lt;/a&gt;. It also wouldn't hurt to quickly get up-to-speed with the &lt;a href="https://kool.dev/docs/commands/kool"&gt;Kool CLI commands&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/kool-dev/kool"&gt;&lt;code&gt;kool&lt;/code&gt;&lt;/a&gt; is a CLI tool that makes local development with Docker super easy. Kool CLI will level up your development workflow, and help you and your team improve the way you develop and deploy cloud native applications. Make sure you're always using the latest version by running &lt;code&gt;kool self-update&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  It always starts off simple
&lt;/h2&gt;

&lt;p&gt;You have a single application with its Docker Compose environment. Let's call it &lt;strong&gt;App 1&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/multiple-apps/app-1
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the two files we need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# App 1&lt;/span&gt;
&lt;span class="c1"&gt;# ~/multiple-apps/app-1/docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kooldev/php:8.0-nginx&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;80:80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app/public&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;# App 1
# ~/multiple-apps/app-1/index.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Welcome to App 1!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these two files, you can now get &lt;strong&gt;App 1&lt;/strong&gt; up and running using &lt;code&gt;kool start&lt;/code&gt;, and check the status of its service container using &lt;code&gt;kool status&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;span class="go"&gt;Creating network "app-1_default" with the default driver
Creating app-1_app_1 ... done

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool status
&lt;span class="go"&gt;+---------+---------+---------------------------------------------+---------------+
| SERVICE | RUNNING | PORTS                                       | STATE         |
+---------+---------+---------------------------------------------+---------------+
&lt;/span&gt;&lt;span class="gp"&gt;| app     | Running | 0.0.0.0:80-&amp;gt;&lt;/span&gt;80/tcp, :::80-&amp;gt;80/tcp, 9000/tcp | Up 4 seconds  |
&lt;span class="go"&gt;+---------+---------+---------------------------------------------+---------------+
[done] Fetching services status

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;curl localhost
&lt;span class="go"&gt;Welcome to App 1!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Awesome! Your &lt;code&gt;app&lt;/code&gt; service container is running, &lt;code&gt;kool status&lt;/code&gt; shows that port 80 is mapped from your host to the container, and &lt;code&gt;curl localhost&lt;/code&gt; successfully returns the output of &lt;strong&gt;App 1&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  But then it starts getting tricky
&lt;/h2&gt;

&lt;p&gt;As your project evolves over time, you need to add a second application called &lt;strong&gt;App 2&lt;/strong&gt;, which runs alongside &lt;strong&gt;App 1&lt;/strong&gt;. In other words, to work on the project, &lt;strong&gt;you need to run &lt;em&gt;both apps&lt;/em&gt; at the &lt;em&gt;same time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's quickly set up &lt;strong&gt;App 2&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/multiple-apps/app-2
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once again, let's create the two files we need (inside the &lt;code&gt;app-2&lt;/code&gt; directory):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# App 2&lt;/span&gt;
&lt;span class="c1"&gt;# ~/multiple-apps/app-2/docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kooldev/php:8.0-nginx&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;80:80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app/public&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;# App 2
# ~/multiple-apps/app-2/index.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Welcome to App 2!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time, when you try to get &lt;strong&gt;App 2&lt;/strong&gt; up and running (using &lt;code&gt;kool start&lt;/code&gt;), you run into a problem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;span class="go"&gt;Creating network "app-2_default" with the default driver
Creating app-2_app_1 ...
Creating app-2_app_1 ... error

ERROR: for app-2_app_1  Cannot start service app: driver failed programming external connectivity on endpoint app-2_app_1 (24719704f55491122a18f051d3f1e789b6afc3f34ccf7bfe3d7eac510117ef42):
  Bind for 0.0.0.0:80 failed: port is already allocated

ERROR: for app  Cannot start service app: driver failed programming external connectivity on endpoint app-2_app_1 (24719704f55491122a18f051d3f1e789b6afc3f34ccf7bfe3d7eac510117ef42):
  Bind for 0.0.0.0:80 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As per the error message, you have a port conflict (&lt;code&gt;Bind for 0.0.0.0:80 failed: port is already allocated&lt;/code&gt;). &lt;strong&gt;You cannot have two different containers bound to the same port on your host&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before you continue, let's stop your &lt;strong&gt;App 2&lt;/strong&gt; and &lt;strong&gt;App 1&lt;/strong&gt; containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-2 &lt;span class="c"&gt;# you should already be here&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool stop
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-1
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Not so fast!
&lt;/h2&gt;

&lt;p&gt;To fix this error, your first impulse is probably to use different ports for each service. For example, you can run &lt;strong&gt;App 1&lt;/strong&gt; on &lt;code&gt;localhost:8081&lt;/code&gt; and &lt;strong&gt;App 2&lt;/strong&gt; on &lt;code&gt;localhost:8082&lt;/code&gt;. However, you'll quickly realize this solution isn't viable because it's not flexible enough, and doesn't provide intercommunication between applications over a shared Docker network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proxy to the rescue
&lt;/h2&gt;

&lt;p&gt;The proxy design pattern provides a much better solution for running multiple Docker applications at the same time in your local development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add a global network to Docker Compose
&lt;/h3&gt;

&lt;p&gt;First, you need to improve the Docker Compose environments used by each of your apps. Using one of the many best practices built into the Docker configurations included with &lt;a href="https://kool.dev/docs/presets/introduction"&gt;&lt;strong&gt;Kool Presets&lt;/strong&gt;&lt;/a&gt;, let's create a &lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#networks"&gt;shared network between Docker containers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;By default, all containers in a &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file will share the same virtual network. This means two different applications will not have a channel of communication. For this reason, Kool Presets will usually have &lt;strong&gt;two networks&lt;/strong&gt; for each container: &lt;code&gt;kool_local&lt;/code&gt; and &lt;code&gt;kool_global&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kool_local&lt;/code&gt; is a local network that's only available to the group of containers from that &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file. It's the same as the default network (if we didn't specify the network ourselves).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kool_global&lt;/code&gt; is a global network created outside the scope of any particular &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file. It's available system-wide, and any containers running on the host can join it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's create an external &lt;code&gt;kool_global&lt;/code&gt; network inside each Docker Compose environment, and add each app to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# App 1&lt;/span&gt;
&lt;span class="c1"&gt;# ~/multiple-apps/app-1/docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kooldev/php:8.0-nginx&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app/public&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;kool_global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;aliases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app-1&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kool_global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# App 2&lt;/span&gt;
&lt;span class="c1"&gt;# ~/multiple-apps/app-2/docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kooldev/php:8.0-nginx&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app/public&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;kool_global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;aliases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app-2&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kool_global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that we replaced the &lt;code&gt;ports&lt;/code&gt; configuration with &lt;code&gt;expose&lt;/code&gt;. You don't want these &lt;code&gt;app&lt;/code&gt; containers bound to the host anymore, in order to avoid a conflict. Instead, you want to bind a single container to the host, which proxies each request internally over the &lt;code&gt;kool_global&lt;/code&gt; network to the correct service container using its network &lt;code&gt;alias&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#networks"&gt;&lt;code&gt;aliases&lt;/code&gt;&lt;/a&gt; key on the container network works like a &lt;strong&gt;domain name&lt;/strong&gt; that resolves to that container's address when used within the same network. This is a great way to normalize names for service containers that need to talk to each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up the proxy
&lt;/h3&gt;

&lt;p&gt;As mentioned earlier, we're going to use a &lt;a href="https://caddyserver.com/"&gt;Caddy web server&lt;/a&gt; as our reverse proxy. It's our first choice because it has a simple configuration interface and a rich feature set. &lt;a href="https://traefik.io/"&gt;Traefik&lt;/a&gt; or Nginx would work great too, so feel free to use what you like best when you implement this solution in a real project.&lt;/p&gt;

&lt;p&gt;Let's start by creating a &lt;a href="https://caddyserver.com/docs/caddyfile"&gt;&lt;code&gt;Caddyfile&lt;/code&gt;&lt;/a&gt; configuration file in a new &lt;code&gt;proxy&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/multiple-apps/proxy
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/proxy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# ~/multiple-apps/proxy/Caddyfile
&lt;/span&gt;{
  &lt;span class="n"&gt;auto_https&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;
}

&lt;span class="n"&gt;http&lt;/span&gt;://&lt;span class="n"&gt;a&lt;/span&gt;.&lt;span class="n"&gt;localhost&lt;/span&gt; {
  &lt;span class="n"&gt;reverse_proxy&lt;/span&gt; / &lt;span class="n"&gt;http&lt;/span&gt;://&lt;span class="n"&gt;app&lt;/span&gt;-&lt;span class="m"&gt;1&lt;/span&gt;
}

&lt;span class="n"&gt;http&lt;/span&gt;://&lt;span class="n"&gt;b&lt;/span&gt;.&lt;span class="n"&gt;localhost&lt;/span&gt; {
  &lt;span class="n"&gt;reverse_proxy&lt;/span&gt; / &lt;span class="n"&gt;http&lt;/span&gt;://&lt;span class="n"&gt;app&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that we use the &lt;code&gt;app-1&lt;/code&gt; and &lt;code&gt;app-2&lt;/code&gt; container network aliases to point to each destination, based on the incoming &lt;code&gt;Host&lt;/code&gt; request (&lt;code&gt;a.localhost&lt;/code&gt; vs. &lt;code&gt;b.localhost&lt;/code&gt;). You should also add these local domains to your &lt;code&gt;/etc/hosts&lt;/code&gt; file: &lt;code&gt;echo "127.0.0.1 a.localhost b.localhost" | sudo tee -a /etc/hosts&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By default, Caddy tries to use &lt;code&gt;HTTPS&lt;/code&gt; for all hosts. For this tutorial, we're disabling it. We'll cover local TLS usage in a future article.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, let's create a new &lt;code&gt;docker-compose.yml&lt;/code&gt; for Caddy itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ~/multiple-apps/proxy/docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:2-alpine&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;80:80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;kool_global&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kool_global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it. You're done configuring your proxy.&lt;/p&gt;

&lt;p&gt;Now, all you need to do is spin up your &lt;strong&gt;App 1&lt;/strong&gt;, &lt;strong&gt;App 2&lt;/strong&gt; and &lt;strong&gt;Proxy&lt;/strong&gt; service containers (using &lt;code&gt;kool start&lt;/code&gt; of course), and verify it works by sending a couple of test requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Proxy
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/proxy &lt;span class="c"&gt;# you should already be here&lt;/span&gt;
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;span class="go"&gt;Creating proxy_proxy_1 ... done

&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;App 1
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-1
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;App 2
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/multiple-apps/app-2
&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool start
&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Host: a.localhost"&lt;/span&gt; http://localhost
&lt;span class="go"&gt;Welcome to App 1!

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Host: b.localhost"&lt;/span&gt; http://localhost
&lt;span class="go"&gt;Welcome to App 2!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;W00t! You now have &lt;strong&gt;both apps up and running &lt;em&gt;at the same time&lt;/em&gt;&lt;/strong&gt;. You can access them using different host names, and they can also communicate with each other.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To clean up your local environment, you'll need to move into each directory (&lt;code&gt;app-1&lt;/code&gt;, &lt;code&gt;app-2&lt;/code&gt;, and &lt;code&gt;proxy&lt;/code&gt;) and run &lt;code&gt;kool stop&lt;/code&gt;, and then remove the directories you created: &lt;code&gt;rm -r ~/multiple-apps&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Kool's core team is already working on a new set of commands to make the above steps seamless and transparent, so you don't have to worry about the details. We invite you to &lt;a href="https://github.com/kool-dev/kool/discussions/328"&gt;join the discussion and contribute&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you like what we're doing, please show your support by &lt;a href="https://github.com/kool-dev/kool"&gt;&lt;strong&gt;starring us on GitHub&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Support the Kool open source project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/kool-dev/kool"&gt;Kool&lt;/a&gt; is open source and totally free to use. If you're interested in learning more about the project, please check out &lt;a href="https://kool.dev/"&gt;&lt;strong&gt;kool.dev&lt;/strong&gt;&lt;/a&gt;. If you have questions, need support, or want to get involved, please &lt;a href="https://kool.dev/slack"&gt;join our Slack channel&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>webdev</category>
      <category>devops</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Use Kool to Dockerize Your Local Development Environment the Right Way</title>
      <dc:creator>Fabrício José Souza</dc:creator>
      <pubDate>Thu, 01 Jul 2021 20:04:20 +0000</pubDate>
      <link>https://dev.to/kooldev/use-kool-to-dockerize-your-local-development-environment-the-right-way-18gl</link>
      <guid>https://dev.to/kooldev/use-kool-to-dockerize-your-local-development-environment-the-right-way-18gl</guid>
      <description>&lt;p&gt;Using Docker containers in local development environments has become commonplace for web development. And yet, when you get down to it, using Docker locally is still a challenge, oftentimes resulting in a frustrating developer experience and plenty of headaches. So, what is &lt;strong&gt;the right way&lt;/strong&gt; to use containers for local development? We believe the answer is a new open source project called &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;Kool&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;Kool&lt;/strong&gt;&lt;/a&gt; helps you develop cloud native applications in a better and more efficient way by removing barriers and allowing developers and DevOps engineers to focus on what matters most.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Real-World Learning Curve
&lt;/h2&gt;

&lt;p&gt;In the past few years, Docker has taken the software development world by storm. Its powerful interface for building, deploying and running containers has led to its widespread adoption by teams and companies of all sizes. By containerizing your web applications, you can more easily work across different tech stacks, switch between different applications and microservices, and standardize and scale your environments. You no longer waste precious time debugging and fixing issues with version mismatches, concurrently running applications, dependency conflicts, poor resource control, etc.&lt;/p&gt;

&lt;p&gt;However, while Docker has a straightforward "getting started" experience, developing real-world applications on containers is a lot easier said than done. You quickly start climbing a steep learning curve when your requirements evolve and you're forced to master Docker's nuances, its more advanced configurations, and the working internals of its containers in order to apply its features to more complex environments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For example, mastering when to use the &lt;code&gt;-t&lt;/code&gt; or &lt;code&gt;-T&lt;/code&gt; flags for &lt;code&gt;docker run&lt;/code&gt; and &lt;code&gt;docker exec&lt;/code&gt;, resolving issues with permissions on mapped volumes, and even deeper issues like having your Docker network suddenly lose external packages because it has a different MTU value than the underlying host network. If you've faced these issues before, I feel for you. If not, count yourself lucky!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While Docker provides teams with a lot of power, this power does not come cheap. As you climb the Docker learning curve, you often have no choice but to use trial and error to find acceptable solutions to problems you encounter along the way. Since Docker expertise can vary greatly across the team, it is common to find knowledge siloed with senior members of the team, and developers applying different solutions to the same problem. Additional hidden costs include senior engineers pulled away from their work to help others with technical issues, time spent reconciling conflicting opinions and workarounds, and the frustration of disrupted workflows causing low morale. Consequently, it becomes difficult for your project to sustain its high velocity, and stay on schedule and on budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Better Way with Kool
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; (&lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;kool-dev/kool&lt;/a&gt;) offers a better way to use Docker locally. Kool provides a suite of open source tools that deliver a better developer experience (DX) and help you avoid the pitfalls described earlier by making sure you follow best practices and use Docker in a standardized way across your projects and teams. From local development environments running on Docker to staging and production environments running in the cloud on Kubernetes, Kool makes it easier to containerize your web apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kool CLI
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;kool&lt;/code&gt; CLI provides a simple, intuitive interface for managing Docker and Docker Compose containers. It simplifies the way you use Docker in your local environment by removing the Docker "speed bumps" that slow you down, greatly reducing the learning curve and error-prone area, and helping teams leverage containers at a lower cost of entry.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kool CLI comes with a &lt;a href="https://kool.dev/docs/getting-started/installation" rel="noopener noreferrer"&gt;single-line installer&lt;/a&gt;, a &lt;a href="https://kool.dev/docs/commands/kool-self-update" rel="noopener noreferrer"&gt;&lt;code&gt;self-update&lt;/code&gt; command&lt;/a&gt; to easily upgrade to new releases, an intuitive command interface with a complete &lt;a href="https://kool.dev/docs/commands/kool" rel="noopener noreferrer"&gt;command reference&lt;/a&gt;, and solid &lt;a href="https://kool.dev/docs/introduction" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. By using the &lt;code&gt;kool&lt;/code&gt; CLI instead of &lt;code&gt;docker&lt;/code&gt; directly, you can stop learning new flags each day and stay focused on writing code!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Kool Presets
&lt;/h3&gt;

&lt;p&gt;Kool Presets provide pre-built development environments with sane defaults out of the box for quickly setting up projects using popular frameworks and tech stacks, such as Laravel, Symfony, Node.js, AdonisJs, Next.js (and more). Presets auto-generate a customized &lt;code&gt;docker-compose.yml&lt;/code&gt; file, as well as a &lt;code&gt;kool.yml&lt;/code&gt; configuration file in which you can easily store common single-line and multi-line scripts that you execute using the &lt;code&gt;kool run&lt;/code&gt; command. This helps keep your development workflow open and shared across the entire team. &lt;a href="https://kool.dev/docs/getting-started/how-it-works" rel="noopener noreferrer"&gt;Learn more about how it works&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kool Docker Images
&lt;/h3&gt;

&lt;p&gt;When you start developing in containers, you suddenly realize official Docker images are built for deployment, and are not well-suited for the special nuances of local development. One of the most common and recurring problems we see are permission issues with mapped volumes, due to host users being different from container users. Kool fixes this problem, and many others, by creating custom Docker images optimized for local development environments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP Images (&lt;a href="https://github.com/kool-dev/docker-php" rel="noopener noreferrer"&gt;https://github.com/kool-dev/docker-php&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Nginx Images (&lt;a href="https://github.com/kool-dev/docker-nginx" rel="noopener noreferrer"&gt;https://github.com/kool-dev/docker-nginx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Node Images (&lt;a href="https://github.com/kool-dev/docker-node" rel="noopener noreferrer"&gt;https://github.com/kool-dev/docker-node&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Java Images (&lt;a href="https://github.com/kool-dev/docker-java" rel="noopener noreferrer"&gt;https://github.com/kool-dev/docker-java&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;DevOps Images (&lt;a href="https://github.com/kool-dev/docker-toolkit" rel="noopener noreferrer"&gt;https://github.com/kool-dev/docker-toolkit&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few of the optimizations included in Kool Docker images:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UID mapping to host user to solve permission issues&lt;/li&gt;
&lt;li&gt;Alpine base images to remain small and up-to-date&lt;/li&gt;
&lt;li&gt;Configured with sane defaults (for development as well as production)&lt;/li&gt;
&lt;li&gt;Environment variables to easily update the most common settings&lt;/li&gt;
&lt;li&gt;Battle-tested - we've been using these images in production for quite a long time now!&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you know what you're doing, you can use &lt;code&gt;kool&lt;/code&gt; with any Docker image. You are not required to use Kool-optimized images.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Kool Cloud (Coming Soon)
&lt;/h3&gt;

&lt;p&gt;Kool CLI integrates seamlessly with Kool Cloud. Based on the same Docker configuration you already use locally, you can very easily and quickly create staging environments in the cloud, straight from your local environment. Using a set of &lt;code&gt;kool deploy&lt;/code&gt; commands, you can push your local project repository to the Kool Cloud, where it's automatically deployed on containers running on a shared Kubernetes infrastructure. Your local environment and cloud environments have never been so close to each other!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kool Cloud is currently being tested in a closed alpha, but will soon be opened as a public beta. If you would like early access, &lt;a href="https://kool.dev/register" rel="noopener noreferrer"&gt;please create a free account&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Flexible and Extensible
&lt;/h3&gt;

&lt;p&gt;If you know your way around Docker, you can use Kool and remain totally in charge of your Docker configuration. Kool guarantees no vendor lock-in and no loss of control, which means you can fully customize and extend your more specialized Docker environments. You'll never feel as if your hands are tied. On the contrary, using Kool will actually free your hands, and let you focus on more valuable work instead of spending time tweaking your development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source
&lt;/h3&gt;

&lt;p&gt;Kool is &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;open source&lt;/a&gt; and totally free to use. Feel free to &lt;a href="https://github.com/kool-dev/kool/blob/master/CONTRIBUTING.md" rel="noopener noreferrer"&gt;contribute&lt;/a&gt;, help us with testing, and/or &lt;a href="https://kool.dev/slack" rel="noopener noreferrer"&gt;suggest new ways&lt;/a&gt; to make Kool better.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you like what we're doing, show your support for this new open source project by &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;&lt;strong&gt;starring us on GitHub&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Battle-Tested
&lt;/h3&gt;

&lt;p&gt;Kool is sponsored and maintained by &lt;a href="https://fireworkweb.com" rel="noopener noreferrer"&gt;Firework Web&lt;/a&gt;, a software development agency located in Brazil. Over many years, having worked on hundreds of web projects with dozens of teams, Firework developed a ton of expertise using Docker and other development tools, and figured out the right way to set up and manage local Docker environments. Based on this experience, the Kool project was born. And now Firework is ready to share it with all of you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give It a Try
&lt;/h2&gt;

&lt;p&gt;Kool is a great new development tool that will help you use Docker containers in your local environment the right way. You'll get all the benefits of containerizing your web apps, without the hassles. If you haven't already, &lt;a href="https://kool.dev/docs/getting-started/starting-new-project" rel="noopener noreferrer"&gt;give Kool a try&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Not Using Docker for Development?
&lt;/h3&gt;

&lt;p&gt;If you're not yet using Docker in your development environment, here's a great post that gives you a number of reasons why you should make the switch.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kool-dev" rel="noopener noreferrer"&gt;
        kool-dev
      &lt;/a&gt; / &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;
        kool
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      From local development to the cloud: web apps development with containers made easy.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2c9a131304755404c25d798a79d45732e52881150dd6b8ce7ccdf3043c061bce/68747470733a2f2f6b6f6f6c2e6465762f696d672f6c6f676f2e706e67" width="400" alt="kool - cloud native dev tool"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://goreportcard.com/report/github.com/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/41d1a6a1552a124ad859772350dca69e3f7a76608052b2724afb96ced4f1def9/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6b6f6f6c2d6465762f6b6f6f6c" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/21e096501f8e71afebf9b32021095c59ef40e8e2e70128960e2dc65f5fdea8ee/68747470733a2f2f636f6465636f762e696f2f67682f6b6f6f6c2d6465762f6b6f6f6c2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/docker" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/docker/badge.svg" alt="Docker Hub"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/golangci-lint" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/golangci-lint/badge.svg" alt="Golang CI Lint"&gt;&lt;/a&gt;
&lt;a href="https://codeclimate.com/github/kool-dev/kool/maintainability" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/734f5b6dd1cda2d34c0b7242f1e323282c3fb4d86af53c36f35dda3ae01692ff/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f31353131663832366465393264326162333963632f6d61696e7461696e6162696c697479" alt="Maintainability"&gt;&lt;/a&gt;
&lt;a href="https://kool.dev/slack" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24c53943c966db565633b087e876c58b7f572a6b9df694d4295fa5c9f79636fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6f696e253230536c61636b2d6b6f6f6c2d2d6465762d6f72616e67653f6c6f676f3d736c61636b" alt="Join Slack Kool community"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8693bde04030b1670d5097703441005eba34240c32d1df1eb82a5f0d6716518e/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About &lt;code&gt;kool&lt;/code&gt;
&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a CLI tool that brings the complexities of modern software development environments down to earth - making these environments lightweight, fast and reproducible. It reduces the complexity and learning curve of &lt;em&gt;Docker&lt;/em&gt; containers for local environments, and offers a simplified interface for using &lt;em&gt;Kubernetes&lt;/em&gt; to deploy staging and production environments to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; gets your local development environment up and running easily and quickly, so you have more time to build a great application. When the time is right, you can then use Kool.dev Cloud to deploy and share your work with the world!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is suitable for solo developers and teams of all sizes. It provides a hassle-free way to handle the Docker basics and immediately start using containers for development, while simultaneously guaranteeing no loss of control over more specialized Docker environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;Learn more at kool.dev&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Requirements: Kool is powered by…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>docker</category>
      <category>opensource</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Running Laravel on Docker is really easy with Kool</title>
      <dc:creator>Daniel Polito</dc:creator>
      <pubDate>Tue, 22 Jun 2021 18:31:04 +0000</pubDate>
      <link>https://dev.to/kooldev/running-laravel-on-docker-is-really-easy-with-kool-400h</link>
      <guid>https://dev.to/kooldev/running-laravel-on-docker-is-really-easy-with-kool-400h</guid>
      <description>&lt;p&gt;In just 3 simple steps, you can use &lt;strong&gt;Kool CLI's&lt;/strong&gt; &lt;a href="https://kool.dev/docs/commands/kool-create" rel="noopener noreferrer"&gt;&lt;code&gt;kool create&lt;/code&gt;&lt;/a&gt; command to start a new Laravel application running in a local Docker environment. &lt;a href="https://kool.dev" rel="noopener noreferrer"&gt;Kool&lt;/a&gt; is an open source dev tool that makes using Docker for local development a lot easier.&lt;/p&gt;

&lt;p&gt;Before you start, if you haven't done so already, you need to &lt;a href="https://kool.dev/docs/getting-started/installation" rel="noopener noreferrer"&gt;install Docker and &lt;strong&gt;Kool CLI&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Create a new Laravel application
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool create laravel my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command may take a minute or two to complete while &lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Composer&lt;/a&gt; downloads Laravel's vendor dependencies. After installing Laravel, &lt;code&gt;kool create&lt;/code&gt; automatically runs the &lt;a href="https://kool.dev/docs/commands/kool-preset" rel="noopener noreferrer"&gt;&lt;code&gt;kool preset laravel&lt;/code&gt;&lt;/a&gt; command, which helps you set up your project's development environment using an interactive wizard.&lt;/p&gt;
&lt;h3&gt;
  
  
  PHP
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;? What app service do you want to use  [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;PHP 8.0
&lt;span class="go"&gt;  PHP 7.4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;? What database service do you want to use  [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;MySQL 8.0
&lt;span class="go"&gt;  MySQL 5.7
  MariaDB 10.5
  PostgreSQL 13.0
  none
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Cache
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;? What cache service do you want to use  [Use arrows to move, type to filter]
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Redis 6.0
&lt;span class="go"&gt;  Memcached 1.6
  none
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Package Manager
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;? What javascript package manager do you want to use  [Use arrows to move, type to filter]
  npm
&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;After selecting your preferences, the latest version of Laravel will be installed and ready for you in your &lt;code&gt;my-project&lt;/code&gt; folder, along with your new &lt;code&gt;kool&lt;/code&gt; environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmiifgrnahvz6jjl69xnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmiifgrnahvz6jjl69xnn.png" alt="kool preset laravel - output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Move into your new Laravel project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;kool preset&lt;/code&gt; command auto-generated the following configuration files and added them to your project, which you can modify and extend.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gi"&gt;+docker-compose.yml
+kool.yml
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Update &lt;code&gt;.env.example&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Next, we need to make a few tweaks to the default &lt;strong&gt;.env.example&lt;/strong&gt; file that ships with Laravel in order to match the services in your &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file. For example, we need to change the hosts from &lt;em&gt;localhost&lt;/em&gt; to the appropriate service container name, which are accessible from within Docker.&lt;/p&gt;
&lt;h3&gt;
  
  
  Database Services
&lt;/h3&gt;

&lt;p&gt;MySQL 5.7 and 8.0 / MariaDB 10.5&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-DB_HOST=127.0.0.1
&lt;/span&gt;&lt;span class="gi"&gt;+DB_HOST=database
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;PostgreSQL 13.0&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-DB_CONNECTION=mysql
&lt;/span&gt;&lt;span class="gi"&gt;+DB_CONNECTION=pgsql
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gd"&gt;-DB_HOST=127.0.0.1
&lt;/span&gt;&lt;span class="gi"&gt;+DB_HOST=database
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gd"&gt;-DB_PORT=3306
&lt;/span&gt;&lt;span class="gi"&gt;+DB_PORT=5432
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Cache Services
&lt;/h3&gt;

&lt;p&gt;Redis&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-REDIS_HOST=127.0.0.1
&lt;/span&gt;&lt;span class="gi"&gt;+REDIS_HOST=cache
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Memcached&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-MEMCACHED_HOST=127.0.0.1
&lt;/span&gt;&lt;span class="gi"&gt;+MEMCACHED_HOST=cache
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  3. Run &lt;code&gt;kool run setup&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Now, spin up your local environment for the first time using the &lt;code&gt;setup&lt;/code&gt; script in your &lt;strong&gt;kool.yml&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool run setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: if you're running this command for the first time, Docker may need to download all the container images that are being used, which can take a few minutes, depending on your internet connection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it!&lt;/p&gt;

&lt;p&gt;After &lt;code&gt;kool run setup&lt;/code&gt; has finished, you can access your new Laravel app at &lt;a href="http://localhost" rel="noopener noreferrer"&gt;http://localhost&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;kool run setup
&lt;span class="go"&gt;
Creating network "my-project_kool_local" with the default driver
Creating volume "my-project_database" with default driver
Creating volume "my-project_cache" with default driver
Creating my-project_cache_1    ... done
Creating my-project_app_1      ... done
Creating my-project_database_1 ... done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9wrpikyu5gfr1gpy603.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9wrpikyu5gfr1gpy603.png" alt="kool laravel welcome screen"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Dive Deeper
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://kool.dev/docs/presets/laravel" rel="noopener noreferrer"&gt;Read the docs for our Laravel Preset&lt;/a&gt; to learn more about using Kool with Laravel.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kool.dev" rel="noopener noreferrer"&gt;Go to kool.dev&lt;/a&gt; to learn more about the Kool open source project.&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kool-dev" rel="noopener noreferrer"&gt;
        kool-dev
      &lt;/a&gt; / &lt;a href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;
        kool
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      From local development to the cloud: web apps development with containers made easy.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2c9a131304755404c25d798a79d45732e52881150dd6b8ce7ccdf3043c061bce/68747470733a2f2f6b6f6f6c2e6465762f696d672f6c6f676f2e706e67" width="400" alt="kool - cloud native dev tool"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://goreportcard.com/report/github.com/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/41d1a6a1552a124ad859772350dca69e3f7a76608052b2724afb96ced4f1def9/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6b6f6f6c2d6465762f6b6f6f6c" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/kool-dev/kool" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/21e096501f8e71afebf9b32021095c59ef40e8e2e70128960e2dc65f5fdea8ee/68747470733a2f2f636f6465636f762e696f2f67682f6b6f6f6c2d6465762f6b6f6f6c2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/docker" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/docker/badge.svg" alt="Docker Hub"&gt;&lt;/a&gt;
&lt;a href="https://github.com/kool-dev/kool/workflows/golangci-lint" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/kool-dev/kool/workflows/golangci-lint/badge.svg" alt="Golang CI Lint"&gt;&lt;/a&gt;
&lt;a href="https://codeclimate.com/github/kool-dev/kool/maintainability" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/734f5b6dd1cda2d34c0b7242f1e323282c3fb4d86af53c36f35dda3ae01692ff/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f31353131663832366465393264326162333963632f6d61696e7461696e6162696c697479" alt="Maintainability"&gt;&lt;/a&gt;
&lt;a href="https://kool.dev/slack" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/24c53943c966db565633b087e876c58b7f572a6b9df694d4295fa5c9f79636fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a6f696e253230536c61636b2d6b6f6f6c2d2d6465762d6f72616e67653f6c6f676f3d736c61636b" alt="Join Slack Kool community"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8693bde04030b1670d5097703441005eba34240c32d1df1eb82a5f0d6716518e/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About &lt;code&gt;kool&lt;/code&gt;
&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is a CLI tool that brings the complexities of modern software development environments down to earth - making these environments lightweight, fast and reproducible. It reduces the complexity and learning curve of &lt;em&gt;Docker&lt;/em&gt; containers for local environments, and offers a simplified interface for using &lt;em&gt;Kubernetes&lt;/em&gt; to deploy staging and production environments to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; gets your local development environment up and running easily and quickly, so you have more time to build a great application. When the time is right, you can then use Kool.dev Cloud to deploy and share your work with the world!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kool&lt;/strong&gt; is suitable for solo developers and teams of all sizes. It provides a hassle-free way to handle the Docker basics and immediately start using containers for development, while simultaneously guaranteeing no loss of control over more specialized Docker environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kool.dev" rel="nofollow noopener noreferrer"&gt;Learn more at kool.dev&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Requirements: Kool is powered by…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kool-dev/kool" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>laravel</category>
      <category>docker</category>
      <category>opensource</category>
      <category>kool</category>
    </item>
  </channel>
</rss>
