<?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: Repro Dev</title>
    <description>The latest articles on DEV Community by Repro Dev (@reprodev).</description>
    <link>https://dev.to/reprodev</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%2Fuser%2Fprofile_image%2F1280175%2Fa67e6296-986b-4f40-ac21-345dd688529b.png</url>
      <title>DEV Community: Repro Dev</title>
      <link>https://dev.to/reprodev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reprodev"/>
    <language>en</language>
    <item>
      <title>Capo2Keys : A Tool for Converting Guitar Chord Charts for Piano</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Thu, 19 Feb 2026 16:21:11 +0000</pubDate>
      <link>https://dev.to/reprodev/capo2keys-a-tool-for-converting-guitar-chord-charts-for-piano-1ac1</link>
      <guid>https://dev.to/reprodev/capo2keys-a-tool-for-converting-guitar-chord-charts-for-piano-1ac1</guid>
      <description>&lt;p&gt;Well hello, it's been a hot minute since I've last posted on this blog but so much has gone on since my last post about Docker almost 2 years ago. I've not had as much free time but I've been busy working on a bunch of new articles and coding ideas.&lt;/p&gt;

&lt;p&gt;Plus thanks to the almost daily advances of AI, it's meant that I can now tackle projects in a much more efficient and productive way. &lt;br&gt;
With that out of the way, here's a little something I vibe-coded while I was procrastinating over something else and wanted to see how AI would stack up as a coding partner.&lt;/p&gt;

&lt;p&gt;I took up learning the piano towards the end of 2024 but have played guitar for much longer than that. I loved being able to pick up the guitar with a capo and play songs from Chord sheets on the internet. The main problem being that my music theory was not good enough to be able to easily transpose these to Piano especially when those chord sheets have lyrics.&lt;/p&gt;

&lt;p&gt;I was able to get ChatGPT to transpose a lot of these by copying and pasting in the content that it converted and I would then convert these to a PDF manually. It was a tedious process that worked quite well until it didn't anymore.&lt;/p&gt;

&lt;p&gt;As we got the end of November 2025, songs were failing due to errors that first didn't make sense as some worked and some didn't. This seemed to be combination of copyright issues with the song lyrics and that due to that sometimes ChatGPT would either choke, give me one verse or tell me that it wasn't designed to do this in an error message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExNWJldmZiYjBjdjJpOWUzcjFranNyZ2R6cGlzdmxmbmc5Y3FiNnB4MiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F3orieZ7x4y7SN1EsIU%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img width="100%" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExNWJldmZiYjBjdjJpOWUzcjFranNyZ2R6cGlzdmxmbmc5Y3FiNnB4MiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F3orieZ7x4y7SN1EsIU%2Fgiphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With that out of the way, here's a little something I vibe-coded while I was procrastinating over something else and wanted to see how AI would stack up as a coding partner. &lt;/p&gt;


&lt;h2&gt;
  
  
  Capo2Keys
&lt;/h2&gt;

&lt;p&gt;Introducing Capo2Keys, a GUI tool built in Flask but deployed as a Docker container with Web UI to help convert and then export, guitar capo chord charts into piano-ready keys as a PDF and TXT file, all while preserving lyrics and chord structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyidteepn6xz86v2m3d9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyidteepn6xz86v2m3d9z.png" alt="Capo2Keys Logo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&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://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;
        reprodev
      &lt;/a&gt; / &lt;a href="https://github.com/reprodev/Capo2Keys" rel="noopener noreferrer"&gt;
        Capo2Keys
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Tool to convert guitar capo chord charts into piano-ready keys while preserving lyrics and chord structure. Flask-based Web UI with a Docker version for ease of deployment
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Capo2Keys&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Convert guitar capo chord charts into piano-ready keys while preserving lyrics and chord structure.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/reprodev/Capo2Keys/docs/assets/Capo2KeysSmallV01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Freprodev%2FCapo2Keys%2Fdocs%2Fassets%2FCapo2KeysSmallV01.png" alt="Capo2Keys Logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Capo2Keys provides a Docker-first Flask WebUI, a CLI mode for scripts, and an optional desktop app build from the same codebase.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Transpose by capo value (&lt;code&gt;0-11&lt;/code&gt; semitones)&lt;/li&gt;
&lt;li&gt;Keep lyrics and chord formatting intact&lt;/li&gt;
&lt;li&gt;Generate both &lt;code&gt;.txt&lt;/code&gt; and &lt;code&gt;.pdf&lt;/code&gt; outputs&lt;/li&gt;
&lt;li&gt;Conflict-safe output naming (&lt;code&gt;suffix&lt;/code&gt; or &lt;code&gt;overwrite&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Archive view grouped by song set&lt;/li&gt;
&lt;li&gt;Docker deployment + GHCR image publishing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Generator View&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/reprodev/Capo2Keys/docs/assets/01-Capo2KeysGeneratorV01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Freprodev%2FCapo2Keys%2Fdocs%2Fassets%2F01-Capo2KeysGeneratorV01.png" alt="Generator View 01"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick Your Capo from 0 to 11 (0 to Apply No Capo)&lt;/li&gt;
&lt;li&gt;Fill in the Song Title and Your Artist (Title by Song Artist)&lt;/li&gt;
&lt;li&gt;Copy and Paste your Capo Chords&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/reprodev/Capo2Keys/docs/assets/02-Capo2KeysGeneratorV01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Freprodev%2FCapo2Keys%2Fdocs%2Fassets%2F02-Capo2KeysGeneratorV01.png" alt="Generator View 02"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Generate Tranpostion&lt;/strong&gt; to generate your Guitar Capo Chords tranposed to Piano Chords with all the lyrics&lt;/li&gt;
&lt;li&gt;Download Your PDF or TXT File from here or click &lt;strong&gt;Browse Archive&lt;/strong&gt; to view all your generated Piano Chords&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/reprodev/Capo2Keys/docs/assets/03-Capo2KeysGeneratorV01.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Freprodev%2FCapo2Keys%2Fdocs%2Fassets%2F03-Capo2KeysGeneratorV01.png" alt="Generator View 03"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Archive View&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Browse the Archive…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/reprodev/Capo2Keys" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;As I couldn't find anything else out there to do this and so Capo2Keys (originally named Chordbox and then CapoToKeys) was created.&lt;/p&gt;

&lt;p&gt;I used Codex from ChatGPT in Visual Studio Code on Windows to a bit of vibe-coding. The plan was to have this realised as a Docker container that I could spin up when I needed and an accompanying Python application as proof of concept for a Desktop version.&lt;/p&gt;

&lt;p&gt;This is also my first time using GitHub actions with GitHub secrets (GitHub PAT) to build a Docker image that I can now pull using a Docker Compose or Docker Run command just like some of my favourite Docker based applications.&lt;/p&gt;

&lt;p&gt;I hope you get as much use out of this as I do and feel free to make suggestions to make this more useful to everyone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExYm12aHlicmQ1N3NoNGllOGM1enE4bWRhZzMwZXplOHE0MTk5bTdiciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F3ofT5VtuDqvC1QSsWk%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img width="100%" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExYm12aHlicmQ1N3NoNGllOGM1enE4bWRhZzMwZXplOHE0MTk5bTdiciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2F3ofT5VtuDqvC1QSsWk%2Fgiphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Transpose by capo value (0-11 semitones)&lt;/li&gt;
&lt;li&gt;Keep lyrics and chord formatting intact&lt;/li&gt;
&lt;li&gt;Generate both .txt and .pdf outputs&lt;/li&gt;
&lt;li&gt;Conflict-safe output naming (suffix or overwrite)&lt;/li&gt;
&lt;li&gt;Archive view grouped by song set&lt;/li&gt;
&lt;li&gt;Docker deployment with Docker Compose file + GHCR image publishing&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;For now I'd suggest that you use the Docker version as the Python version works but can bring up a security alert on Windows. Not malicious but can be annoying.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker Desktop on Windows or WSL (or both)&lt;/li&gt;
&lt;li&gt;Docker installed on Linux&lt;/li&gt;
&lt;li&gt;Docker installed on MacOS&lt;/li&gt;
&lt;li&gt;Python (For the Desktop Version)&lt;/li&gt;
&lt;li&gt;Some Guitar Chords with or without Capo you want to play on Piano&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker Run
&lt;/h3&gt;

&lt;p&gt;This is the quickest and easiest way to get started for you to try it out. You can do it in one command below to get started.&lt;/p&gt;

&lt;p&gt;You can copy and run the below in your terminal and it'll be up and running.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker pull ghcr.io/reprodev/capo2keys:latest&lt;br&gt;
docker run -d \&lt;br&gt;
  --name capo2keys \&lt;br&gt;
  -p 4506:4506 \&lt;br&gt;
  -v "./data:/data" \&lt;br&gt;
  ghcr.io/reprodev/capo2keys:latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="http://localhost:4506" rel="noopener noreferrer"&gt;http://localhost:4506&lt;/a&gt; in your browser on the machine you've run the command on to get to the WebUI.&lt;/p&gt;

&lt;p&gt;Extra technical details for those who may find it interesting with a breakdown of this command line by line to explaining how it works.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pulls the latest Docker Image from the GitHub Container Registry (GHCR) which is built by GitHub actions when the code is changed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;docker pull ghcr.io/reprodev/capo2keys:latest&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Runs the downloaded image in detached mode so you don't have to keep the terminal session and it runs in the background&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;docker run -d \&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sets the name of the new container as capo2keys&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;--name capo2keys \&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the exposed port (the one you would connect to, on the left), this case 4506 and it's internal port (the port that Docker uses internally on it's Docker Network) on the right, in this case also 4506.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;-p 4506:4506 \&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sets the volume where the data will be stored on the host machine for a bind mount on the left, in this case a folder inside where this is run called ./data on the left and the one it refers to in docker on the right /data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;-v "./data:/data" \&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This states the name and location of the docker image if you haven't pulled it yet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;ghcr.io/reprodev/capo2keys:latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There are other methods for using Docker Compose and the Python Desktop version but I'll only focus on the Docker Run version so we can get down to actually using this application.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to use Capo2Keys
&lt;/h2&gt;

&lt;p&gt;-Go ahead and run it using the method you've chosen, we're looking at the Docker Run version. &lt;/p&gt;

&lt;p&gt;-Run the command and then point your browser to &lt;a href="http://localhost:4506" rel="noopener noreferrer"&gt;http://localhost:4506&lt;/a&gt; to get to the main WebUI that we call the Generator&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz5qbyo4l7n01wqb64qn8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz5qbyo4l7n01wqb64qn8.png" alt="01-Capo2KeysGeneratorV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy and paste the chords you need and add the Capo Number Position that it would be played on a guitar with.&lt;/li&gt;
&lt;li&gt;As a bonus you can also keep the capo at 0 to keep the chords and lyrics unchanged if you're looking to archive some rare music to PDF.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fenu4l2x4zx7oc213pc4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fenu4l2x4zx7oc213pc4a.png" alt="02-Capo2KeysGeneratorV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Generate Composition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fumtjevrgduk7ca9s4h35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fumtjevrgduk7ca9s4h35.png" alt="03-Capo2KeysGeneratorV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This will produce a TXT and PDF version which you can download straight this page using the buttons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use the Clear button to clear all text boxes and paste in another chord sheet if you like.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To download your previous chords or view them in browser straight away then click Browse Archive to head to the Archive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2qbsd3pvjimgw8dx7jtt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2qbsd3pvjimgw8dx7jtt.png" alt="04-Capo2KeysArchiveV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;From here the files are grouped in pairs of TXT and PDF so you can either view from the list or download here as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you want to delete some you used the wrong capo on or just to do a little spring cleaning you can use the trashcan next to the group you want to remove and it'll delete them from the archive.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgjbambenz2ahcq3g9tgr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgjbambenz2ahcq3g9tgr.png" alt="05-Capo2KeysArchiveV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxn220k189vrlibosx3is.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxn220k189vrlibosx3is.png" alt="06-Capo2KeysArchiveV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Back to Generator in the top right to go back to the Main Menu and paste some more chords.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhfmjbk0ya8xbvz3exln9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhfmjbk0ya8xbvz3exln9.png" alt="01-Capo2KeysGeneratorV01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That wraps up how to run and then use the Capo2Keys application and the first of some new applications I've been developing on my GitHub. Feel free to check out my other projects on there and submit your bugs or suggestions in the repository.&lt;/p&gt;




&lt;p&gt;This was a great project to start learning more about how to use AI to help with designing, coding, testing and then finally deploying an application from idea to working prototype in just an hour or so.&lt;/p&gt;

&lt;p&gt;Personally, I've also learnt a bunch about how Git can be used to develop across multiple machines and the importance of version control.&lt;/p&gt;

&lt;p&gt;There's more to come from the AI revolution but right now it's letting sparks of an idea come to life in record time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExYXRpdWRhZzg3dzg3bDI3NXVmYm83bzF4NzF6eTV5eGxxOHNneHhuZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FtczJoRU7XwBS8%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img width="100%" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExYXRpdWRhZzg3dzg3bDI3NXVmYm83bzF4NzF6eTV5eGxxOHNneHhuZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FtczJoRU7XwBS8%2Fgiphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Check out &lt;a href="https://reprodev.com" rel="noopener noreferrer"&gt;https://reprodev.com&lt;/a&gt; for more guides, tutorials and self hosted tips.&lt;/p&gt;

&lt;p&gt;For more code examples and ongoing projects you can tap into my Github&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;https://github.com/reprodev&lt;/a&gt;&lt;/p&gt;




</description>
      <category>development</category>
      <category>chatgpt</category>
      <category>learning</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 5: Watchtower : How to Update Docker Containers and Images The Easy Way</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Fri, 22 Mar 2024 15:10:19 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-5-watchtower-how-to-update-docker-containers-and-images-the-easy-way-296l</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-5-watchtower-how-to-update-docker-containers-and-images-the-easy-way-296l</guid>
      <description>&lt;p&gt;At this point in the Get Started with Docker series you should have a few useful services running in containers.&lt;/p&gt;

&lt;p&gt;The flexibility of using Docker Compose files or Docker Run commands lets you easily deploy these using either Portainer or the Docker Command Line Interface (Docker CLI). You can set and forget them for the most part and just reap the benefits of your self hosted services.&lt;/p&gt;

&lt;p&gt;But there's one thing that we can't avoid and that's those pesky application updates.&lt;/p&gt;

&lt;p&gt;You can do these manually by using the Docker Command line to download the new docker image, stop, remove and then redeploy your containers. This can become quite a boring and manual task depending on the number of containers you're running. It can also be a minefield depending on how you deployed them in the first place with custom environment options or volume bind options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbmcyYXc0eXNmcTM2cWZhYzViem92YXo4ZzFqZWc4eXBnZnBlZWhzZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26BkNefkzMeK3qx9K/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbmcyYXc0eXNmcTM2cWZhYzViem92YXo4ZzFqZWc4eXBnZnBlZWhzZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26BkNefkzMeK3qx9K/giphy.gif" width="350" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of doing all of that, we can use a handy Docker container.&lt;/p&gt;

&lt;p&gt;This will check for updates, update, stop and remove all of the Docker images and containers for us. The Docker container we'll be using is &lt;strong&gt;Watchtower&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;We'll be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Looking at What Watchtower is&lt;/li&gt;
&lt;li&gt;  Going to the project page for Portainer for our build and install instructions&lt;/li&gt;
&lt;li&gt;  SSH into the host machine where Docker is installed&lt;/li&gt;
&lt;li&gt;  Spin up and deploy our Watchtower Docker Container&lt;/li&gt;
&lt;li&gt;  Updating only one or more specific containers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Watchtower?
&lt;/h2&gt;

&lt;p&gt;Watchtower is a way to automate the process of updating the Docker base images of running Docker containers.&lt;/p&gt;

&lt;p&gt;By default, Watchtower will run in the background, checking the current Docker base images of all containers against the latest version on the Docker Image registry every 5 minutes.&lt;/p&gt;

&lt;p&gt;It will then download all the latest images locally and gracefully shut down all the corresponding containers that need the update.&lt;/p&gt;

&lt;p&gt;Finally, Watchtower will start back up all of the containers it shut down using the new Docker base image. Most importantly they will be started with all the settings they were running before they shut down, automatically.&lt;/p&gt;

&lt;p&gt;Using command line arguments, this microservice can be set to exclude certain containers that are mission critical and can be ran once without running in the background.&lt;/p&gt;




&lt;h2&gt;
  
  
  Watchtower Project Page
&lt;/h2&gt;

&lt;p&gt;The Watchtower GitHub page has the most up to date information on this project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/containrrr/watchtower" rel="noopener noreferrer"&gt;https://github.com/containrrr/watchtower&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watchtower has been released under Apache 2.0 License which allows the code to be reused as part of pretty much any project even if it's closed source and proprietary.&lt;/p&gt;

&lt;p&gt;There is also a bigger breakdown of the features, development and some further information linked below on the developer's online Knowledgebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://containrrr.dev/watchtower/introduction/" rel="noopener noreferrer"&gt;Watchtower Containrr Knowledgebase&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Let's get started with Watchtower
&lt;/h2&gt;

&lt;p&gt;In this guide, we're going to run Watchtower using the just once option instead of letting it check every 5 minutes. This way you can pick a maintenance window and time each week to run it.&lt;/p&gt;

&lt;p&gt;We're going to be using the Raspberry Pi from earlier which currently had Whoogle, Pi-hole and Nginx Proxy Manager.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please Note: Once run you'll have a brief period of downtime of a few seconds to minutes for the containers that are shut being upgraded. Make sure you know this before running this against containers that are mission critical.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;  SSH into your Docker install&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwz4n3ou32w1fj0bywsz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwz4n3ou32w1fj0bywsz2.png" alt="Watchtower 01" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run the Docker Run command to run Watchtower once
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  Wait for Watchtower to start running and the logs to start outputting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fy87vkvjr3e8y8tstnj6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fy87vkvjr3e8y8tstnj6i.png" alt="Watchtower 02" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fuq0rj3mtdmwnrrbuk7az.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fuq0rj3mtdmwnrrbuk7az.png" alt="Watchtower 03" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Go and make a coffee as Watchtower does it's magic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F37k3fb7iff0emziv8eff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F37k3fb7iff0emziv8eff.png" alt="Watchtower 04" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fltkwfhx9zike5psg30n8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fltkwfhx9zike5psg30n8.png" alt="Watchtower 05" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1pl6bdkwgj54zvmhhbds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1pl6bdkwgj54zvmhhbds.png" alt="Watchtower 06" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwua9gzv30pk48he2dzjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwua9gzv30pk48he2dzjw.png" alt="Watchtower 07" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Enjoy your newly updated containers with updated base images&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Command Line Arguments
&lt;/h2&gt;

&lt;p&gt;When you update all of the running containers on a Docker host this could actually be quite disruptive depending on the services you are running.&lt;/p&gt;

&lt;p&gt;You may also want to run this on remote hosts if you want to automate things further.&lt;/p&gt;

&lt;p&gt;Here are a few useful examples of how to use Command Line Arguments with Watchtower and the Docker Run command&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating a single container
&lt;/h3&gt;

&lt;p&gt;By adding the name of the containers you want to target as a command line argument only the named container will be updated by Watchtower&lt;/p&gt;

&lt;p&gt;The example below would only update &lt;strong&gt;whoogle&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once whoogle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating multiple named containers
&lt;/h3&gt;

&lt;p&gt;By adding the name of the more than one container as a command line argument with spaces in between them will make sure that only these are updated by Watchtower ignoring all the others.&lt;/p&gt;

&lt;p&gt;This example would only update nginx-proxy-manager and whoogle&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once nginx-proxy-manager whoogle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating Remote Hosts
&lt;/h3&gt;

&lt;p&gt;If you want to update the containers and images on a remote host then you can do this by using one of the 2 commands below.&lt;/p&gt;

&lt;p&gt;Using this method may not always work and you may need to do some network troubleshooting if you run into trouble which is outside the scope of this guide.&lt;/p&gt;

&lt;p&gt;To get this working, you will need to have Docker installed on the machine you're using to be able to send the Docker commands to the remote host.&lt;/p&gt;

&lt;p&gt;In this example, we'll use the ip address 192.168.0.23 as our remote host. We'll run the command on the other machine to run this.&lt;/p&gt;

&lt;p&gt;The below 2 will check containers on the remote host every 5 minutes as default using the default exposed port of 2375 for the Docker Daemon.&lt;/p&gt;

&lt;p&gt;I've also changed the name of the container to make sure that this isn't the same as the normal Watchtower container if you're already running it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  --name watchtowerremote \
  containrrr/watchtower --host "tcp://192.168.0.23:2375"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
  --name watchtowerremote \
  -e DOCKER_HOST="tcp://192.168.0.23:2375" \
  containrrr/watchtower
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 2 commands below would do this as a Run Once similar to the way that they are done in the rest of the guide.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm \
  --name watchtowerremote \
  containrrr/watchtower --host "tcp://192.168.0.23:2375"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm \
  --name watchtowerremote \
  -e DOCKER_HOST="tcp://192.168.0.23:2375" \
  containrrr/watchtower
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulations, you've now taken another step into the world of Docker by automating one of the most common parts of a Docker set up.&lt;/p&gt;

&lt;p&gt;If you're a bit more confident you can run this in the background on a set time interval to update your containers but my advice would be to set aside some time each week to do this manually to start with. Watchtower will make process a lot easier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNThvZ3hydjVwNDhpOWU3NG16NWpvYWFmcjZrZmxwencwdnl5M3pzZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l0G17pPez0HTCjHzO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNThvZ3hydjVwNDhpOWU3NG16NWpvYWFmcjZrZmxwencwdnl5M3pzZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l0G17pPez0HTCjHzO/giphy.gif" width="480" height="362"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 4: Portainer : How To Deploy Containers The Easy Way</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Sun, 10 Mar 2024 12:36:53 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-4-portainer-how-to-deploy-containers-the-easy-way-3jd1</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-4-portainer-how-to-deploy-containers-the-easy-way-3jd1</guid>
      <description>&lt;p&gt;If you've been following along so far then you've already managed to get Docker installed on your system and your first Docker container service deployed.&lt;/p&gt;

&lt;p&gt;A lot of Docker management can be done through the command line and a lot of people like working with docker compose files and docker run commands in the terminal but this can start to get overly complicated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcjBlYnZqcWF4OTlnbXhsNW05MGR0aWJ1cTQ1YTdoMXJlMndwOTBsYiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Gh5lck3oM8H1zivsRI/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcjBlYnZqcWF4OTlnbXhsNW05MGR0aWJ1cTQ1YTdoMXJlMndwOTBsYiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Gh5lck3oM8H1zivsRI/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started out by using &lt;strong&gt;Portainer&lt;/strong&gt; which was a great way to get started with lists of community maintained, curated apps to install with a simple point and click web browser based dashboard. Making it easy to try out loads of different containers quickly from one of theses lists or your own without having to use the terminal.&lt;/p&gt;




&lt;p&gt;In this guide, we'll spin up one of the most best ways to manage, deploy and mantain your docker containers from an easy to use Web UI.&lt;/p&gt;

&lt;p&gt;We'll be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Looking at What Portainer is&lt;/li&gt;
&lt;li&gt;  Going to the project page for Portainer for our build and install instructions&lt;/li&gt;
&lt;li&gt;  SSH into the host machine where Docker is installed&lt;/li&gt;
&lt;li&gt;  Creating a Docker Volume for Portainer Data&lt;/li&gt;
&lt;li&gt;  Spin up and deploy our Portainer Docker Container&lt;/li&gt;
&lt;li&gt;  Configure New Portainer Environment&lt;/li&gt;
&lt;li&gt;  What Are Stacks&lt;/li&gt;
&lt;li&gt;  Set up the Portainer App Store (App Templates)&lt;/li&gt;
&lt;li&gt;  Customise and deploy a stack from the Portainer App Store&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Portainer?
&lt;/h2&gt;

&lt;p&gt;Portainer is a lightweight management toolset that allows you to easily build, manage, and maintain Docker and Kubernetes environments.&lt;/p&gt;

&lt;p&gt;Once deployed and connected to your docker network, you will have a running web service that you can access to help see your running Docker containers.&lt;/p&gt;

&lt;p&gt;You can click into your running containers to check out the logs, stop, start or change variables to redeploy.&lt;/p&gt;

&lt;p&gt;The main attraction though is the list of ready to use Docker Containers that are included by default but can be added to by custom XML files in the Settings.&lt;/p&gt;

&lt;p&gt;There are some drawbacks with managing containers you have deployed using Docker Compose but you can always redeploy in Portainer if you want to manage everything from here.&lt;/p&gt;




&lt;h2&gt;
  
  
  Portainer Project Page
&lt;/h2&gt;

&lt;p&gt;Portainer is available to license for Business Use but we'll be using the Community Edition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/portainer/portainer/" rel="noopener noreferrer"&gt;Portainer Github&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  SSH into Docker Install
&lt;/h2&gt;

&lt;p&gt;In this guide we're using a Raspberry Pi running Ubuntu Server Minimal. If you need help with setting that up with docker on your Raspberry Pi then check out the guide below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/reprodev/get-started-with-docker-part-2a-raspberry-pi-linux-install-guide-4hl9"&gt;Get Started with Docker - Part 2a - Raspberry Pi Linux Install Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can run the same commands on WSL using Docker Desktop on a Windows machine if you prefer with the guide below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/reprodev/get-started-with-docker-part-2b-windows-11-install-guide-wsl-and-docker-desktop-edition-2o2f"&gt;Get Started with Docker - Part 2b - Windows Docker Desktop Install Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZG1vZDUwOTFxZWZueWN4bWNxcmlkZzR5cWs3ODVnNGpnMmNuZjBzNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/zaezT79s3Ng7C/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZG1vZDUwOTFxZWZueWN4bWNxcmlkZzR5cWs3ODVnNGpnMmNuZjBzNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/zaezT79s3Ng7C/giphy.gif" width="500" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's go ahead and Create a Docker Volume for Portainer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Create a Docker Volume for Portainer
&lt;/h2&gt;

&lt;p&gt;A Docker Volume let's containers store things like settings, databases and config files persistently on the host machine independent of the containers lifecycle.&lt;/p&gt;

&lt;p&gt;This let's Portainer keep those settings even if the container is destroyed and recreated e.g. if a new Portainer image has been released or the host machine is rebooted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRod3R4ejQ1emJ5NTJpMThxY3dobHV2MjU3MmY3c3lpa2l3MnAwdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/1zKRlTFQ278PtPtrV2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRod3R4ejQ1emJ5NTJpMThxY3dobHV2MjU3MmY3c3lpa2l3MnAwdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/1zKRlTFQ278PtPtrV2/giphy.gif" width="498" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create a Docker Volume for Portainer we can use the &lt;strong&gt;Docker Volume&lt;/strong&gt; command&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fg9ica96vm9z6qltkwerq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fg9ica96vm9z6qltkwerq.png" alt="PortainerInstall01" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker volume create portainer_data&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fo4h6zngspm67eefhhgha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fo4h6zngspm67eefhhgha.png" alt="PortainerInstall02" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdhakjsjgpgamf9nktqon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdhakjsjgpgamf9nktqon.png" alt="PortainerInstall03" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we can deploy Portainer using the below Docker run command, referencing the "portainer_data" Docker Volume we've just created&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -d -p 8000:8000 -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2lxrim9v04tvwmt31s3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2lxrim9v04tvwmt31s3k.png" alt="PortainerInstall04" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmpe4rsul5cs2rbwlig82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmpe4rsul5cs2rbwlig82.png" alt="PortainerInstall05" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2mxtwz2szj5oud98ahl3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2mxtwz2szj5oud98ahl3.png" alt="PortainerInstall06" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqaro2q2fldxrzh8wj1k7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqaro2q2fldxrzh8wj1k7.png" alt="PortainerInstall07" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open a browser and connect to the IP address of your Docker installation and port 9000&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1a9cb8nbcuu81xv3szq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1a9cb8nbcuu81xv3szq7.png" alt="PortainerInstall08" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The admin username will already be filled in for you so go ahead and set up a password this account and make sure you make a note of this too somewhere safe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxxsrw1wos3h0uulw7ay2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxxsrw1wos3h0uulw7ay2.png" alt="PortainerInstall09a" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can untick the Allow collection of anonymous statistics if you don't want to send anything to Portainer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb4xw7hizqkhsa1bnw037.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb4xw7hizqkhsa1bnw037.png" alt="PortainerInstall09b" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create user&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This will bring you to the Portainer &lt;strong&gt;Quick Setup Wizard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fie64kfw2he7ux9uhefve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fie64kfw2he7ux9uhefve.png" alt="PortainerInstall10" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Get Started&lt;/strong&gt; to proceed using the local environment Portainer is running in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvz3mixgv0zmo7tbswslw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvz3mixgv0zmo7tbswslw.png" alt="PortainerInstall11" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;local&lt;/strong&gt; to explore our local Docker environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8k3hq369w4r0383hqxt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8k3hq369w4r0383hqxt8.png" alt="PortainerInstall14" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will bring us to the &lt;strong&gt;Portainer Dashboard&lt;/strong&gt; for our currently running containers, images, volumes, networks and stacks running in Docker.&lt;/p&gt;

&lt;p&gt;The current running container, image and volume is &lt;strong&gt;Portainer&lt;/strong&gt; itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdod6ejm4setvuxobbbgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdod6ejm4setvuxobbbgl.png" alt="PortainerInstall15" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're now ready to start using &lt;strong&gt;Portainer&lt;/strong&gt; and stacks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are Stacks
&lt;/h2&gt;

&lt;p&gt;Portainer deploys Docker Networks, Containers and Services using a similar set up to Docker Compose YML files using Stacks.&lt;/p&gt;

&lt;p&gt;These digital recipe files contain everything needed to start a service like OrganizrV2, a Dashboard for all your self-hosted services or Plex, a self hosted Netflix style Media Server for all your home media.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeWFxenBtNGpxeXVoejYwOGFzaDluYXdlanN5M28xeHc1NW1mZ21zMiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/10u6gt11vnm812/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeWFxenBtNGpxeXVoejYwOGFzaDluYXdlanN5M28xeHc1NW1mZ21zMiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/10u6gt11vnm812/giphy.gif" width="500" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can then configure the stack to use the settings that you want and even deploy different versions using the same stack by changing a few variables e.g. the config folder and IP address.&lt;/p&gt;

&lt;p&gt;We'll focus more on the manual stack setup in another blog article soon, as in this guide we're going to use a more automated way of doing this.&lt;/p&gt;

&lt;p&gt;To try this out we're going to install a privacy-focused version of Google called Whoogle on your server using a custom Portainer App Template List.&lt;/p&gt;




&lt;h2&gt;
  
  
  Add a custom Portainer App Template List
&lt;/h2&gt;

&lt;p&gt;The most powerful feature in Portainer is the large list of curated images that can be added to make trying out new services or applications and then removing them a breeze.&lt;/p&gt;

&lt;p&gt;The default list already contains some services to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcvauxsd4nwhznymjsl9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcvauxsd4nwhznymjsl9p.png" alt="Portainer App Template 01" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're going to add a new custom list that includes a lot more than the inbuilt list from the Github Portainer Templates by Qballjos&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Qballjos/portainer_templates" rel="noopener noreferrer"&gt;Github Portainer Templates by Qballjos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the &lt;strong&gt;Dashboard&lt;/strong&gt; menu on the left we're going to scroll down to the &lt;strong&gt;Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fksqsqhfdlb6oxtkkofuo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fksqsqhfdlb6oxtkkofuo.png" alt="Portainer App Template 02" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a &lt;strong&gt;JSON&lt;/strong&gt; file already filled in here with the current default list of stacks from Portainer&lt;/p&gt;

&lt;p&gt;Paste the below line in there&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Template/template.json]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbctdaqmy33fah1k6ahcf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbctdaqmy33fah1k6ahcf.png" alt="Portainer App Template 03" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press Save to Apply the settings to your &lt;strong&gt;App Templates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkqof5b45osc243icrhpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkqof5b45osc243icrhpg.png" alt="Portainer App Template 04" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We've now got a combined and curated list of the most popular and useful self hosted services and applications to choose from, right inside Portainer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcx7sfxdps89lbe4ydh78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcx7sfxdps89lbe4ydh78.png" alt="Whoogle Portainer Install 01" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of it as a free Portainer App Store to search for and start up services in a few clicks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZW95aDBxYWNkaGlxZDc5cDBsbzdvcHAxcjIzM3IzdzBxZnI2cXJ3aSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ugOMVsKh9pMWxji7w4/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZW95aDBxYWNkaGlxZDc5cDBsbzdvcHAxcjIzM3IzdzBxZnI2cXJ3aSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ugOMVsKh9pMWxji7w4/giphy.gif" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Customise and deploy a stack from App Templates
&lt;/h2&gt;

&lt;p&gt;One of the reason's many people choose to self-host is to be able to stop giving their digital data and online habits to online services like Google and Meta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOG5ydG1zaHc0YnF2ZXFkN2JoYTkzNTYyd3QwOHc3aHptNjdvempoaSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Zkf1NYy2aQXs7fQaKP/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOG5ydG1zaHc0YnF2ZXFkN2JoYTkzNTYyd3QwOHc3aHptNjdvempoaSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Zkf1NYy2aQXs7fQaKP/giphy.gif" width="480" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're going to self host our own search engine using Google but without having to give up our digital privacy using &lt;a href="https://whoogle.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Whoogle&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcx7sfxdps89lbe4ydh78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcx7sfxdps89lbe4ydh78.png" alt="Whoogle Portainer Install 01" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fbenbusby%2Fwhoogle-search" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fbenbusby%2Fwhoogle-search" alt="https://github.com/benbusby/whoogle-search" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;App Templates&lt;/strong&gt; if you're not already there and scroll down or search for &lt;strong&gt;Whoogle&lt;/strong&gt; in the list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fj062bvrmpz2ul53d4i84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj062bvrmpz2ul53d4i84.png" alt="Whoogle Portainer 01" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Whoogle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdfw8pbzm2re6xa462f7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdfw8pbzm2re6xa462f7q.png" alt="Whoogle Portainer 02" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will bring you to the &lt;strong&gt;App Template&lt;/strong&gt; setup with the default name &lt;strong&gt;whoogle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F261cj7p0pqd6v0h9xbb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F261cj7p0pqd6v0h9xbb3.png" alt="Whoogle Portainer 03" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will also have the network set to &lt;strong&gt;bridge&lt;/strong&gt; as default which we'll leave for now&lt;/p&gt;

&lt;p&gt;Scroll down and click the &lt;strong&gt;Plus&lt;/strong&gt; sign to the left of &lt;strong&gt;Advanced Options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fk52vhlbfiulj8c5qu00j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fk52vhlbfiulj8c5qu00j.png" alt="Whoogle Portainer 04" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For our &lt;strong&gt;Port mapping&lt;/strong&gt;, we'll leave the default &lt;strong&gt;host&lt;/strong&gt; port we connect to as &lt;strong&gt;5001&lt;/strong&gt; and &lt;strong&gt;container&lt;/strong&gt; port of &lt;strong&gt;5000&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this tutorial, we're going to use the &lt;strong&gt;auto&lt;/strong&gt; function for &lt;strong&gt;Volume mapping&lt;/strong&gt; instead of the &lt;strong&gt;bind&lt;/strong&gt; function to create a local volume on the host automatically&lt;/p&gt;

&lt;p&gt;Scroll down to &lt;strong&gt;Actions&lt;/strong&gt; and click &lt;strong&gt;Deploy the container&lt;/strong&gt; to go ahead and start up our service&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdmmkl7qa2nfz28kkknct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdmmkl7qa2nfz28kkknct.png" alt="Whoogle Portainer 06" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll be brought back to the &lt;strong&gt;Containers&lt;/strong&gt; Page with your new service getting ready to start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Felnm7rwgsud7sxqyon8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Felnm7rwgsud7sxqyon8w.png" alt="Whoogle Portainer 07" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refresh the Page and you should see the State should turn green and show as &lt;strong&gt;running&lt;/strong&gt; or in our case &lt;strong&gt;healthy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fa6cf6gd74zwy8bl7c8ws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fa6cf6gd74zwy8bl7c8ws.png" alt="Whoogle Portainer 11" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open a new tab in your browser and go to your Server IP address and port 5001&lt;/p&gt;

&lt;p&gt;For our example it's the below&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://192.168.0.23:5001&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will bring you to the &lt;strong&gt;Whoogle&lt;/strong&gt; home page which is hosted on your server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz7hbaa58qgiehxyriud2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz7hbaa58qgiehxyriud2.png" alt="Whoogle Portainer 12" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the configuration options for some really interesting ways to search.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7k9nwtp7udcluaa9khsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7k9nwtp7udcluaa9khsz.png" alt="Whoogle Portainer 13" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or just do your first search without giving Google your browsing data along the way&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flkws0mvnb561mp5gyecd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flkws0mvnb561mp5gyecd.png" alt="Whoogle Portainer 14" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9g1uxz0boeg3ch1w08et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9g1uxz0boeg3ch1w08et.png" alt="Whoogle Portainer 15" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you've deployed your first self hosted service in a container using &lt;strong&gt;Portainer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can deploy almost everyone of those services on the list using this same method so get exploring and try out some of those complicated services you always wanted to without all the hassle.&lt;/p&gt;

&lt;p&gt;Next up we're going to start getting fancy by forwarding custom hostnames using Nginx Proxy Manager and Pi-Hole's Local DNS feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOXFuZzl4NWd0MzlqbWE4azRudnV2ZTRveTBqdnpxOG9yajhnODh0biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26Ff29tMYBOScmQEM/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOXFuZzl4NWd0MzlqbWE4azRudnV2ZTRveTBqdnpxOG9yajhnODh0biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26Ff29tMYBOScmQEM/giphy.gif" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;For more Docker Compose files check out &lt;strong&gt;ReproDev Recipes&lt;/strong&gt; on GitHub with Docker Compose files for you to try out&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/reprodev/reprodev-recipes/tree/main" rel="noopener noreferrer"&gt;GitHub - reprodev/reprodev-recipes: ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Check out the guide below if you want more information on What Docker is and how to get started&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/reprodev/get-started-with-docker-part-1-an-intro-to-docker-3b81"&gt;Get Started with Docker - Part 1 : An Intro to Docker&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 3: Pi-Hole</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Sun, 03 Mar 2024 10:30:00 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-3-pi-hole-j40</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-3-pi-hole-j40</guid>
      <description>&lt;p&gt;You've set up Docker on your operating system and device of choice. You're ready to start spinning up containers and seeing what Docker is all about.&lt;/p&gt;

&lt;p&gt;In this guide, we'll spin up one of the most useful services in a container and a great introduction to the Docker ecosystem.&lt;/p&gt;

&lt;p&gt;We'll be&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Looking at what Pi-Hole is&lt;/li&gt;
&lt;li&gt;  Going to the project page for Pi-Hole for our build and install instructions&lt;/li&gt;
&lt;li&gt;  Using Notepad++ on a Windows Laptop to create a custom Docker Compose with Environmental Variables&lt;/li&gt;
&lt;li&gt;  Setting up a folder on our machine for Docker to locally store our config files and other persistent data&lt;/li&gt;
&lt;li&gt;  Using the Nano Text Editor on our Docker machine to create our docker-compose.yml file&lt;/li&gt;
&lt;li&gt;  Spin up and deploy our Pi-Hole Docker Container&lt;/li&gt;
&lt;li&gt;  Login to our Pi-Hole with a custom password&lt;/li&gt;
&lt;li&gt;  Connect our Windows Machine and Android Phone so they use the Pi-Hole for their DNS to provide the ad-blocking function&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's a PiHole?
&lt;/h2&gt;

&lt;p&gt;In short, the PiHole intercepts requests to the internet and blocks domains based on the sites listed in it's block list.&lt;/p&gt;

&lt;p&gt;By default, there are about 100,000 entries which is enough for most people to get decent protection from malicious websites and ads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExaHJzMTZtaHQwczR5ZGk0bXJ5dGJ3Yjh2bW13Ymowb3IxZG5odXBjZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/njYrp176NQsHS/giphy-downsized-large.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExaHJzMTZtaHQwczR5ZGk0bXJ5dGJ3Yjh2bW13Ymowb3IxZG5odXBjZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/njYrp176NQsHS/giphy-downsized-large.gif" width="480" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will speed up your network and make it safer overall by stopping unwanted traffic at the source with some extra added benefits.&lt;/p&gt;

&lt;p&gt;We'll look at how to increase this with number with third party block lists later on in this guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  PiHole Project Page
&lt;/h2&gt;

&lt;p&gt;You can find a Docker version of most software and applications usually on their main website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Floxjifvj436o4a0sxugu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Floxjifvj436o4a0sxugu.png" alt="Pihole Website 01" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pi-hole.net" rel="noopener noreferrer"&gt;https://pi-hole.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will usually link you to a project page on Docker Hub, GitHub or their own website to get further information and build instructions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Folh4ism7wu37cizxyhrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Folh4ism7wu37cizxyhrq.png" alt="Pihole Website 02" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Customise a Docker Compose file
&lt;/h2&gt;

&lt;p&gt;One of the best things about Docker is that a lot of the images are set up with customisation in mind.&lt;/p&gt;

&lt;p&gt;Using Environmental Variables you can start the Docker container with certain settings such as a different port number or paths to Docker config folders.&lt;/p&gt;

&lt;p&gt;As we found on the website here is the default docker-compose.yml for PiHole&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "80:80/tcp"
    environment:
      TZ: 'America/Chicago'
      # WEBPASSWORD: 'set a secure password here or it will be random'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We're going to make a few changes to this so that it works for our setup.&lt;/p&gt;


&lt;h2&gt;
  
  
  Notepad++ Text Editor
&lt;/h2&gt;

&lt;p&gt;We can use a text editor to make changes to the Docker Compose file as a quick and easy way to experiment.&lt;/p&gt;

&lt;p&gt;Personally I use Notepad++ as my text editor in Windows to help me to edit the Docker Compose file ready to be pasted into the terminal later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdgdlgyd3rspdy9ayl7i7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdgdlgyd3rspdy9ayl7i7.png" alt="NotePad++ Docker Compose File" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download it from here but if you don't want to install anything than you can use the trusty Notepad app built into Windows.&lt;/p&gt;


&lt;h2&gt;
  
  
  Set the container name
&lt;/h2&gt;

&lt;p&gt;In this section we're going to set the container name to be pihole&lt;/p&gt;

&lt;p&gt;We're also going to set the image we're going to download as the pi-hole image from the pihole repository.&lt;/p&gt;

&lt;p&gt;We'll use the latest tag to get the latest version of this image when we deploy the container.&lt;/p&gt;

&lt;p&gt;As an extra bonus we're also going to define the hostname as &lt;strong&gt;reprodevpihole&lt;/strong&gt; which will be used by this pi-hole instance. This will make management easier if you're running a few pi-holes.&lt;/p&gt;

&lt;p&gt;You can change this to one which makes sense for you.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: reprodevpihole
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Set the Ports and DNS
&lt;/h2&gt;

&lt;p&gt;In this section we're going to set the networking for this Docker container.&lt;/p&gt;

&lt;p&gt;I've found that you may have issues with your device resolving DNS or other Docker containers if you install Pihole on something like a Raspberry Pi.&lt;/p&gt;

&lt;p&gt;We can add the environmental variables for DNS and define these as 127.0.0.1, to use the local device to resolve and 8.8.8.8 to use Google servers to resolve as a backup.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    dns:
      - 127.0.0.1
      - 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To help devices connect to use this as a DNS then it's also best that we define the IP of the device we are installing this on for Port 53.&lt;/p&gt;

&lt;p&gt;In this example it's 192.168.0.90 so that has been added to the lines for port 53.&lt;/p&gt;

&lt;p&gt;Go ahead and replace this with your own IP address as needed.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ports:
      - "192.168.0.90:53:53/tcp"
      - "192.168.0.90:53:53/udp"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finally the port to connect to the Pihole Admin has been defined as 1010 on the host to map onto port 80 in the docker container.&lt;/p&gt;

&lt;p&gt;You can change this to one of your choosing by changing the number on the left to an unused port.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      - "67:67/udp"
      - "1010:80/tcp"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The ports section should now look like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ports:
      - "192.168.0.90:53:53/tcp"
      - "192.168.0.90:53:53/udp"
      - "67:67/udp"
      - "1010:80/tcp"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The whole networking section should now look like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    dns:
      - 127.0.0.1
      - 8.8.8.8
    ports:
      - "192.168.0.90:53:53/tcp"
      - "192.168.0.90:53:53/udp"
      - "67:67/udp"
      - "1010:80/tcp"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Docker Networking can get quite complicated and we'll look at this in more detail at a later date.&lt;/p&gt;

&lt;p&gt;For now this should work for you to get started&lt;/p&gt;


&lt;h2&gt;
  
  
  Set the Environment Variables
&lt;/h2&gt;

&lt;p&gt;Setting the Environment Variables for a Docker container can help to speed up and create containers customised to your use case.&lt;/p&gt;
&lt;h3&gt;
  
  
  Set the Time Zone
&lt;/h3&gt;

&lt;p&gt;You can define the time zone using the &lt;strong&gt;TZ&lt;/strong&gt; variable in most docker compose files to make sure they work correctly.&lt;/p&gt;

&lt;p&gt;You can find a list of them here but for this example we've changed it to '&lt;strong&gt;Europe/London'&lt;/strong&gt; to match my settings&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;environment:
  TZ: 'Europe/London'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Replace your own time zone here to make sure it matches the city closest to your time zone.&lt;/p&gt;
&lt;h3&gt;
  
  
  Set the Web Admin Password
&lt;/h3&gt;

&lt;p&gt;You can also define the password that will be used to access the PiHole Admin later on.&lt;/p&gt;

&lt;p&gt;Make sure that you change the WEBPASSWORD environment variable in the docker compose file to a random secure password.&lt;/p&gt;

&lt;p&gt;e.g. from this one&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      WEBPASSWORD: 'a5up3r53cr3tpa33'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;to this one&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      WEBPASSWORD: 'yourownpassword'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will be the password you use to access the PiHole Admin later on so make a note of it or comment it out.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    # WEBPASSWORD: 'a5up3r53cr3tpa33'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you comment it out then one will be set randomly on first boot and you'll be able to find it in the terminal output from the logs.&lt;/p&gt;


&lt;h2&gt;
  
  
  Set the Docker Data Volume Paths
&lt;/h2&gt;

&lt;p&gt;The default for most Docker Compose files is to save the config files needed by the container in the running container for testing.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  volumes:
  - './etc-pihole:/etc/pihole'
  - './etc-dnsmasq.d:/etc/dnsmasq.d'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We need to replace the paths on the left with the location of the Pihole folder we created earlier to store this Docker Compose YAML file.&lt;/p&gt;

&lt;p&gt;The new volumes file for this example will now look like this.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  volumes:
  - '/home/reprodev/Files/AppData/Config/pihole/etc-pihole:/etc/pihole'
  - '/home/reprodev/Files/AppData/Config/pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's all of our changes to this file as the rest can stay the same.&lt;/p&gt;


&lt;h2&gt;
  
  
  Pihole Docker Compose File
&lt;/h2&gt;

&lt;p&gt;We've finally got our own customised YAML file for Pihole that we can use on any machine that has Docker installed.&lt;/p&gt;

&lt;p&gt;The one below is based on the one in our guide so yours may look a little different to this one in a few places.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3"

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: piholevm
    dns:
      - 127.0.0.1
      - 8.8.8.8
    ports:
      - "192.168.0.90:53:53/tcp"
      - "192.168.0.90:53:53/udp"
      - "67:67/udp"
      - "1010:80/tcp"
    environment:
      TZ: 'Europe/London'
      WEBPASSWORD: 'a5up3r53cr3tpa33'
    volumes:
      - '/home/reprodev/Files/AppData/Config/pihole/etc-pihole:/etc/pihole'
      - '/home/reprodev/Files/AppData/Config/pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
    cap_add:
      - NET_ADMIN
    restart:
      unless-stopped
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Other than changing a few variables as needed, we have our own custom Docker Compose file for Pihole.&lt;/p&gt;

&lt;p&gt;We can now use this any time we want to spin up a docker container for Pihole with the settings we have added.&lt;/p&gt;

&lt;p&gt;Now that we have our customised Docker Compose file we need to get this saved into our Pihole Config folder.&lt;/p&gt;


&lt;h2&gt;
  
  
  Login to a Linux Shell
&lt;/h2&gt;

&lt;p&gt;To install Pihole and deploy the Docker container we'll need to login to a Linux Shell.&lt;/p&gt;

&lt;p&gt;Follow the instructions below to open the Linux Shell&lt;/p&gt;
&lt;h3&gt;
  
  
  If you're using Windows (WSL with Docker Desktop)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Open a Terminal and &lt;strong&gt;"Run as administrator"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fv6ik7jl3e6l5vfab5l0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fv6ik7jl3e6l5vfab5l0u.png" alt="Login to Linux Shell 01" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the &lt;strong&gt;wsl&lt;/strong&gt; command to open a WSL shell
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2F9xuajdf4gi33jzkmw6mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9xuajdf4gi33jzkmw6mw.png" alt="Login to Linux Shell 02" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open up a command prompt to the Linux distro you are installed alongside the Windows Subsystem for Linux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdwejddy4iwmyh30xov9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdwejddy4iwmyh30xov9j.png" alt="Login to Linux Shell 03" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  If you're using Linux (Raspberry Pi OS and more)
&lt;/h3&gt;

&lt;p&gt;Then just&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open a terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fs8e3wrvgxka8e57koa56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fs8e3wrvgxka8e57koa56.png" alt="Login to Linux Shell 04" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 This is where the Linux and Raspberry Pi users can rejoin as these commands will now be the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Type &lt;strong&gt;cd&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to change directory back to your Linux user home directory&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2F1kca62twnx0rqhwyjtrd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1kca62twnx0rqhwyjtrd.png" alt="Login to Linux Shell 05" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the &lt;strong&gt;pwd&lt;/strong&gt; command to check which folder you are currently in&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fkejbfvub471skjo04kgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkejbfvub471skjo04kgo.png" alt="Login to Linux Shell 06" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw2h41z3aqdawfu73nl2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw2h41z3aqdawfu73nl2y.png" alt="Login to Linux Shell 07" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should be in /home/(yourusername)&lt;/p&gt;


&lt;h2&gt;
  
  
  Set up your Docker Config folders
&lt;/h2&gt;

&lt;p&gt;As this may be your first Docker container you'll need to settle on a folder structure for Docker to store the config files and folders outside of Docker.&lt;/p&gt;

&lt;p&gt;In this guide and for most of our guides we'll be using the following folder to store all of our config files.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/$yourusername/docker/Files/AppData/Config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It’s best that we start with a folder structure to make it easier to organise and back up the data volumes. This is the folder structure I’m currently using between my different machines running docker.&lt;/p&gt;

&lt;p&gt;Once you've started, you can then use this structure for all your Docker config folders. You just need to replace the name of the application or service.&lt;/p&gt;

&lt;p&gt;We'll use this folder later on but for now let's go and get our instructions for the PiHole Docker container&lt;/p&gt;


&lt;h3&gt;
  
  
  Make Docker Persistent Config Directories
&lt;/h3&gt;

&lt;p&gt;We can now start to make up the folders for Docker, to store it's config files to persist and save.&lt;/p&gt;

&lt;p&gt;These folders will be stored outside of the docker container and won't be deleted when the container is destroyed or recreated.&lt;/p&gt;

&lt;p&gt;Type &lt;strong&gt;cd&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to change directory back to your Linux user home directory&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Frmr1nycx45fgmuxa3cqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frmr1nycx45fgmuxa3cqn.png" alt="Docker Persistent 01" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the &lt;strong&gt;pwd&lt;/strong&gt; command to check which folder you are currently in&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fhzv99bro4xneae99kg71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhzv99bro4xneae99kg71.png" alt="Docker Persistent 02" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should be in /home/(yourusername)&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/reprodev/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Run the below commands one at a time, to create the folder structure&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir docker
cd docker
mkdir Files
cd Files
mkdir AppData
cd AppData
mkdir Config
cd Config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fxi24z3lmi5mhsnd702mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxi24z3lmi5mhsnd702mz.png" alt="Docker Persistent 03" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the below commands to create the Pihole config folder&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir pihole
cd pihole
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fon0dnrjwru9ycdib2m46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fon0dnrjwru9ycdib2m46.png" alt="Docker Persistent 04" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsj5i1x4d0xzyfg5mjzwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsj5i1x4d0xzyfg5mjzwl.png" alt="Docker Persistent 05" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbnsq4kon9itewhwo8pt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbnsq4kon9itewhwo8pt7.png" alt="Docker Persistent 06" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We should now be in the pihole directory we just created.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/reprodev/docker/Files/AppData/Config/pihole
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Run the &lt;strong&gt;pwd&lt;/strong&gt; command to check which folder you're currently in&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We can now create our Docker Compose YAML file.&lt;/p&gt;

&lt;p&gt;You can use the newly created Config folder to store all of your docker config files in future and easily find them all in one place.&lt;/p&gt;


&lt;h2&gt;
  
  
  Use Nano Text Editor to create the Docker Compose YAML File
&lt;/h2&gt;

&lt;p&gt;Before we can run our Docker container we need to get the Docker Compose YAML file text we customised, into a place where Docker can find it.&lt;/p&gt;

&lt;p&gt;We can use Nano to do this.&lt;/p&gt;
&lt;h3&gt;
  
  
  Open Nano Text Editor
&lt;/h3&gt;

&lt;p&gt;Linux has a few text editors to choose from and just like my preference for Notepad++ in Windows. I have the same preference for Nano editor over the other popular editors like Vim.&lt;/p&gt;

&lt;p&gt;This is just my personal preference as I find it the easiest to use but feel free to use your Linux Text Editor of choice.&lt;/p&gt;

&lt;p&gt;We're going to use the Nano Text Editor as it's built into Ubuntu, which is in turn the default Linux distribution installed as part of Windows Subsystem for Linux (WSL) install.&lt;/p&gt;

&lt;p&gt;This means it will also be part of the Raspberry Pi OS and Ubuntu if you're running Linux on bare metal or as a virtual machine.&lt;/p&gt;

&lt;p&gt;We should still be in the &lt;strong&gt;pihole&lt;/strong&gt; folder we created in the last step. We can open Nano and create a blank file to write in at the same time.&lt;/p&gt;

&lt;p&gt;Run the below command to make the Docker Compose YAML file&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2F7x13y3xbwzv6eugco6xh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7x13y3xbwzv6eugco6xh.png" alt="Nano Editor 01" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open Nano and create a blank file called docker-compose.yml&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fc3fe5qlppv8016whppqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fc3fe5qlppv8016whppqg.png" alt="Nano Editor 02" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now paste the Docker Compose file contents we customised earlier in Notepad++&lt;/p&gt;

&lt;p&gt;Open up Notepad++ and select all the text and copy it to the clipboard. You can either use the normal keyboard shortcuts or right click to copy like normal.&lt;/p&gt;

&lt;p&gt;Go back to the Nano and Right Click to paste all of the text into the blank file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Falpqxp1fenuf38r176ap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Falpqxp1fenuf38r176ap.png" alt="Nano Editor 03" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The formatting should be correct and you can scroll up and down to make any corrections if you need to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fs432yz1dpqy4jjhw18aq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fs432yz1dpqy4jjhw18aq.png" alt="Nano Editor 04" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're happy with the text then use the keyboard shortcut below to save the file&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl+S
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fyo0zpm2hvtxvrul1k1v5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyo0zpm2hvtxvrul1k1v5.png" alt="Nano Editor 05" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the below keyboard shortcut to exit Nano and return to the Linux command line&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ctrl+X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fjd6z26l8riqez1b6d6gu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjd6z26l8riqez1b6d6gu.png" alt="Nano Editor 06" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwl0kjyzsiyhgwk6ippdo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwl0kjyzsiyhgwk6ippdo.png" alt="Nano Editor 07" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9mzurqu73p6lw46jzal7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9mzurqu73p6lw46jzal7.png" alt="Nano Editor 08" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The docker-compose.yml is also linked below in the ReproDev Recipes Github :&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;
        reprodev
      &lt;/a&gt; / &lt;a href="https://github.com/reprodev/reprodev-recipes" rel="noopener noreferrer"&gt;
        reprodev-recipes
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Welcome to ReproDev Recipes!&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;This repository contains a collection of code snippets and examples that provide step-by-step instructions for solving common programming problems.&lt;/h2&gt;
&lt;/div&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;This is a companion piece to guides and articles on &lt;a href="https://reprodev.com" rel="nofollow noopener noreferrer"&gt;ReproDev.com&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;




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

&lt;/div&gt;

&lt;p&gt;This repository is licensed under the MIT License. See the LICENSE file for details.&lt;/p&gt;




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

&lt;/div&gt;

&lt;p&gt;To use ReproDev Recipes, simply browse the repository and select the recipe that best matches your needs. Each recipe is located in its own folder, and includes a detailed README file with instructions and code snippets.&lt;/p&gt;

&lt;p&gt;You are free to use, modify, and distribute the code in this repository, as long as you include a copy of the MIT License in your project.&lt;/p&gt;




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

&lt;/div&gt;

&lt;p&gt;If you would like to contribute to ReproDev Recipes, we welcome your pull requests! To get started, simply fork the repository, create a new branch for your changes, and submit a pull request with a clear…&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/reprodev/reprodev-recipes" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





&lt;h2&gt;
  
  
  Spin Up and Deploy Your Container
&lt;/h2&gt;

&lt;p&gt;Well we've done all the hard work so we're finally ready to spin up and deploy the container.&lt;/p&gt;

&lt;p&gt;Make sure you are in the same folder as your docker-compose.yml file and run the below command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Fx8uwhaho4zudxyd9rgps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx8uwhaho4zudxyd9rgps.png" alt="Deploy Pihole 01" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6a4rchabkf7enx1nv618.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6a4rchabkf7enx1nv618.png" alt="Deploy Pihole 02" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fud1rll1nceu91sv97rq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fud1rll1nceu91sv97rq1.png" alt="Deploy Pihole 03" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will start up the Docker container in detached mode so it's time to grab a coffee as this may take 5 to 10 minutes depending on your system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzvb55vnu17jxtp9b0v2g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzvb55vnu17jxtp9b0v2g.png" alt="Deploy Pihole 04" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're back to the command line then your Docker container has been deployed and should be running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb59am2i68915wku01bp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb59am2i68915wku01bp7.png" alt="Deploy Pihole 05" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can check this by running the below command&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.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%2Ft59s7ogx0wkkbb48yumy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ft59s7ogx0wkkbb48yumy.png" alt="Deploy Pihole 06" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will check all running docker containers and we should be able to see &lt;strong&gt;pihole&lt;/strong&gt; as one of the running containers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwlh0a36e8mp2eg85bzdd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwlh0a36e8mp2eg85bzdd.png" alt="Deploy Pihole 07" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're on Windows using Docker Desktop you'll see this running in the Containers section as well.&lt;/p&gt;

&lt;p&gt;You can stop, delete or even use command line to directly interact with a running Docker container from here.&lt;/p&gt;

&lt;p&gt;It's also a good place to get the same stats you'd get from the command line such as uptime and docker hostnames at a quick glance.&lt;/p&gt;

&lt;p&gt;We can now go to the IP of our Docker machine using the 1010/admin and we should see the PiHole login page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7z59ogs8in4e1bjgfvw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7z59ogs8in4e1bjgfvw7.png" alt="Deploy Pihole 08" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's no username but there is a password.&lt;/p&gt;

&lt;p&gt;The password will be the same one that you set in the Docker Compose file earlier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftuslscp9hebuoyw4bzca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftuslscp9hebuoyw4bzca.png" alt="Deploy Pihole 09" width="656" height="706"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhhxzfb78h2d2xwy49duh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhhxzfb78h2d2xwy49duh.png" alt="Deploy Pihole 10" width="627" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you can login and see this page then you've successfully installed Pihole.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw1zd1bz22fsm96pstilx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw1zd1bz22fsm96pstilx.png" alt="Deploy Pihole 11" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's go ahead and start adding some clients so we can start using it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Adding Clients to the Pihole
&lt;/h2&gt;

&lt;p&gt;We should now have Pihole deployed with the default adlist but we haven’t got any machines using this yet.&lt;/p&gt;

&lt;p&gt;You can use Pihole to replace the DNS for your whole network by changing the DNS settings in your router.&lt;/p&gt;

&lt;p&gt;That does depend on you being able to change those settings and usually it's easier to do this on each device you're using while you're getting to grips with it.&lt;/p&gt;

&lt;p&gt;Especially if you have other people on the network who may not appreciate you adding their favourite site to your blocklist or it's down for maintenance.&lt;/p&gt;
&lt;h3&gt;
  
  
  Joining a client using DNS replacement
&lt;/h3&gt;

&lt;p&gt;To join one of your devices to the running Pihole we have to change the DNS setting on the device in the Network settings.&lt;/p&gt;

&lt;p&gt;To get a device to use the Pi-Hole as it’s DNS for ad blocking then we need to set the DNS for a device on the network to use the IP Address of the device running Pihole e.g. 192.168.0.177&lt;/p&gt;

&lt;p&gt;On Windows 11, you can do this by going to Network and Internet settings&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftcjv66ffchaf8gijpc8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftcjv66ffchaf8gijpc8c.png" alt="Add Client Win11 01" width="373" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find the network connection in this case it's HomeWifi and click Wi-Fi in the list&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fk4omxwa27sdjvkty903i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fk4omxwa27sdjvkty903i.png" alt="Add Client Win11 02" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click properties on your Wifi&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fops0r2aqrl9ule469x1o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fops0r2aqrl9ule469x1o.png" alt="Add Client Win11 03" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Edit Next to your DNS or IP assignment if you want to set a Static IP which we'll be doing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fatvtor2u92c7txi6qlqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fatvtor2u92c7txi6qlqa.png" alt="Add Client Win11 04" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is currently set to the Google DNS servers of 8.8.8.8 and 8.8.4.4. We're going to change this.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Change the IP Settings&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Click the dropdown to Manual and make sure the Preferred DNS is set to the same IP address as your Pi-Hole e.g. 192.168.0.177. Make sure you click Save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3y25kfco6owiupo8q7rh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3y25kfco6owiupo8q7rh.png" alt="Add Client Win11 05" width="429" height="967"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Change just the DNS settings&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Click the dropdown to change from Auto to Manual and change the preferred DNS to your Pi-Hole IP address.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwf68k1wqvqrasxnzu521.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwf68k1wqvqrasxnzu521.png" alt="Add Client Win11 06" width="410" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3d0nnj64maaz7cvn5rto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3d0nnj64maaz7cvn5rto.png" alt="Add Client Win11 07" width="379" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to google.com and run a search for whatever you want on that machine. It may take a second longer than normal but go to a website from the search results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fh8hfgfk2tnyvpwit5vsf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fh8hfgfk2tnyvpwit5vsf.png" alt="Check Working 01" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, go back to the PiHole and you should see some Hits and Blocked traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6e7g4s27su3shs1y8208.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6e7g4s27su3shs1y8208.png" alt="Check Working 02" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If there's nothing showing then check your DNS on the device, disconnect the wifi or restart and try again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwynse3cwxj5ju9v1noc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwynse3cwxj5ju9v1noc5.png" alt="Check Working 03" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can add each of your devices now to this DNS in the same way like your mobile phones, Smart TV and other internet devices to stop tracking, ads and much more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7z2721mgmr9ej8d3dtg0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7z2721mgmr9ej8d3dtg0.png" alt="Check Working 04" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you've deployed Pihole in a Docker container with your own custom Docker Compose file and connected up a device to use it for it's DNS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeW5oOWRqeWpoMDU4cG00dGNzbGx6Njg2NGd3Yndwb3ZneDZ1NzBjeiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT1Ra2Ik3FEyvw526c/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeW5oOWRqeWpoMDU4cG00dGNzbGx6Njg2NGd3Yndwb3ZneDZ1NzBjeiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT1Ra2Ik3FEyvw526c/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a future guide, we'll be looking at how we can use the Local DNS feature in Pihole with NGINX Proxy Manager to access your local services with a name and not an IP address.&lt;/p&gt;

&lt;p&gt;Next up, we'll be looking at another way to deploy and manage Docker Containers using a GUI interface.&lt;/p&gt;

&lt;p&gt;We're going to install a local service using Docker that will let us choose from a list of different Docker containers. This service will then deploy it for us without having to use the command line.&lt;/p&gt;



&lt;p&gt;In Part 4, we 're going to be looking into Portainer and how we can use it to simplify the Docker experience.&lt;/p&gt;



&lt;p&gt;For more Docker Compose files check out &lt;strong&gt;ReproDev Recipes&lt;/strong&gt; on GitHub with Docker Compose files for you to try out yourself&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;
        reprodev
      &lt;/a&gt; / &lt;a href="https://github.com/reprodev/reprodev-recipes" rel="noopener noreferrer"&gt;
        reprodev-recipes
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Welcome to ReproDev Recipes!&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;This repository contains a collection of code snippets and examples that provide step-by-step instructions for solving common programming problems.&lt;/h2&gt;
&lt;/div&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;This is a companion piece to guides and articles on &lt;a href="https://reprodev.com" rel="nofollow noopener noreferrer"&gt;ReproDev.com&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;




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

&lt;/div&gt;

&lt;p&gt;This repository is licensed under the MIT License. See the LICENSE file for details.&lt;/p&gt;




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

&lt;/div&gt;

&lt;p&gt;To use ReproDev Recipes, simply browse the repository and select the recipe that best matches your needs. Each recipe is located in its own folder, and includes a detailed README file with instructions and code snippets.&lt;/p&gt;

&lt;p&gt;You are free to use, modify, and distribute the code in this repository, as long as you include a copy of the MIT License in your project.&lt;/p&gt;




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

&lt;/div&gt;

&lt;p&gt;If you would like to contribute to ReproDev Recipes, we welcome your pull requests! To get started, simply fork the repository, create a new branch for your changes, and submit a pull request with a clear…&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/reprodev/reprodev-recipes" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





&lt;p&gt;Check out the guide below if you want more information on What Docker is and how to get started&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/reprodev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1280175%2Fa67e6296-986b-4f40-ac21-345dd688529b.png" alt="reprodev"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/reprodev/get-started-with-docker-part-1-an-intro-to-docker-3b81" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Get Started with Docker - Part 1 : An Intro to Docker&lt;/h2&gt;
      &lt;h3&gt;Repro Dev ・ Feb 23 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>tutorial</category>
      <category>pihole</category>
    </item>
    <item>
      <title>GIPHY Linker : An easier way to embed GIFs into your blog</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Fri, 01 Mar 2024 10:30:00 +0000</pubDate>
      <link>https://dev.to/reprodev/giphy-linker-an-easier-way-to-embed-gifs-into-your-blog-17bo</link>
      <guid>https://dev.to/reprodev/giphy-linker-an-easier-way-to-embed-gifs-into-your-blog-17bo</guid>
      <description>&lt;p&gt;One of my main reasons for starting a blog was to practice me some Markdown and HTML.&lt;/p&gt;

&lt;p&gt;In theory this is a great idea but when I've learnt something interesting when moving over articles from my personal blog to my Dev.To blog.&lt;/p&gt;

&lt;p&gt;My personal blog is built on the Ghost CRM and can handle embeds from sites with iFrames natively by using Markdown and a bit of extra HTML.&lt;/p&gt;

&lt;p&gt;Dev.To handles this slightly differently so when I started posting on here I came up against a little trouble.&lt;/p&gt;

&lt;p&gt;I found a guide from 2020 by Tomo Ernst, which I add to my reading list and was going back and forth to look to get the syntax and wrap around code I needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/timo_ernst/how-to-add-giphy-gifs-into-dev-to-posts-17jd"&gt;https://dev.to/timo_ernst/how-to-add-giphy-gifs-into-dev-to-posts-17jd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the code below which uses the direct share link from GIPHY.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$html = "&amp;amp;lt;img width=`"100%`" style=`"width:100%`" src=`"YOURGIPHYSHAREDLINK`"&amp;amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I spent a while manually writing out the lines of code to convert my built up GIPHY addiction or if I wanted to post something new.&lt;/p&gt;

&lt;p&gt;Then I realised. Wait a second. This can be automated. In Powershell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeHB0bGcwNzR3YWFndDBxaTg1N2pib2E0anhma2hzcml3aDE0aXZiYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26uf6e111xR91QxLa/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeHB0bGcwNzR3YWFndDBxaTg1N2pib2E0anhma2hzcml3aDE0aXZiYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/26uf6e111xR91QxLa/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  GIPHY Linker
&lt;/h2&gt;

&lt;p&gt;Introducing GIPHY-Linker, a GUI tool built in Powershell to automatically create the correct embed from the Copy GIF Link to use in your Dev.To blog and much more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/reprodev/GIPHY-Linker/" rel="noopener noreferrer"&gt;https://github.com/reprodev/GIPHY-Linker/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use this tool to convert GIPHY.com GIF Sharing links into a line of Markdown with HTML code for blogs and some Markdown editors.&lt;/p&gt;

&lt;p&gt;This will save you time and frustration for when you get in a writing flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1tfk3th1b6phfbtmj5u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1tfk3th1b6phfbtmj5u3.png" alt="00-Giphy-Linker" width="482" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For now this tool is Windows only, sorry Linux family but that's in the works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Windows machine&lt;/li&gt;
&lt;li&gt;  Unrestricted Execution Policy in Powershell&lt;/li&gt;
&lt;li&gt;  GIPHY link or just a GIF link&lt;/li&gt;
&lt;li&gt;  Blog or Markdown Editor&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Instructions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Download the .PS1 file from GitHub and Run With Powershell&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to giphy.com or your fave GIF site and find a GIF&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fewi0p0m9jt6h4nch2c9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fewi0p0m9jt6h4nch2c9q.png" alt="01-Giphy-Linker" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Click Share on the GIF and copy the 'Copy GIF Link'&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fd2jduf48mqhfuinumdg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fd2jduf48mqhfuinumdg1.png" alt="02-Giphy-Linker" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1geiwu5bioodz8y5ysls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1geiwu5bioodz8y5ysls.png" alt="03-Giphy-Linker" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Paste the link into the box in GIPHY Linker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdwk2gepklf42tkbf0ct1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdwk2gepklf42tkbf0ct1.png" alt="04-Giphy-Linker" width="482" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Click 'Convert into Markdown with HTML' to create the HTML code for your Blog with your chosen GIF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fuhrt9pr7hfels7zno0az.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fuhrt9pr7hfels7zno0az.png" alt="05-Giphy-Linker" width="482" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Use 'Copy HTML' to copy the link to your clipboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsh9vhmyxfiymp9ruuc3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsh9vhmyxfiymp9ruuc3z.png" alt="06-Giphy-Linker" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Paste your HTML line of code into your blog like normal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8en1e2riotq6jhq0ps1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8en1e2riotq6jhq0ps1v.png" alt="07-Giphy-Linker" width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Use 'Clear' to reset the form and start again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7p2vk3vv7bese6ph56pz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7p2vk3vv7bese6ph56pz.png" alt="08-Giphy-Linker" width="482" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  - Meme without having to worry so much
&lt;/h2&gt;

&lt;p&gt;This project is the first of a few possibly useful to me and maybe useful to you tools I'll be releasing on my GitHub and here on Dev.To. You'll also be able to find them by using the Portfolio tags on my site.&lt;/p&gt;

&lt;p&gt;Hopefully, you'll get some use out of this and as long as you are using Windows, Powershell and an Unrestricted Execution Policy you can run it.&lt;/p&gt;

&lt;p&gt;This tool is based on some other GUI clipboard tools I've made in Powershell over the past few years. It now takes pride of place in my blogging toolkit for my Dev.To blog and beyond.&lt;/p&gt;

&lt;p&gt;Lazyness and automation wins again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeHM5em54OTUzdmIzMjBudWc4bGc5ZXA5NWQyYmh4MGxnYzJyN2oyOCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/HzPtbOKyBoBFsK4hyc/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeHM5em54OTUzdmIzMjBudWc4bGc5ZXA5NWQyYmh4MGxnYzJyN2oyOCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/HzPtbOKyBoBFsK4hyc/giphy.gif" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;

</description>
      <category>coding</category>
      <category>automation</category>
      <category>html</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 2b: Windows 11 Install Guide (WSL and Docker Desktop Edition)</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Thu, 29 Feb 2024 10:30:00 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-2b-windows-11-install-guide-wsl-and-docker-desktop-edition-2o2f</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-2b-windows-11-install-guide-wsl-and-docker-desktop-edition-2o2f</guid>
      <description>&lt;p&gt;Running Docker on Windows can be a bit trickier than on Linux but on the flipside can be easier to maintain.&lt;/p&gt;

&lt;p&gt;Docker on Windows was mine and many other people’s first step into the Docker ecosystem.&lt;/p&gt;

&lt;p&gt;In this guide, we'll install &lt;strong&gt;Docker&lt;/strong&gt; onto a Windows 11 machine using &lt;strong&gt;Docker Desktop&lt;/strong&gt; and &lt;strong&gt;WSL2 (Windows Subsystem for Linux)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’re going to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Install &lt;strong&gt;WSL (Windows Subsystem for Linux)&lt;/strong&gt; and the default &lt;strong&gt;Ubuntu&lt;/strong&gt; distribution using &lt;strong&gt;Windows PowerShell&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  Update &lt;strong&gt;WSL1&lt;/strong&gt; to &lt;strong&gt;WSL2&lt;/strong&gt; (if on Windows 10)&lt;/li&gt;
&lt;li&gt;  Install &lt;strong&gt;Docker&lt;/strong&gt; and all it’s required components like &lt;strong&gt;Docker Compose&lt;/strong&gt; using &lt;strong&gt;Docker Desktop&lt;/strong&gt; for Windows&lt;/li&gt;
&lt;li&gt;  Download a &lt;strong&gt;Docker Image&lt;/strong&gt; and run a test &lt;strong&gt;Docker Container&lt;/strong&gt; using the &lt;strong&gt;WSL&lt;/strong&gt; Shell&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you're looking to get this installed on Linux especially the Raspberry Pi then check out our &lt;a href="https://dev.to/reprodev/get-started-with-docker-part-2a-raspberry-pi-linux-install-guide-4hl9"&gt;*&lt;strong&gt;&lt;em&gt;"Get Started with Docker - Part 2a : Raspberry Pi Install Guide"&lt;/em&gt;&lt;/strong&gt;*&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What’s WSL?
&lt;/h2&gt;

&lt;p&gt;The Windows Subsystem for Linux (WSL) is a full Linux distribution that runs underneath the Windows 10 and 11 operating system. Once installed you can log into a WSL shell using your terminal and send Linux commands like you were using a Linux machine. Machines like a Raspberry Pi.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzp96l7gs4h9a7l2hbsku.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzp96l7gs4h9a7l2hbsku.jpg" alt="Pimp My Windows OS Xzibit Meme" width="622" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real advantage to this is that you don’t need to use another application like VMWare Workstation to spin up a Linux Virtual Machine. It's also a great way to learn Linux command line. &lt;/p&gt;

&lt;p&gt;You can get more information on WSL in general from the official Microsoft Learn article linked below if you want to learn more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="noopener noreferrer"&gt;Install WSL with Microsoft Learn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExazduZ2w5ZXBuanl0Znd4NWNiNGlqOWU4cWs0NTZkcndzcDR1ajk4ZSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3ov9jDkkI1i8ZEgP7y/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExazduZ2w5ZXBuanl0Znd4NWNiNGlqOWU4cWs0NTZkcndzcDR1ajk4ZSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3ov9jDkkI1i8ZEgP7y/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can run Docker on Windows without installing WSL by using Hyper-V for Virtualization. However, you’ll get much better performance and compatibility overall if you use the WSL2 backend.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❓ Please Note: If your machine currently has Hyper-V installed and enabled then be aware this guide will switch off Hyper-V&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Install WSL
&lt;/h2&gt;

&lt;p&gt;We’re going to use &lt;strong&gt;Windows PowerShell&lt;/strong&gt; to get this installed in just one command&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click the &lt;strong&gt;Start Menu&lt;/strong&gt; and type &lt;strong&gt;‘powershell&lt;/strong&gt;' to find the app in the list&lt;/li&gt;
&lt;li&gt;  Left click &lt;strong&gt;“Run as administrator”&lt;/strong&gt; in the right hand menu to open this up as &lt;strong&gt;Administrator&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5z0sbn8q4e8ta4yrtiqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5z0sbn8q4e8ta4yrtiqd.png" alt="WSL Install 01" width="800" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Yes&lt;/strong&gt; on the &lt;strong&gt;User Account Control&lt;/strong&gt; notification to continue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F24zjxikenhtfk1jicbws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F24zjxikenhtfk1jicbws.png" alt="WSL Install 02" width="502" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Yes&lt;/strong&gt; on the &lt;strong&gt;User Account Control&lt;/strong&gt; notification to open &lt;strong&gt;PowerShell&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsj5h7qtf00r7oio4ipvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsj5h7qtf00r7oio4ipvx.png" alt="WSL Install 03" width="503" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You now have a &lt;strong&gt;Windows PowerShell&lt;/strong&gt; command prompt running as an &lt;strong&gt;Administrator&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffkjhx2zqhact76nt8x7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffkjhx2zqhact76nt8x7l.png" alt="WSL Install 04" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command and &lt;strong&gt;Press Enter&lt;/strong&gt; to start the install
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fbea4kczk5qvjzeeo1vxq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbea4kczk5qvjzeeo1vxq.png" alt="WSL Install 05" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This command will enable a few optional &lt;strong&gt;Windows&lt;/strong&gt; features automatically&lt;/li&gt;
&lt;li&gt;  First up, it will install and enable the &lt;strong&gt;Virtual Machine Platform&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsa2xc8xcv3rj9cjjzldr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsa2xc8xcv3rj9cjjzldr.png" alt="WSL Install 06" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvdphu1asyvb50j9ys5eh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvdphu1asyvb50j9ys5eh.png" alt="WSL Install 07" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Then it will install and enable the &lt;strong&gt;Windows Subsystem for Linux&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxdc042acd7s4rara9t28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxdc042acd7s4rara9t28.png" alt="WSL Install 08" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Finally, it'll install and download the Default Linux distribution provided by &lt;strong&gt;Microsoft&lt;/strong&gt; for WSL&lt;/li&gt;
&lt;li&gt;  The Default distribution at time of writing is &lt;strong&gt;Ubuntu 22.04.01 LTS&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fd9fu3v4y98ahcmagxc2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fd9fu3v4y98ahcmagxc2w.png" alt="WSL Install 09" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9bu7x6wumdpem0ffv1y0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9bu7x6wumdpem0ffv1y0.png" alt="WSL Install 10" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Restart&lt;/strong&gt; your machine from the &lt;strong&gt;Start Menu&lt;/strong&gt; to complete the install&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frpi0hnyvs1bs9lwlfkyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frpi0hnyvs1bs9lwlfkyg.png" alt="WSL Install 11" width="800" height="873"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You’ll get a screen saying saying &lt;strong&gt;“Configuring Windows”&lt;/strong&gt; or &lt;strong&gt;“Adding Features"&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Once rebooted, go ahead and log back in to &lt;strong&gt;Windows&lt;/strong&gt; to continue the installation.&lt;/li&gt;
&lt;li&gt;  Wait a few minutes and a command prompt window will pop up up like below with a title e.g. &lt;strong&gt;Ubuntu&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fg95puy0tcd1djlplwsr9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fg95puy0tcd1djlplwsr9.png" alt="WSL Install 12" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will launch &lt;strong&gt;Ubuntu&lt;/strong&gt; for the first time.&lt;/li&gt;
&lt;li&gt;  You'll need to set a &lt;strong&gt;Username&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt; for your WSL installation.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 This can be different from your *&lt;strong&gt;&lt;em&gt;Windows&lt;/em&gt;&lt;/strong&gt;* *&lt;strong&gt;&lt;em&gt;username&lt;/em&gt;&lt;/strong&gt;* as they are not connected but there's no issue if they are the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;  In this example, we'll set the &lt;strong&gt;UNIX username&lt;/strong&gt; as &lt;strong&gt;reprodev&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  Type your &lt;strong&gt;username&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to continue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7743w14paxg910qf3xuu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7743w14paxg910qf3xuu.png" alt="WSL Install 13" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Set a &lt;strong&gt;New password&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F67xkx5jtf4jizam5xzq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F67xkx5jtf4jizam5xzq8.png" alt="WSL Install 14" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Retype&lt;/strong&gt; the &lt;strong&gt;New password&lt;/strong&gt; to confirm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8x8rdqvxmyy4h5123at6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8x8rdqvxmyy4h5123at6.png" alt="WSL Install 15" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Press Enter&lt;/strong&gt; and as long as the passwords match, then it'll be updated&lt;/li&gt;
&lt;li&gt;  You'll get a message with &lt;strong&gt;"Installation successful!"&lt;/strong&gt; to wrap up the &lt;strong&gt;Ubuntu&lt;/strong&gt; setup in &lt;strong&gt;WSL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F121m6s5cvv8ycgpgbs7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F121m6s5cvv8ycgpgbs7y.png" alt="WSL Install 16" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  After a minute or so you'll be taken to the &lt;strong&gt;Ubuntu&lt;/strong&gt; command line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ff7l8ivqdf7xcz2twit40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ff7l8ivqdf7xcz2twit40.png" alt="WSL Install 17" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We'll be getting more familiar with this soon but for now type the below command to &lt;strong&gt;exit&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to close this window
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Frpcurfzkqtuevqr5cobh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frpcurfzkqtuevqr5cobh.png" alt="WSL Install 18" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Check and Test the WSL Installation
&lt;/h2&gt;

&lt;p&gt;Before we get onto the Docker Desktop installation we need to take a moment to check that WSL and Ubuntu have installed correctly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open up &lt;strong&gt;Windows PowerShell&lt;/strong&gt; again as an &lt;strong&gt;Administrator&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3k1dh7fs8mgafv4le592.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3k1dh7fs8mgafv4le592.png" alt="WSL Install 19" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command to confirm that &lt;strong&gt;WSL&lt;/strong&gt; has been installed correctly
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F1zs18ohg0xizkdkndj5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1zs18ohg0xizkdkndj5j.png" alt="WSL Install 20" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You should see the &lt;strong&gt;Default&lt;/strong&gt; &lt;strong&gt;Distribution&lt;/strong&gt; as &lt;strong&gt;Ubuntu&lt;/strong&gt; and the &lt;strong&gt;Default&lt;/strong&gt; &lt;strong&gt;Version 2 for WSL&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxkkz46hrfjfazynxxzyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxkkz46hrfjfazynxxzyq.png" alt="WSL Install 21" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZ2phejN3MGg2dG9ud21weDVweTY1a2VhM3N3ZTZ0NzFyZzMzdWx4aCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT5LMHEcVODxAwrxW8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZ2phejN3MGg2dG9ud21weDVweTY1a2VhM3N3ZTZ0NzFyZzMzdWx4aCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT5LMHEcVODxAwrxW8/giphy.gif" width="480" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, we're halfway there. We’ve installed Linux on Windows using Windows PowerShell on Windows 11.&lt;/p&gt;




&lt;h2&gt;
  
  
  Update WSL1 to WSL2 (For Windows 10)
&lt;/h2&gt;

&lt;p&gt;The latest version of Windows Subsystem for Linux is WSL2, if you don’t update now you’ll get an error when starting Docker Desktop later on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you're using Windows 11, then you can skip ahead to the next section to install Docker Desktop as you'll have WSL2 set as default. &lt;/p&gt;

&lt;p&gt;If you're using Windows 10 then you may have to update your WSL version manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXlhdDlkcXA2eXR3ZDBxaGJ1OGx4c2tndWZsMWNkZDhtZ3NrdDR1ciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/2dbYSHcl7k5tZCu5Co/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXlhdDlkcXA2eXR3ZDBxaGJ1OGx4c2tndWZsMWNkZDhtZ3NrdDR1ciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/2dbYSHcl7k5tZCu5Co/giphy.gif" width="480" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command and run as an &lt;strong&gt;Administrator&lt;/strong&gt; in &lt;strong&gt;Windows PowerShell&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Press Enter&lt;/strong&gt; to start the update.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl --update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  Once completed you'll need to reboot and then you can install &lt;strong&gt;Docker Desktop&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Install Docker on Windows with Docker Desktop
&lt;/h2&gt;

&lt;p&gt;Now that we've installed WSL2 on Windows, we can get started on the Docker part of this installation and get those containers running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeWNpb2Jnemxvenpxd3U5bjJ6cXBwMmZ0YWE3YjJjZXVvdGN6engwOCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3o6MbjG9edmvKzqzte/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExeWNpb2Jnemxvenpxd3U5bjJ6cXBwMmZ0YWE3YjJjZXVvdGN6engwOCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3o6MbjG9edmvKzqzte/giphy.gif" width="480" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open a Web Browser, go to &lt;a href="https://docker.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Docker.com&lt;/strong&gt;&lt;/a&gt; and download the latest &lt;strong&gt;Docker Desktop for Windows&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flsx9n8n54v7q3qlar5xw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flsx9n8n54v7q3qlar5xw.png" alt="Docker Desktop Windows 11 Install 01" width="684" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click the button on the Homepage to start the download of "&lt;strong&gt;Docker Desktop Installer.exe"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz3hbrilgipe6d1calu23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz3hbrilgipe6d1calu23.png" alt="Docker Desktop Windows 11 Install 02" width="421" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb5karnv53sry174qf9ij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb5karnv53sry174qf9ij.png" alt="Docker Desktop Windows 11 Install 03" width="387" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open your Downloads folder and double click the executable once finished downloading.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fofo6en8ckxe3ny1g5p8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fofo6en8ckxe3ny1g5p8a.png" alt="Docker Desktop Windows 11 Install 04" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Yes&lt;/strong&gt; on the &lt;strong&gt;User Account Control&lt;/strong&gt; window to start the install&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdvhuu6054u5zei9o8t9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdvhuu6054u5zei9o8t9k.png" alt="Docker Desktop Windows 11 Install 05" width="563" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This installation of &lt;strong&gt;Docker Desktop&lt;/strong&gt; should take about 5 minutes but you may just have time to get a drink.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F89cg4fosmyfgvc55djsa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F89cg4fosmyfgvc55djsa.png" alt="Docker Desktop Windows 11 Install 06" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Make sure you have "&lt;strong&gt;Use WSL 2 instead of Hyper-V"&lt;/strong&gt; and &lt;strong&gt;"Add shortcut to desktop"&lt;/strong&gt; ticked in this &lt;strong&gt;Configuration&lt;/strong&gt; window&lt;/li&gt;
&lt;li&gt;  Click &lt;strong&gt;Ok&lt;/strong&gt; to continue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fslx4v8lc75m1gzdgaugq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fslx4v8lc75m1gzdgaugq.png" alt="Docker Desktop Windows 11 Install 07" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzlxm5u01uj4tazk3kdwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzlxm5u01uj4tazk3kdwx.png" alt="Docker Desktop Windows 11 Install 08" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp7q1y656z3l44u9h9xny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp7q1y656z3l44u9h9xny.png" alt="Docker Desktop Windows 11 Install 09" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once the Installation has completed, click the &lt;strong&gt;"Close and restart"&lt;/strong&gt; button to reboot Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fq4v0y3fm60l8bmd69a49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq4v0y3fm60l8bmd69a49.png" alt="Docker Desktop Windows 11 Install 10" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This &lt;strong&gt;Restart&lt;/strong&gt; will take a lot longer than normal as it will be applying all of the features we enabled earlier.&lt;/li&gt;
&lt;li&gt;  If you didn't get a coffee before I'd definitely suggest getting one now as this will take a while&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F13izsjx271piw6qxdawi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F13izsjx271piw6qxdawi.png" alt="Docker Desktop Windows 11 Install 11" width="392" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once you've rebooted and logged back in, you'll see a new shortcut on your Desktop for &lt;strong&gt;Docker Desktop&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Double click this to open up &lt;strong&gt;Docker Desktop&lt;/strong&gt; for the first time on this machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fx22lb2i58dqhhar1tve1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx22lb2i58dqhhar1tve1.png" alt="Docker Desktop Windows 11 Install 12" width="213" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp763hwedvlaa9pd8934o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp763hwedvlaa9pd8934o.png" alt="Docker Desktop Windows 11 Install 13" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Go ahead and click &lt;strong&gt;Accept&lt;/strong&gt; to start up the program after you've read the &lt;strong&gt;Docker Subscription Service Agreement&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ffdod5lvjpj01w6sieo8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ffdod5lvjpj01w6sieo8m.png" alt="Docker Desktop Windows 11 Install 14" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will open up &lt;strong&gt;Docker Desktop&lt;/strong&gt; for the first time.&lt;/li&gt;
&lt;li&gt;  Untick "Show weekly tips" to stop this window from opening every time you load up the application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwoyvxi483gtpsa35b940.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwoyvxi483gtpsa35b940.png" alt="Docker Desktop Windows 11 Install 15" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You can pick your Role from the dropdown and tick the boxes related to why you are using Docker Desktop. Click &lt;strong&gt;Continue&lt;/strong&gt; once you've made your choice.&lt;/li&gt;
&lt;li&gt;  This is just optional so you can just click &lt;strong&gt;Skip&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7ood26wwr7xkrigh6eiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7ood26wwr7xkrigh6eiy.png" alt="Docker Desktop Windows 11 Install 16" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will start up the &lt;strong&gt;Docker Engine&lt;/strong&gt; for the first time.&lt;/li&gt;
&lt;li&gt;  This first time could take up to 10 minutes to load depending on your hardware and any other applications open at the time&lt;/li&gt;
&lt;li&gt;  You are now at in the &lt;strong&gt;Containers&lt;/strong&gt; menu section of &lt;strong&gt;Docker Desktop&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fifllcmetf3ztk68awkap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fifllcmetf3ztk68awkap.png" alt="Docker Desktop Windows 11 Install 17" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Right now there is nothing here. Click &lt;strong&gt;Dismiss&lt;/strong&gt; in the bottom right to get into the rest of the program&lt;/li&gt;
&lt;li&gt;  This page will normally show any currently running or recently closed &lt;strong&gt;Docker Containers&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgizb9bf5szkn0lsx7nz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgizb9bf5szkn0lsx7nz4.png" alt="Docker Desktop Windows 11 Install 18" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Images&lt;/strong&gt; on the left to see where your Docker Images will be downloaded to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcrfx5d88vmctb7syqr1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcrfx5d88vmctb7syqr1z.png" alt="Docker Desktop Windows 11 Install 19" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Volumes&lt;/strong&gt; on the left to see where your created Docker Volumes will be usually found&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmkzuykr7cajh9ki25k6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmkzuykr7cajh9ki25k6a.png" alt="Docker Desktop Windows 11 Install 20" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing your Docker Installation - Hello World
&lt;/h2&gt;

&lt;p&gt;We should now have &lt;strong&gt;WSL 2, Ubuntu&lt;/strong&gt; and &lt;strong&gt;Docker Desktop&lt;/strong&gt; installed on Windows.&lt;/p&gt;

&lt;p&gt;Let's check it's all working by running our first test &lt;strong&gt;Docker container&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open up a &lt;strong&gt;Windows PowerShell&lt;/strong&gt; terminal and make sure you &lt;strong&gt;Run as Administrator&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5ksdt8tizv39u0aajupu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5ksdt8tizv39u0aajupu.png" alt="Docker Desktop Windows 11 Install 21" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command &lt;strong&gt;wsl&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to open a WSL shell
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wsl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fe2xa3snk674bp89af1zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fe2xa3snk674bp89af1zk.png" alt="Docker Desktop Windows 11 Install 22" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will let you interact with the Ubuntu distro running under WSL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fa7optazwlq188deaiimv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fa7optazwlq188deaiimv.png" alt="Docker Desktop Windows 11 Install 23" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command and &lt;strong&gt;Press Enter&lt;/strong&gt; to check for any running containers
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fifxfdye94sh7bz8dv2m6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fifxfdye94sh7bz8dv2m6.png" alt="Docker Desktop Windows 11 Install 24" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9f3wz5smwxi2z699bezw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9f3wz5smwxi2z699bezw.png" alt="Docker Desktop Windows 11 Install 25" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  As you can see there are currently no running containers at the moment&lt;/li&gt;
&lt;li&gt;  To test use the below command to run the &lt;strong&gt;Docker Container&lt;/strong&gt; for &lt;strong&gt;Hello-World&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F9yxt99zq27ydc53za3mc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9yxt99zq27ydc53za3mc.png" alt="Docker Desktop Windows 11 Install 26" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;strong&gt;Docker Image&lt;/strong&gt; will be downloaded locally, run the container and output a message in the terminal when successful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1lqp4cvo0cmo6g3k00gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1lqp4cvo0cmo6g3k00gk.png" alt="Docker Desktop Windows 11 Install 27" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb9n65epgsmex3vgduvcw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb9n65epgsmex3vgduvcw.png" alt="Docker Desktop Windows 11 Install 28" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;strong&gt;Hello-World&lt;/strong&gt; code has been executed and the &lt;strong&gt;Docker Container&lt;/strong&gt; has been destroyed.&lt;/li&gt;
&lt;li&gt;  If you open up &lt;strong&gt;Docker Desktop&lt;/strong&gt; and now check the &lt;strong&gt;Containers&lt;/strong&gt; section you'll see the container we just ran.&lt;/li&gt;
&lt;li&gt;  It will have a random name which may be different to yours but the Image will be &lt;strong&gt;hello-world&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F082hs436mbv3sziz6h3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F082hs436mbv3sziz6h3d.png" alt="Docker Desktop Windows 11 Install 29" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you open the &lt;strong&gt;Images&lt;/strong&gt; section you'll see the &lt;strong&gt;hello-world&lt;/strong&gt; image in there now, ready to run without downloading again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F144en3sg27eswf37kscp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F144en3sg27eswf37kscp.png" alt="Docker Desktop Windows 11 Install 30" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This container didn't create a &lt;strong&gt;Docker Volume&lt;/strong&gt; so this section is still empty for now&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcq7jgwchqqfgfxukf65a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcq7jgwchqqfgfxukf65a.png" alt="Docker Desktop Windows 11 Install 31" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Congratulations, you've finally installed Docker on Windows using the WSL 2 backend and even ran a test container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our next guide, we’ll set up our first Docker Container on the Raspberry Pi 4 to help block ads and malicious websites on your whole network, Pi-Hole.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYzFwMWdhdGk1aHM2OGJtMXhveXB6ZWloN2JjcnNlcmhxaHRpeHdyOSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l2SqanTUtVa0SW45G/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYzFwMWdhdGk1aHM2OGJtMXhveXB6ZWloN2JjcnNlcmhxaHRpeHdyOSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l2SqanTUtVa0SW45G/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Next time on Get Started with Docker - Part 3: Pi-Hole&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>tutorial</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 2a : Raspberry Pi &amp; Linux Install Guide</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Tue, 27 Feb 2024 20:31:34 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-2a-raspberry-pi-linux-install-guide-4hl9</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-2a-raspberry-pi-linux-install-guide-4hl9</guid>
      <description>&lt;p&gt;Running Docker is pretty straightforward on Linux and makes using a Raspberry Pi, in my opinion a lot easier. It's really helpful when trying to squeeze out every last bit of performance from the lil computer that can.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you're looking to install this on Windows then click the link below for our Windows Setup Guide : "Get Started with Docker - Part 2b: Windows Install Guide" - &lt;strong&gt;Coming Soon&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Personally, I’ve found &lt;strong&gt;Raspberry Pi OS&lt;/strong&gt; to be most the stable distribution when using the Pi. You can of course use your preferred Linux flavour like Ubuntu, Fedora etc as the operating system for your Pi.&lt;/p&gt;

&lt;p&gt;In this guide, we'll install &lt;strong&gt;Docker&lt;/strong&gt; onto a Raspberry Pi 4B 4GB using &lt;strong&gt;Raspberry Pi OS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We're going to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Update your Raspberry Pi and Raspberry Pi OS Linux&lt;/li&gt;
&lt;li&gt;  Install Docker and all it’s required components using the convenience script&lt;/li&gt;
&lt;li&gt;  Install Docker Compose&lt;/li&gt;
&lt;li&gt;  Add your Pi user to the Docker group&lt;/li&gt;
&lt;li&gt;  Test the installation with your first test Docker Container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNzFxZHNnNTQ5cHl5OTU5ZjhvZXNjazY0eHA0YjhxNzVtYmpxNTBjZiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/IAJBKTMu3NSbm/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNzFxZHNnNTQ5cHl5OTU5ZjhvZXNjazY0eHA0YjhxNzVtYmpxNTBjZiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/IAJBKTMu3NSbm/giphy.gif" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you want to know how to "Set up Your Raspberry Pi with Raspberry Pi OS" then check out the below Beginner's Guide to Get Started and then you can continue along with the rest of the guide below - &lt;strong&gt;Coming Soon&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Using GUI or SSH?
&lt;/h2&gt;

&lt;p&gt;In my case I like to use SSH to connect from another machine, as it uses less resources than the GUI.&lt;/p&gt;

&lt;p&gt;Using SSH means you don't have to have a monitor plugged into your Pi to run commands which can help devices like the Pi Zero.&lt;/p&gt;

&lt;p&gt;You’re welcome to use the commands in this guide either in the terminal using the GUI, or connecting via SSH.&lt;/p&gt;

&lt;p&gt;This guide will also assume that you've connected to your Pi using SSH once already and know it's IP address or can find it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMWM0c2wxZGhxd2trYzQycXQ0dGp0dnJ4ZWR2MDM0Y2J0dWNodXplMiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/bi6RQ5x3tqoSI/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMWM0c2wxZGhxd2trYzQycXQ0dGp0dnJ4ZWR2MDM0Y2J0dWNodXplMiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/bi6RQ5x3tqoSI/giphy.gif" width="450" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, let's make sure the Pi's updated.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;The example IP address for the Pi in this guide, is *&lt;strong&gt;&lt;em&gt;192.168.0.177&lt;/em&gt;&lt;/strong&gt;* but yours will probably be different so please replace that below as needed.&lt;/p&gt;

&lt;p&gt;We're also going to be using the username *&lt;strong&gt;&lt;em&gt;pi&lt;/em&gt;&lt;/strong&gt;* in this guide but if you've changed yours then please replace it for the username &amp;gt;as needed to.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Update Your Pi
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYm81OXV2NG91emtseDdqN3RyMWZva293Z2J5bXpqcDVldnY2cGJjdiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Fn7EouKtFLHXhWKgFI/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExYm81OXV2NG91emtseDdqN3RyMWZva293Z2J5bXpqcDVldnY2cGJjdiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Fn7EouKtFLHXhWKgFI/giphy.gif" width="480" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Connect to your &lt;strong&gt;Pi&lt;/strong&gt; using &lt;strong&gt;SSH&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open up &lt;strong&gt;Windows Terminal&lt;/strong&gt; and enter the below with your username and IP Address&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh pi@192.168.0.177
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You'll then be prompted for your &lt;strong&gt;password&lt;/strong&gt; to login.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run an &lt;strong&gt;update&lt;/strong&gt; and &lt;strong&gt;upgrade&lt;/strong&gt; on the &lt;strong&gt;Pi&lt;/strong&gt; using the sudo command below&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update &amp;amp;amp;&amp;amp;amp; sudo apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This will take a few minutes depending on your internet connection and the last time your Pi was updated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type &lt;strong&gt;"Y"&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to continue and install the updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installing the updates will take a lot longer than checking for them so this is the perfect time to grab a coffee and come back later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once updated you'll come back to the command line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type the below command to reboot your PI to commit the updates, wait for it to start back up and connect again by using SSH for the next step.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Please Note: If your Pi hangs, become unresponsive and doesn’t reboot here. Then you may need to disconnect the power cable from the back of the Pi, wait about 15 seconds and reconnect it. This will power cycle the Pi and shouldn’t damage anything but may be the only way to get it to fully reboot as a last resort.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Install Docker
&lt;/h2&gt;

&lt;p&gt;Docker on &lt;strong&gt;Raspberry Pi OS&lt;/strong&gt; is officially supported and that means we can use an install script to automate most of the setup, provided by Docker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwbhejpiz64909mqxrwpd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwbhejpiz64909mqxrwpd.png" alt="Docker Hub Image 01" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once you've updated and rebooted then connect back to the Pi using SSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fesud3utqrerrftsmxcdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fesud3utqrerrftsmxcdg.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Credit to this article from &lt;a href="https://pimylifeup.com/raspberry-pi-docker/" rel="noopener noreferrer"&gt;PiMyLife&lt;/a&gt; for the suggestion of piping the script directly into the terminal using the below one liner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMmMyemdrdThqbmRkY3hkc2poaTFvN2MyMXh1b2twaGpldngwNXE3MCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/jUL2CIAKP9gOKmYMFC/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMmMyemdrdThqbmRkY3hkc2poaTFvN2MyMXh1b2twaGpldngwNXE3MCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/jUL2CIAKP9gOKmYMFC/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  I'd also suggest adding on the &lt;strong&gt;sudo command&lt;/strong&gt; at the beginning as I've had some issues with the &lt;strong&gt;curl&lt;/strong&gt; command failing to download on an Azure Ubuntu VM installation.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo curl -sSL https://get.docker.com | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F67wt4ola3gifadpxenrr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F67wt4ola3gifadpxenrr.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will take a lot longer than the previous update took earlier and the script will download all files and dependencies needed for your &lt;strong&gt;Docker&lt;/strong&gt; installation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvaw6pn3y8g4sbsqwwnw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvaw6pn3y8g4sbsqwwnw2.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You may want to grab another coffee and let the script do it's work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxx0pbkt5xm1imskc6hou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxx0pbkt5xm1imskc6hou.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You now have &lt;strong&gt;Docker&lt;/strong&gt; with the &lt;strong&gt;Docker Engine&lt;/strong&gt; installed on your &lt;strong&gt;Raspberry Pi&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Type the below line and &lt;strong&gt;Press Enter&lt;/strong&gt; to check for any running docker containers
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fqm0vm6o7k6hzmjhpa2p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqm0vm6o7k6hzmjhpa2p3.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhh6u5jwgujvt3ka3t2pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhh6u5jwgujvt3ka3t2pa.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExc3pubmwzb3dkOG9iMnBlM3p5OGFrbjNzdHM5ODd5dXh3bWVyMXdnayZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3nlnWnTYCRxPnzMihQ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExc3pubmwzb3dkOG9iMnBlM3p5OGFrbjNzdHM5ODd5dXh3bWVyMXdnayZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3nlnWnTYCRxPnzMihQ/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Install Docker Compose
&lt;/h2&gt;

&lt;p&gt;You’ve almost got all of the basic components for Docker installed but if you want to use &lt;strong&gt;Docker Compose&lt;/strong&gt; YAML files then you’ll need to have &lt;strong&gt;Docker Compose&lt;/strong&gt; installed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command and &lt;strong&gt;Press Enter&lt;/strong&gt; to get it installed
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F8tgv769a55qi0hm244ef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8tgv769a55qi0hm244ef.png" alt="I" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F60n9ud2psjeh8sty83wy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F60n9ud2psjeh8sty83wy.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type &lt;strong&gt;"Y"&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to continue and install the updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmqlgj46rxov1jk4dvn96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmqlgj46rxov1jk4dvn96.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will remove any extra parts to &lt;strong&gt;Docker&lt;/strong&gt; that were installed using the Automated script and also install what we need to get &lt;strong&gt;Docker Compose&lt;/strong&gt; running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fuqd67u2f3t55p86jvcad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fuqd67u2f3t55p86jvcad.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fttvagg4rc4808adpui5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fttvagg4rc4808adpui5b.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fitg4g31i1868qbs2ecls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fitg4g31i1868qbs2ecls.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once that’s installed, you can check your &lt;strong&gt;Docker Compose&lt;/strong&gt; version with the below command.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fwy6pvuuuv7orzixe0ia8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwy6pvuuuv7orzixe0ia8.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsxmvn7r6v4puu5arml3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsxmvn7r6v4puu5arml3x.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Then type "&lt;strong&gt;clear"&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to clear the terminal for our next step.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F9ft34qs55wdfipije9vh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9ft34qs55wdfipije9vh.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we’ve installed &lt;strong&gt;Docker, Docker Engine&lt;/strong&gt; and &lt;strong&gt;Docker Compose&lt;/strong&gt;, we need to set up our &lt;strong&gt;Docker&lt;/strong&gt; permissions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Add Pi User to Docker
&lt;/h2&gt;

&lt;p&gt;You've now got &lt;strong&gt;Docker&lt;/strong&gt; installed but when you try to run a &lt;strong&gt;Docker&lt;/strong&gt; command you get a permissions issue.&lt;/p&gt;

&lt;p&gt;We have a few options here.&lt;/p&gt;

&lt;p&gt;You can add &lt;strong&gt;sudo&lt;/strong&gt; before every command, &lt;strong&gt;su -&lt;/strong&gt; to become root or add the Pi user to the &lt;strong&gt;Docker&lt;/strong&gt; group.&lt;/p&gt;

&lt;p&gt;We’re going to go for the third option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRyYmtpOG1nb2ZlcnR4d2dncHVpeW0yMnFsNnJnbTFtc3lwaGs3ZCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3otPoIohp3elV46VEY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExMXRyYmtpOG1nb2ZlcnR4d2dncHVpeW0yMnFsNnJnbTFtc3lwaGs3ZCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3otPoIohp3elV46VEY/giphy.gif" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open a New Terminal or if you're continuing from our last step it should look like this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmq87ugnmqm3yz8jj1jjs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmq87ugnmqm3yz8jj1jjs.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you &lt;strong&gt;HAVEN'T&lt;/strong&gt; used the convenience script then you need to create the docker group first using the below command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo groupadd docker&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you &lt;strong&gt;HAVE&lt;/strong&gt; used the convenience script then type the below line and &lt;strong&gt;Press Enter&lt;/strong&gt; to add the &lt;strong&gt;Pi&lt;/strong&gt; user to the &lt;strong&gt;Docker&lt;/strong&gt; group.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -aG docker pi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F6t3ssghmam30m3t9onq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6t3ssghmam30m3t9onq7.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F7cejsqqn28waetarpjsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F7cejsqqn28waetarpjsl.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To apply the changes you’ll need to log out and back in via SSH.&lt;/li&gt;
&lt;li&gt;  Type &lt;strong&gt;"logout"&lt;/strong&gt; and &lt;strong&gt;Press Enter&lt;/strong&gt; to logout
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;logout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fzehigvixg5xbrnksrxpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzehigvixg5xbrnksrxpa.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fj43ggjga1zzqk4012vi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fj43ggjga1zzqk4012vi7.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡Please Note: If you're using a VM then you'll probably need to reboot the VM for your user changes to apply&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;  Connect back to Log back in, using the &lt;strong&gt;Pi&lt;/strong&gt; user and &lt;strong&gt;password&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fcanb9qwyjmbhgghff7g1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fcanb9qwyjmbhgghff7g1.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fr9ohlajz701hkodmrc45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fr9ohlajz701hkodmrc45.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run the below command to see which &lt;strong&gt;groups&lt;/strong&gt; the &lt;strong&gt;Pi&lt;/strong&gt; user is currently a member of
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;groups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Focn79f4ch6yhvw78xgq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Focn79f4ch6yhvw78xgq1.png" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You should see &lt;strong&gt;docker&lt;/strong&gt; as one of the groups listed for Pi with a line similar to this in the terminal output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw1h1t2mexwq6f28rywir.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw1h1t2mexwq6f28rywir.png" width="800" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We need to apply the changes to the running &lt;strong&gt;Docker Service.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  We can do this by restarting that service only, without restarting the whole Pi&lt;/li&gt;
&lt;li&gt;  Run the below command and &lt;strong&gt;Press Enter&lt;/strong&gt; to restart the &lt;strong&gt;docker&lt;/strong&gt; service
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service docker restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2F939m1ki84ya9d5x29xsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F939m1ki84ya9d5x29xsz.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F70owxa3uuuv9zil6l32f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F70owxa3uuuv9zil6l32f.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpi8ntefmpiwtaeku3mls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpi8ntefmpiwtaeku3mls.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run the below &lt;strong&gt;docker&lt;/strong&gt; command to check for running containers again. This time without using &lt;strong&gt;sudo&lt;/strong&gt; before it
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fvb0o8v8p64dvk08ka7rx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvb0o8v8p64dvk08ka7rx.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, the Pi user is now part of the &lt;strong&gt;docker&lt;/strong&gt; group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZmZ6M3FoNmI0OG5jOHFzOWM1YnVtMHBsZDY2eHRkbG10aDFrN3RzciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Ln9YwHWf9jwb3eKHMD/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZmZ6M3FoNmI0OG5jOHFzOWM1YnVtMHBsZDY2eHRkbG10aDFrN3RzciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Ln9YwHWf9jwb3eKHMD/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means you can now run &lt;strong&gt;docker&lt;/strong&gt; commands without running &lt;strong&gt;sudo&lt;/strong&gt; or being logged in as root.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing your Docker Installation - Hello World
&lt;/h2&gt;

&lt;p&gt;We should now have &lt;strong&gt;Docker&lt;/strong&gt; and &lt;strong&gt;Docker Compose&lt;/strong&gt; installed. In addition, the &lt;strong&gt;Pi&lt;/strong&gt; user should be able to use Docker commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To test this all out run the below command in your terminal
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fkw4s37h1wa7qm6mj9vea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkw4s37h1wa7qm6mj9vea.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This should then download the "&lt;strong&gt;hello world&lt;/strong&gt;" docker image from &lt;strong&gt;Docker Hub&lt;/strong&gt;, create the container locally and output some text to the terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyc56km9fiw6jf4h50sg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyc56km9fiw6jf4h50sg9.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fe4940f7ti8b6pfsc9w4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fe4940f7ti8b6pfsc9w4u.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjamrz3ypq55iz3shni0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjamrz3ypq55iz3shni0b.png" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you look in the output you'll see this message and then a brief explanation of what this just did.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello from Docker!
This message shows that your installation appears to be working correctly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  Congratulations, you've successfully set up Docker on your Raspberry Pi. We're finally ready to spin up some applications and services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxmd2N4NGxwYXgyM3k1bTZqN2g4cmh5OG1lb240dTExam93MTRncyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/lcEktA2AJUqDm/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxmd2N4NGxwYXgyM3k1bTZqN2g4cmh5OG1lb240dTExam93MTRncyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/lcEktA2AJUqDm/giphy.gif" width="500" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next up, in Get Started with Docker : Part 2b - We'll be looking at installing Docker and Docker Desktop on a Windows machine using WSL.&lt;/p&gt;

&lt;p&gt;__&lt;/p&gt;

&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>Get Started with Docker - Part 1 : An Intro to Docker</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Fri, 23 Feb 2024 20:48:45 +0000</pubDate>
      <link>https://dev.to/reprodev/get-started-with-docker-part-1-an-intro-to-docker-3b81</link>
      <guid>https://dev.to/reprodev/get-started-with-docker-part-1-an-intro-to-docker-3b81</guid>
      <description>&lt;p&gt;&lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; is a great way to run your self hosted applications and services on many different operating systems and types of hardware.&lt;/p&gt;

&lt;p&gt;It's one of the easiest ways to get into self-hosting your own applications and a great way to learn without breaking things in the rest of your system.&lt;/p&gt;

&lt;p&gt;In this series we're going to run through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What Docker is and how it works?&lt;/li&gt;
&lt;li&gt;  How to get Docker installed on a Raspberry Pi or Windows Machine?&lt;/li&gt;
&lt;li&gt;  How to run your first Docker container?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Docker?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZmRkeWo5a2ZvMXlxNHZ1ZDZrbTZpN3cwN3ZvcnBycWM2YjliY2cwbCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/OnJLRvXvAmvPW/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZmRkeWo5a2ZvMXlxNHZ1ZDZrbTZpN3cwN3ZvcnBycWM2YjliY2cwbCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/OnJLRvXvAmvPW/giphy.gif" width="500" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; uses the &lt;strong&gt;Docker Engine&lt;/strong&gt; to create containers that hold everything needed to run a particular piece of code or a executable program on almost any computer.&lt;/p&gt;

&lt;p&gt;These containers are run independently from the rest of the machine similar to a virtual machine but with a lot less power needed.&lt;/p&gt;

&lt;p&gt;The containers are isolated from the rest of the machine and can be run locally, remotely or in the cloud as their filesystem is self contained.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Containers
&lt;/h2&gt;

&lt;p&gt;Containers can be used to run almost any piece of software like a File Server, Web Browser or Full Operating System.&lt;/p&gt;

&lt;p&gt;Here's an explanation from Docker themselves.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings." - *&lt;strong&gt;&lt;em&gt;What is a Container? | Docker.com&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What is a Container? | Docker&lt;/p&gt;

&lt;p&gt;A container is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/resources/what-container/" rel="noopener noreferrer"&gt;https://www.docker.com/resources/what-container/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These containers can be destroyed and then re-created quickly with the choice of either storing the data for the config to use again or reset to start fresh.&lt;/p&gt;

&lt;p&gt;This allows you to upgrade or replace running containers with little to almost no down time, individually or all at once.&lt;/p&gt;

&lt;p&gt;This can make keeping your infrastructure rolling along a lot easier and without anyone really noticing you've changed anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbW93OHliMzN5amwzbjVwM2V3aWppNm5yamprNXM2c2xma2JsOWhkNiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/9x6fPJVGpq9HO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbW93OHliMzN5amwzbjVwM2V3aWppNm5yamprNXM2c2xma2JsOWhkNiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/9x6fPJVGpq9HO/giphy.gif" width="446" height="266"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Images
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Docker Images&lt;/strong&gt; are created by members of the community, software companies and Docker themselves.&lt;/p&gt;

&lt;p&gt;Think of them as a shrunk down version of the program you would normally download to install an application like Chrome.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Docker Image&lt;/strong&gt; contains a specific set of instructions and files to create the environment needed to run a program or execute code.&lt;/p&gt;

&lt;p&gt;There's a whole catalogue of different images that you can download from the official &lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fr2htlpfig4egqd0ggsao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fr2htlpfig4egqd0ggsao.png" alt="Docker Hub 01" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are images for everything from a Website CRM application like Ghost, which is what this blog is running on to a full Ubuntu Operating system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvk6pcc585c99496598v2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvk6pcc585c99496598v2.png" alt="Docker Hub 02" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These images have everything in one package and run across several different environments with only a few variables needed to be changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbHNyMDc0eTBsNTFhMzk2bW05MzR0bm1jMnQ1emFra3RwcGsydW9haiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l3mZ8u9RJ4A9kPlK0/giphy-downsized-large.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbHNyMDc0eTBsNTFhMzk2bW05MzR0bm1jMnQ1emFra3RwcGsydW9haiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l3mZ8u9RJ4A9kPlK0/giphy-downsized-large.gif" width="384" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are also different versions for different hardware architectures and you'll find more information and install instructions from the developer on their project pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1r1tvt9foe6544aq1rd1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1r1tvt9foe6544aq1rd1.png" alt="Docker Hub 03" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Compose
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt; files are the final part of the ecosystem you'll need to get familiar with when using Docker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExa2g0MDNueHRvczRjemNmYnVqNHgxbGJwOXgwamR2NmZvMzYxeTE3cyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/34ZNcoaN5u4hi/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExa2g0MDNueHRvczRjemNmYnVqNHgxbGJwOXgwamR2NmZvMzYxeTE3cyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/34ZNcoaN5u4hi/giphy.gif" width="500" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are YAML files with the .yml extension that contain the specific instructions needed to create the environment to run the Docker Image.&lt;/p&gt;

&lt;p&gt;These will download the image, if you don't have it already locally so can be shared or used to run on another machine quickly. Most importantly it will run the same way every-time in a predictable, efficient way. The &lt;strong&gt;Docker Compose&lt;/strong&gt; file is created using a text editor like Notepad++ in Windows or Nano/Vim in Linux.&lt;/p&gt;

&lt;p&gt;Here's is an example of one that would spin up the docker version of Nginx Proxy Manager.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format &amp;amp;lt;host-port&amp;amp;gt;:&amp;amp;lt;container-port&amp;amp;gt;
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can usually find the &lt;strong&gt;Docker Compose&lt;/strong&gt; file on the project page on &lt;strong&gt;Docker Hub&lt;/strong&gt; or &lt;strong&gt;GitHub&lt;/strong&gt; when you get an image if you're looking for more to try out.&lt;/p&gt;

&lt;p&gt;You can also find a whole load of example Docker Compose files here for inspiration and to run once you've got the Docker Engine installed.&lt;/p&gt;

&lt;p&gt;GitHub - docker/awesome-compose: Awesome Docker Compose samples&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/docker/awesome-compose" rel="noopener noreferrer"&gt;https://github.com/docker/awesome-compose&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are ran using the &lt;strong&gt;docker command&lt;/strong&gt; below usually unless stated otherwise. This runs the container in detached mode so you can continue to use the terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Docker Run
&lt;/h2&gt;

&lt;p&gt;You can use a &lt;strong&gt;Docker Compose&lt;/strong&gt; file or instead just a &lt;strong&gt;Docker Run Command&lt;/strong&gt; to start running an application.&lt;/p&gt;

&lt;p&gt;Here's how to run &lt;strong&gt;NGINX Proxy Manager&lt;/strong&gt; using the &lt;strong&gt;Docker Run Command&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d \
    --name=nginx-proxy-manager \
    --restart unless-stopped \
    -p 8181:8181 \
    -p 8080:8080 \
    -p 4443:4443 \
    -v /docker/appdata/nginx-proxy-manager:/config:rw \
    jlesage/nginx-proxy-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you copy and paste the above into a terminal then it will run &lt;strong&gt;Nginx Proxy Manager&lt;/strong&gt; just like the &lt;strong&gt;Docker Compose&lt;/strong&gt; file.&lt;/p&gt;

&lt;p&gt;This may come in handy on systems where you can't easily navigate to the correct folder but can run Docker commands. It's also a very quick way to spin up containers for testing.&lt;/p&gt;

&lt;p&gt;Now you've had a quick Intro to Docker, we're ready to install this to the operating system and device of your choice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGJ1OHg1eTQ5Mzd4OXcyeWFrajU4MmJyeDg0bmV2OWFkaXRqc25hNSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/z8gtBVdZVrH20/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGJ1OHg1eTQ5Mzd4OXcyeWFrajU4MmJyeDg0bmV2OWFkaXRqc25hNSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/z8gtBVdZVrH20/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker Engine
&lt;/h2&gt;

&lt;p&gt;To use &lt;strong&gt;Docker&lt;/strong&gt; you need to install the &lt;strong&gt;Docker Engine&lt;/strong&gt; on your chosen Operating system which will set up everything in the background to get things running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbnhzY2N4dmM2MmZycWl3OG50Zm1zY3d0dWQzZW1jeWE4aXRyeTl3cCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l2JefbKQ8JWybbyP6/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExbnhzY2N4dmM2MmZycWl3OG50Zm1zY3d0dWQzZW1jeWE4aXRyeTl3cCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l2JefbKQ8JWybbyP6/giphy.gif" width="480" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Raspberry Pi (Linux)
&lt;/h3&gt;

&lt;p&gt;The Raspberry Pi 4 is a powerful machine for it’s small form factor and makes the perfect candidate for experimenting with Docker.&lt;/p&gt;

&lt;p&gt;Linux is the best overall operating system and platform for Docker in my humble opinion for performance and learning potential. I'm running Docker on a Raspberry Pi 4, Raspberry Pi 3, Raspberry Pi Zero and through a Linux VM on my Windows Desktop.&lt;/p&gt;

&lt;p&gt;There's a simple script provided directly by Docker themselves that you can run to automate the installation process&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F176hpev6g9mhtb2xyo0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F176hpev6g9mhtb2xyo0s.png" alt="Docker Convenience Script" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the flipside, it can be a bit daunting if you're unfamiliar with Linux when it comes to troubleshooting. This can be a great way to learn the OS as a whole.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcHdmM2JzczM5c2N2OXJmYjRwZnQxZmdzazQ1M2dxNm84bWJ2aWVrdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3og0ICG4WxdKSRzE3K/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExcHdmM2JzczM5c2N2OXJmYjRwZnQxZmdzazQ1M2dxNm84bWJ2aWVrdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3og0ICG4WxdKSRzE3K/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll go over the install in a future guide in this series and it'll be linked here&lt;/p&gt;




&lt;h3&gt;
  
  
  Windows 11
&lt;/h3&gt;

&lt;p&gt;This can also be run on Windows machine by installing Docker Desktop which give you a GUI to manage your containers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ff21cx0z3ghwyz66jbqud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ff21cx0z3ghwyz66jbqud.png" alt="Docker Desktop Windows" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzejt8t1f3fyr3r9bfm6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzejt8t1f3fyr3r9bfm6n.png" alt="Docker Desktop Windows Download" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has a few quirks and specific ways in which the file paths work for the containers compared to Linux.&lt;/p&gt;

&lt;p&gt;This was the way I first started using Docker. It taught me a lot of the fundamentals and being in Windows can make it easier to troubleshoot. I personally still use Docker Desktop on my own Windows Laptop for using Docker on the go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Desktop&lt;/strong&gt; on Windows will give you the option to use WSL2 (Windows Subsystem for Linux). This is a full Linux installation running under the hood of Windows and lets you use Linux commands for Docker just like a full VM.&lt;/p&gt;

&lt;p&gt;To get the best performance of our &lt;strong&gt;Docker&lt;/strong&gt; on Windows you should get WSL2 but it's optional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExM2l0aXhoMXIyYnNnOHVhcDN6emFsa2swaWQ2c2d4ZnZxcXMwYmh1biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/AliO819Kp3aus/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExM2l0aXhoMXIyYnNnOHVhcDN6emFsa2swaWQ2c2d4ZnZxcXMwYmh1biZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/AliO819Kp3aus/giphy.gif" width="320" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll go over the install in a future guide in this series and it'll be linked here&lt;/p&gt;




&lt;p&gt;Congratulations, that's the nuts and bolts of Docker but in the rest of this series we're going to go through exactly how to install Docker on Linux (Raspberry Pi) and Windows for those of you who want to try it out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNnZkY2R5NmY3MmNteGZ2enpiajdxazR4ejd0b2Vib3F0bTF1N3NiNSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/UZA15w44oCT1m/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNnZkY2R5NmY3MmNteGZ2enpiajdxazR4ejd0b2Vib3F0bTF1N3NiNSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/UZA15w44oCT1m/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join us next time for Part 2a - How to Install Docker on a Raspberry Pi using Linux&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/reprodev/get-started-with-docker-part-2a-raspberry-pi-linux-install-guide-4hl9"&gt;Part 2a - How to Install Docker on a Raspberry Pi using Linux&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Is the reign of Esxi as the Hypervisor of choice for learning at home, virtually over?</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Thu, 22 Feb 2024 02:23:45 +0000</pubDate>
      <link>https://dev.to/reprodev/is-the-reign-of-esxi-as-the-hypervisor-of-choice-for-learning-at-home-virtually-over-3bnn</link>
      <guid>https://dev.to/reprodev/is-the-reign-of-esxi-as-the-hypervisor-of-choice-for-learning-at-home-virtually-over-3bnn</guid>
      <description>&lt;p&gt;You've probably heard of virtualization and virtual machines. You may have even wanted to spin something up yourself at home to try it out.&lt;/p&gt;

&lt;p&gt;Virtualization lets you use a single piece of hardware's resources to act like several different pieces of physical hardware e.g one physical server acting like 5 smaller virtual servers.&lt;/p&gt;

&lt;p&gt;Confusing yes but also very useful.&lt;/p&gt;

&lt;p&gt;Virtual machines can be run inside an operating system like Windows using something like &lt;a href="https://www.virtualbox.org/" rel="noopener noreferrer"&gt;Oracle Virtualbox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Virtualbox let's you run these VMs alongside your normal programs when you need to but you can run into performance and compatibility issues.&lt;/p&gt;

&lt;p&gt;The more efficient way to do this is through a Bare Metal Hypervisor like Esxi. This allows you manage your resources and virtual machines more effectively without all the extra bloat of a full OS.&lt;/p&gt;

&lt;p&gt;Plus it's a bit closer to how this would work in a real production server environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Esxi?
&lt;/h2&gt;

&lt;p&gt;The vSphere Hypervisor (Esxi) from VM Ware is a Bare Metal Hypervisor that is installed onto a physical server. Once installed this is used instead of an OS like Windows and allows you to run multiple Virtual Machines on a single piece of server hardware.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.vmware.com/uk/products/esxi-and-esx.html" rel="noopener noreferrer"&gt;https://www.vmware.com/uk/products/esxi-and-esx.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The software has a simple Management web dashboard that you can connect to from a browser, with quick access to all of your VMs. You can start, stop, copy, monitor, troubleshoot and edit them as you need all in one place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fu6htjynm27b6xu95ofly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fu6htjynm27b6xu95ofly.png" alt="vSphereEsxi Dashboard" width="640" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real pull though is that you used to be able to get perpetual licenses for free to try out the software. It's closed source and so you have to go to Esxi for your updates directly.&lt;/p&gt;

&lt;p&gt;This lets anybody run a single Esxi host without all of the more advanced options that that are only available with the more expensive paid licenses in V-Sphere.&lt;/p&gt;

&lt;p&gt;If you want to cluster your hosts for High Availability failover or to share those resources between hosts you'll need one of those paid licenses.&lt;/p&gt;

&lt;p&gt;I was able to get hands on experience in my own home lab with the free VM Ware evaluation licence myself. Playing around with this, I was able to then use those skills in my day-to-day job through practice outside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the need to change?
&lt;/h2&gt;

&lt;p&gt;Well, since the purchase of VMWare as a whole by Broadcom many ways in which the software is licensed and sold is being revised.&lt;/p&gt;

&lt;p&gt;There's panic that prices will now start to sky-rocket for licenses to use Esxi in businesses by the new owners of VM Ware.&lt;/p&gt;

&lt;p&gt;Broadcom have stated they have plans to deal directly with their top 2000 VM Ware Customers thus pivoting away from just releasing updates for everyone.&lt;/p&gt;

&lt;p&gt;Things are still are still in flux around the topic but I like any excuse to try out new software. I'm now looking at the other options that would work for me.&lt;/p&gt;

&lt;p&gt;I'd like to try and use something that would be used in an Enterprise environment so I can learn at home to use as work.&lt;/p&gt;

&lt;p&gt;With that in mind I've narrowed my picks down to just 3 choices&lt;/p&gt;

&lt;h2&gt;
  
  
  Proxmox
&lt;/h2&gt;

&lt;p&gt;First up, it's Proxmox and probably the one you've most likely already heard of.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.proxmox.com/" rel="noopener noreferrer"&gt;https://www.proxmox.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built my current Esxi host in March 2023 moved over from another host pretty much starting from scratch. At the time I looked into Proxmox but couldn't really see this being used in businesses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwuao8zfs8mq0cnuaanal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwuao8zfs8mq0cnuaanal.png" alt="ProxMox Dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Delving deeper they do actually have an Enterprise license but being based in Europe might be a bit of a barrier for those companies in the states when it comes to that support.&lt;/p&gt;

&lt;p&gt;The main benefits for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open-Source and Free for Personal Use&lt;/li&gt;
&lt;li&gt;  Linux Based System (It's just Debian and I like a bit of Debian)&lt;/li&gt;
&lt;li&gt;  Container support built in&lt;/li&gt;
&lt;li&gt;  Lots of Community online support in Guides, Forums, other users&lt;/li&gt;
&lt;li&gt;  Great looking Web Dashboard Interface built in&lt;/li&gt;
&lt;li&gt;  Simple and free way to cluster the hosts&lt;/li&gt;
&lt;li&gt;  Simple way to schedule and perform backups&lt;/li&gt;
&lt;li&gt;  Live migrations of running VMs&lt;/li&gt;
&lt;li&gt;  Can be set up with High-Availability for failover and redundancy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main cons for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Enterprise support could be tricky due to time difference&lt;/li&gt;
&lt;li&gt;  Proxmox can take a little time to learn for specific functions&lt;/li&gt;
&lt;li&gt;  Nested virtualization can be an issue e.g. Hyper V in a VM&lt;/li&gt;
&lt;li&gt;  Potential issues with passing through graphics cards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  XCP-NG
&lt;/h2&gt;

&lt;p&gt;This is the one that really caught my eye as it looked the most like Esxi and the project seemed to be based on Citrix XenServer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://xcp-ng.org/" rel="noopener noreferrer"&gt;https://xcp-ng.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Released in March 2018 after a successful KickStarter by the original founder of Xen Orchestra, Oliver Lambert. It's built off the base of several different Linux Distributions including CentOS and other tech stacks.&lt;/p&gt;

&lt;p&gt;It's slightly different in that you need to have a running VM or somewhere else on the network to run it's Management dashboard software called Xen Orchestra.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0nlcqu3n1toalumkco39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0nlcqu3n1toalumkco39.png" alt="Xen Orchestra Dashboard" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://xen-orchestra.com/" rel="noopener noreferrer"&gt;https://xen-orchestra.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main benefits for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open-Source and Free for Personal Use&lt;/li&gt;
&lt;li&gt;  Linux Based System&lt;/li&gt;
&lt;li&gt;  Container support built in&lt;/li&gt;
&lt;li&gt;  Lots of Community online support in Guides, Forums, other users&lt;/li&gt;
&lt;li&gt;  Great looking Web Dashboard Interface To Manage Many Hosts&lt;/li&gt;
&lt;li&gt;  Simple and free way to cluster the hosts&lt;/li&gt;
&lt;li&gt;  Nested Virtualization works&lt;/li&gt;
&lt;li&gt;  Simple way to schedule and perform backups&lt;/li&gt;
&lt;li&gt;  Live Migrations of running VMs&lt;/li&gt;
&lt;li&gt;  Big install and user base&lt;/li&gt;
&lt;li&gt;  Great Enterprise support packages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main cons for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Not a big fan of having to use a VM on the machine for the Xen Orchestra Management dashboard&lt;/li&gt;
&lt;li&gt;  The GUI doesn't have much information in default overviews&lt;/li&gt;
&lt;li&gt;  Uses yum for packages instead of apt which I would need to learn&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  VM Ware Esxi
&lt;/h2&gt;

&lt;p&gt;In a shock twist, I actually made Esxi my third choice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fsr8stdb9asukd3xp3v2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fsr8stdb9asukd3xp3v2n.png" alt="vSphereEsxi Dashboard 02" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've managed to keep the current Esxi host on an old Dell XPS 8930 Desktop running for 188 continuous days without a reboot before I had a powercut due to a flood.&lt;/p&gt;

&lt;p&gt;I'm already very familiar with it and in my opinion with the some customers getting multi-year renewals means there will still be people using this for years to come.&lt;/p&gt;

&lt;p&gt;The main benefits for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Free for Personal Use&lt;/li&gt;
&lt;li&gt;  Container support built in&lt;/li&gt;
&lt;li&gt;  Lots of Community online support in Guides, Forums, other users&lt;/li&gt;
&lt;li&gt;  Great looking Web Dashboard Interface In Built to manager VMs&lt;/li&gt;
&lt;li&gt;  Nested Virtualization works&lt;/li&gt;
&lt;li&gt;  Big install and user base&lt;/li&gt;
&lt;li&gt;  Great Enterprise support packages if you pay for them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main cons for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Getting an evaluation license for new installs is now almost impossible&lt;/li&gt;
&lt;li&gt;  Enterprise support renewals could be tricky now moving forwards&lt;/li&gt;
&lt;li&gt;  Potential issues with passing through graphics cards&lt;/li&gt;
&lt;li&gt;  No more patches for free license users&lt;/li&gt;
&lt;li&gt;  What other surprises may come from Broadcom&lt;/li&gt;
&lt;li&gt;  Will customers reject the new pricing scheme making it obsolete&lt;/li&gt;
&lt;li&gt;  Closed source so development is only done by the VM Ware Team&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Now, for those who've just built an Esxi box for the first time.&lt;/p&gt;

&lt;p&gt;First, up well done, that wasn't an easy install and I don't think there's really any rush to move to something else just yet.&lt;/p&gt;

&lt;p&gt;For me, I'll be staying on my single Esxi host for a little while longer while I weigh up the options.&lt;/p&gt;

&lt;p&gt;I'm also interested to see what else I've missed before I take the plunge.&lt;/p&gt;

&lt;p&gt;Esxi has worked for me till now and sometimes if it ain't broke, don't fix it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/4QF3DLl5JuYnjR2YzG/giphy-downsized-large.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/4QF3DLl5JuYnjR2YzG/giphy-downsized-large.gif" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reprodev.com" rel="noopener noreferrer"&gt;https://reprodev.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>discuss</category>
      <category>virtualmachine</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Chocolatey: The Easiest Way to Install and Manage Windows Software</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Sun, 18 Feb 2024 17:57:37 +0000</pubDate>
      <link>https://dev.to/reprodev/chocolatey-the-easiest-way-to-install-and-manage-windows-software-2i32</link>
      <guid>https://dev.to/reprodev/chocolatey-the-easiest-way-to-install-and-manage-windows-software-2i32</guid>
      <description>&lt;p&gt;Working on Windows has it’s advantages when it comes to software and installing with most programs having a Windows Version available for download every time.&lt;/p&gt;

&lt;p&gt;Sometimes that sponsored Google Search link you just clicked is actually the wrong software or worse yet, a malicious malware version of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNTZyZW8xamhyd3NkZWc3aWVtMDZqcTlpdG93M2szejh2MDZuNXo3bCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3oEjHCF6kGlXK0ofsY/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNTZyZW8xamhyd3NkZWc3aWVtMDZqcTlpdG93M2szejh2MDZuNXo3bCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3oEjHCF6kGlXK0ofsY/giphy.gif" width="480" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Linux, you can use an inbuilt package manager like Apt in Ubuntu to download the latest version from a trusted centralised source. You can install and update it using just the command line.&lt;/p&gt;

&lt;p&gt;That’s where the Chocolatey package manager can help to give you that Linux experience on Windows with a tastier way to do things.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhzvjoihqe9mps1am4n5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhzvjoihqe9mps1am4n5l.png" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;In this guide and overview, we’ll be installing Chocolatey using Windows PowerShell on Windows 11 to start installing our first packages.&lt;/p&gt;

&lt;p&gt;We’ll be looking at&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What is Chocolatey?&lt;/li&gt;
&lt;li&gt;  Install Chocolatey using Windows PowerShell&lt;/li&gt;
&lt;li&gt;  Where and how to search for packages?&lt;/li&gt;
&lt;li&gt;  Install our first package (Google Chrome)&lt;/li&gt;
&lt;li&gt;  Upgrade our first package&lt;/li&gt;
&lt;li&gt;  Uninstall our first package&lt;/li&gt;
&lt;li&gt;  Install several packages at once (Google Chrome, Notepad++ and 7zip)&lt;/li&gt;
&lt;li&gt;  Upgrade several packages at once (Google Chrome, Notepad++ and 7zip)&lt;/li&gt;
&lt;li&gt;  Upgrade all packages installed by Chocolatey&lt;/li&gt;
&lt;li&gt;  Uninstall all packages installed by Chocolatey&lt;/li&gt;
&lt;li&gt;  Check the packages currently installed by Chocolatey&lt;/li&gt;
&lt;li&gt;  Uninstall and remove Chocolatey&lt;/li&gt;
&lt;li&gt;  What about Winget?&lt;/li&gt;
&lt;li&gt;  Chocolate for Automated Windows Virtual Machine Deployment and Configuration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is Chocolatey?
&lt;/h2&gt;

&lt;p&gt;Chocolatey is a package manager for Windows, that once installed, lets you download and install programs in just a few words using only the command line without you having to do much else.&lt;/p&gt;

&lt;p&gt;Instead of having to open a browser and go to the website to download a program like Google Chrome and going through the whole setup process manually, Chocolatey can automate this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fx0hkxh5qlhfuhfja2ec5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx0hkxh5qlhfuhfja2ec5.png" width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Programs are called packages in Chocolatey and you’ll find most programs have a package in the community repository. Some of these being maintained by the developers themselves and are verified to be the latest working versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install Chocolatey on Windows
&lt;/h2&gt;

&lt;p&gt;The install for Chocolatey is similar to the installation of any other package and is done by using a one line command in Windows PowerShell.&lt;br&gt;
&lt;a href="https://chocolatey.org/install" rel="noopener noreferrer"&gt;Chocolatey.org Install Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fh96cad7tr65q5layb9an.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fh96cad7tr65q5layb9an.png" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open Windows Powershell and “&lt;strong&gt;Run as administrator&lt;/strong&gt;”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzrrquvu1i1pd51m0cjkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzrrquvu1i1pd51m0cjkz.png" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6wwt6nuib3x8x4559et3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6wwt6nuib3x8x4559et3.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Copy the one line command for the Chocolatey installation script below
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fnc1n45iymwdfalb9siyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnc1n45iymwdfalb9siyy.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fi1pya8rpgghsav3a4ube.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fi1pya8rpgghsav3a4ube.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F328x453n9kn2jdayx6gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F328x453n9kn2jdayx6gl.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0lebpksjwttkrbuebjzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0lebpksjwttkrbuebjzf.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once it completes it will bring you back to the Powershell Command Line&lt;/li&gt;
&lt;li&gt;  Type the &lt;strong&gt;choco&lt;/strong&gt; command below to check the install is working, call the program and print the current version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftb21j8nb9gwsyqro863j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftb21j8nb9gwsyqro863j.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fm2gvce8xencaecxayzhf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fm2gvce8xencaecxayzhf.png" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you’ve now installed the Chocolatey package manager and can start managing packages using the command line on Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where and How to search for packages?
&lt;/h2&gt;

&lt;p&gt;Chocolatey is a useful tool because of the large number of packages in its repository.&lt;/p&gt;

&lt;p&gt;There is one for nearly every piece of software you can think of and you’ll usually be able to find it quite quickly.&lt;/p&gt;

&lt;p&gt;You can search for the package you need by either using the command line or if that doesn't work, by searching on their website repository in a browser.&lt;/p&gt;




&lt;h3&gt;
  
  
  Searching for packages using the command line
&lt;/h3&gt;

&lt;p&gt;We’re going to search for 7zip and we'll be using that later on in the guide&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open a Windows PowerShell terminal and “Run as administrator”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F06dsq42q95t9nt347umq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F06dsq42q95t9nt347umq.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type the below command to search the repository for 7zip&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco search 7zip&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Felbfojeluk33shppo5p7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Felbfojeluk33shppo5p7.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will bring a list of search results for the program and if you scroll back up to the top you’ll find it’s usually the first result with a version number after it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frfacqd76p7t6desj28pi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frfacqd76p7t6desj28pi.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  These will also have notes in the right hand side telling you if they are approved, broken or have been replaced by a new package.&lt;/li&gt;
&lt;li&gt;  We can scroll back up the list to see the whole list of packages.&lt;/li&gt;
&lt;li&gt;  In our case, the first hit is 7zip so that’s going to be the name of the package we would need to use with Chocolatey.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fglen0c4m0b1ktndgtaif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fglen0c4m0b1ktndgtaif.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll go over the other way to search for these when we Install our first package, Google Chrome.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install our first package (Google Chrome)
&lt;/h2&gt;

&lt;p&gt;For our first package we’re going to use is for a piece of software most people will install as part of Windows initial boot up. We’re going to install the &lt;strong&gt;Google Chrome&lt;/strong&gt; browser.&lt;/p&gt;

&lt;p&gt;We’re going to start by getting the correct package name for &lt;strong&gt;Google Chrome&lt;/strong&gt; so we can get it installed&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Let’s search for &lt;strong&gt;Google Chrome&lt;/strong&gt; in the repository using the search command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9ekt7fammhh2s7krj9wq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9ekt7fammhh2s7krj9wq.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzxlc7w842dcva7hd7rzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzxlc7w842dcva7hd7rzw.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;choco search chrome&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fl8v2htph3zi0kd6n9w5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fl8v2htph3zi0kd6n9w5j.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkvvrkzzykovtitwq6j0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkvvrkzzykovtitwq6j0f.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This brings up &lt;strong&gt;169&lt;/strong&gt; packages to choose from.&lt;/li&gt;
&lt;li&gt;  Scrolling up to the top and it doesn’t look like any of these are the correct one so instead we’ll check on the &lt;strong&gt;Community Repository&lt;/strong&gt; page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8eikfiujrvzn5zn3cf7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8eikfiujrvzn5zn3cf7v.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open a web browser and go to the &lt;strong&gt;Community Repository&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fe9zouum9ra2tbjgchc68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fe9zouum9ra2tbjgchc68.png" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If we scroll down we can see this as one of the top 5 hits on the page and it’s actually listed as &lt;strong&gt;googlechrome&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqykwsjfkudg60wfc96bl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqykwsjfkudg60wfc96bl.png" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We can find this from a search by using that name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fv7no8jme1lf19bi38qk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fv7no8jme1lf19bi38qk6.png" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click to get through to the individual project page for this application&lt;/li&gt;
&lt;li&gt;  This page will give you more information on our package for Google Chrome, the last time it was updated and the code we need to paste into our terminal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1eh56mnqcm74trtkzju6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1eh56mnqcm74trtkzju6.png" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Go back to your &lt;strong&gt;Powershell Terminal&lt;/strong&gt; to paste the command from this page&lt;/li&gt;
&lt;li&gt;  Run the below command to start the installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco install googlechrome&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvi1cl7kduco97gnnp0kg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvi1cl7kduco97gnnp0kg.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It will now start the download of &lt;strong&gt;Google Chrome&lt;/strong&gt; but will stop asking if you are sure you want to complete the installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Feb8thbcgnhl6f5trjvzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Feb8thbcgnhl6f5trjvzf.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To confirm the install and run the script you need to type &lt;strong&gt;y&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbchztrovx52gvw4vsul7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbchztrovx52gvw4vsul7.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0cmvfnughncczeef0uas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0cmvfnughncczeef0uas.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Close your &lt;strong&gt;Powershell Terminal&lt;/strong&gt; to exit or press &lt;strong&gt;Ctrl+C&lt;/strong&gt; to cancel as we're going to do something different&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Automating the Single Package install
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  As we want to automate this further then we’re going add one more thing to the choco command&lt;/li&gt;
&lt;li&gt;  Adding the &lt;strong&gt;-y&lt;/strong&gt; switch to the end will say y automatically to as many of the prompts as it can for you&lt;/li&gt;
&lt;li&gt;  Open a new Powershell window as Administrator so we can try this again&lt;/li&gt;
&lt;li&gt;  Type in the below command and Press Enter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco install googlechrome -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F29fdmmzz1kqtwl7gn7y7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F29fdmmzz1kqtwl7gn7y7.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqt1ihjh1m4j1zhuu5ump.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqt1ihjh1m4j1zhuu5ump.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Time to grab a cup of coffee while Chocolatey does it’s thing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2h7xtecmw21akz4vfavf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2h7xtecmw21akz4vfavf.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvae637nthfd6zn9are2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvae637nthfd6zn9are2a.png" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Once it's finished the install script you can go ahead and find that we've automatically got a Desktop Shortcut to Google Chrome added&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0nkuu6lr7xw96p0cgm60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0nkuu6lr7xw96p0cgm60.png" width="540" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It's all been added to our Start Menu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1an6algo9rpfqndon849.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1an6algo9rpfqndon849.png" width="789" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Opening it up for the first time we're greeted with the normal first time run for &lt;strong&gt;Google Chrome&lt;/strong&gt; with no noticeable or functional difference to a regular install.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fv9852mite0i6mt1iv58g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fv9852mite0i6mt1iv58g.png" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you’ve now installed your first package using Chocolatey. Next up, even though we’ve just installed it let’s look at how to upgrade it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrade our first package
&lt;/h2&gt;

&lt;p&gt;In most cases you won’t have to upgrade any of your packages manually using Chocolatey as they will tend to update as normal in most cases when you open them up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To upgrade Google Chrome manually using Chocolatey we can use the below command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco upgrade googlechrome&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Add the &lt;strong&gt;-y&lt;/strong&gt; switch to automate this further&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco upgrade googlechrome -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fq9cu48rowig165kzpp0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq9cu48rowig165kzpp0r.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkl5ghlymc0o3egaxyncw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkl5ghlymc0o3egaxyncw.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2bnhary1q27k1uarardi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2bnhary1q27k1uarardi.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will download the latest version from the Community Repository and upgrade the program if there’s one available.&lt;/p&gt;

&lt;p&gt;I would suggest that you close up the program when you do this or it may fail when you try.&lt;/p&gt;




&lt;h2&gt;
  
  
  Uninstall our first package
&lt;/h2&gt;

&lt;p&gt;Just like installing programs, uninstalling programs can be quite the long process on Windows and here Chocolatey can automate the process for you again.&lt;/p&gt;

&lt;p&gt;We're going to Uninstall Google Chrome from this machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To uninstall Google Chrome using Chocolatey we can use the below command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco uninstall googlechrome -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnxtds20b90zh3lm4v5hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnxtds20b90zh3lm4v5hk.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will uninstall the package in most cases without you having to do anything else.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzrj455voyrjlm6xwu5nd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzrj455voyrjlm6xwu5nd.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1uwfdwuoreubgn5q40qp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1uwfdwuoreubgn5q40qp.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp36igknln0c22qw8i1ge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp36igknln0c22qw8i1ge.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fn8e199enw48h7dp9cp0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fn8e199enw48h7dp9cp0d.png" width="493" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzxy62t3k1ok077gl7pvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzxy62t3k1ok077gl7pvj.png" width="692" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is a chance with some applications that the uninstall from here won't fully remove the files. For example, there still be there may be a Programs File Folder with your user data. If this happens you’ll be prompted to use the actual program's uninstall program. You may have to then manually delete those folders if needed for a full clean uninstallation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Congratulations, we’ve now covered the basics of Chocolatey and you’ve managed one package but it’s time to start managing multiple packages at once.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install several packages at once (Google Chrome, Notepad++ and 7zip)
&lt;/h2&gt;

&lt;p&gt;Installing one program at a time, using choco commands is quite useful but we can use those same commands to manage more than just one package.&lt;/p&gt;

&lt;p&gt;We’ll be installing Google Chrome, Notepad++ and 7zip all in one go using just one line of code.&lt;/p&gt;

&lt;p&gt;We’ve already seen how we can get the package names from the repository so we’re going to skip ahead to the install.&lt;/p&gt;

&lt;p&gt;We can add as many of the package names after each other to chain the install command and add the -y switch at the end of it to press y throughout the installation to make it unattended.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open up a new Windows PowerShell terminal and “Run as administrator”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhc9kw31u09uacntfcgyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhc9kw31u09uacntfcgyq.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Run the below command to start the installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco install googlechrome notepadplusplus 7zip -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgedyk5cp9n0831xfjdjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgedyk5cp9n0831xfjdjx.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdo48plm66lzr757rlqi1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdo48plm66lzr757rlqi1.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will take 5 to 10 minutes and is definitely time to go and grab a coffee as Chocolatey gets to work on the download and install of the programs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fqeeo5l46vuioxjyicyxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fqeeo5l46vuioxjyicyxg.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6vef2q7swicqs83mupcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6vef2q7swicqs83mupcu.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpdk2ejt6cuy40h7o5ips.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpdk2ejt6cuy40h7o5ips.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we take a look on our Desktop we now have the Google Chrome shortcut and in our Start Menu as we normally would.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fd3kq5rgw4w2z6rcu943u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fd3kq5rgw4w2z6rcu943u.png" width="488" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We can also see 7zip has installed with shortcuts in the Start Menu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9pgau3cg01bkx56tti5f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9pgau3cg01bkx56tti5f.png" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Google Chrome is in the Start Menu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgj18gvw06w2no30e6k1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgj18gvw06w2no30e6k1d.png" width="754" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Finally we can see that Notepad++ has also been installed as normal and can be found in the Start Menu aswell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fx12zalx2dygkvavo67mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx12zalx2dygkvavo67mo.png" width="714" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you just downloaded and installed 3 programs at once using just one line of code and Chocolatey. The best part was it did this unattended so you could do something else thanks to good old fashioned automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrade several packages at once (Google Chrome, Notepad++ and 7zip)
&lt;/h2&gt;

&lt;p&gt;When you're working with more than one package and need to upgrade just a few you can use the same principle and name the packages you want to upgrade.&lt;/p&gt;

&lt;p&gt;Use the below command to upgrade the packages we just installed only&lt;/p&gt;

&lt;p&gt;&lt;code&gt;choco upgrade googlechrome notepadplusplus 7zip -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will search out any upgrades and apply them if needed all at once.&lt;/p&gt;




&lt;h2&gt;
  
  
  Uninstall several packages at once (Google Chrome, Notepad++ and 7zip)
&lt;/h2&gt;

&lt;p&gt;Just like the Uninstall Choco command for one package you can uninstall as many packages as you want by adding the package names to the command.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please Note: You may need to input some commands when using the uninstall choco command as not all of it can be automated. In those rare cases like in this example below you’ll have to wait to see if you’re prompted and follow the instructions in the terminal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;  Open a Powershell window using "Run as Administrator"&lt;/li&gt;
&lt;li&gt;  Run the below command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;choco uninstall googlechrome notepadplusplus 7zip -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjzvljs4e0gvef8r63cjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjzvljs4e0gvef8r63cjj.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fwsaabmzkcjo1bwakykgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fwsaabmzkcjo1bwakykgb.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In this case, Notepad++ has another service called a metapackage that’s been installed to help run it.&lt;/li&gt;
&lt;li&gt;  Chocolatey will ask if we want to uninstall that Notepadplusplus.service too.&lt;/li&gt;
&lt;li&gt;  We only have 20 seconds for each answer before it fails so type &lt;strong&gt;Y&lt;/strong&gt; and Press &lt;strong&gt;Enter&lt;/strong&gt; twice to start the uninstallation of NotePad++ and continue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fibv8xb1zlmmvsmi6rpp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fibv8xb1zlmmvsmi6rpp5.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  In this example, 7zip has a metapackage as well so we'll have to type &lt;strong&gt;Y&lt;/strong&gt; and Press &lt;strong&gt;Enter&lt;/strong&gt; twice to uninstall &lt;strong&gt;7zip&lt;/strong&gt; and continue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fmstbuhkph0tpkb25e8qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fmstbuhkph0tpkb25e8qj.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fui8a76b1jp8m0oiftmya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fui8a76b1jp8m0oiftmya.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Google Chrome can be uninstalled without any further intervention so will start to uninstall it's self now&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fd2qd6cu2z5310zdsgwp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fd2qd6cu2z5310zdsgwp0.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F27dnm1objhh3yfvzvky4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F27dnm1objhh3yfvzvky4.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This should take about 5 minutes to fully complete and in this example you won't be prompted again but watch out for those packages that do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fez2pixuvnqw2bzynj5pu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fez2pixuvnqw2bzynj5pu.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdumwbvs10u8z6wkde0zq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdumwbvs10u8z6wkde0zq.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fulqblwt1j00m13hrjti8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fulqblwt1j00m13hrjti8.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F31f30146asuplh5qtfgi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F31f30146asuplh5qtfgi.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz3xhsih16ht193wj7x4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz3xhsih16ht193wj7x4f.png" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We’ve now uninstalled all of the packages and we should have a list of the main packages not the metapackages we removed&lt;/li&gt;
&lt;li&gt;  If we go to our Start Menu all of our installed programs have now been removed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F20wuge2enxy991n3frzo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F20wuge2enxy991n3frzo.png" width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Check current installed packages
&lt;/h2&gt;

&lt;p&gt;We can check the packages currently installed by Chocolatey by using the below command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;choco install&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Upgrade all packages
&lt;/h2&gt;

&lt;p&gt;Use at your own risk and make sure you're not in the middle of something important if you decide to run the below command.&lt;/p&gt;

&lt;p&gt;It'll upgrade every package you've currently got installed without any confirmation which can be useful but not the best way of doing this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;choco upgrade all -y&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Uninstall Chocolatey and All Packages
&lt;/h2&gt;

&lt;p&gt;We’ve had a lot of fun playing around with Chocolatey and installing packages from the command line but what if you want to just to go back to the way it was.&lt;/p&gt;

&lt;p&gt;Well, we can use the &lt;strong&gt;choco uninstall&lt;/strong&gt; command to remove Chocolatey and most of the software it installed for us&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Beware: Be absolutely sure you want to remove all the packages you’ve installed up till now. Once you’ve hit Enter after typing in this command you won’t be able to interrupt it without causing issues to some of the programs and your overall Windows installation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;choco uninstall all&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can use the -y switch if you are sure that you don’t want to be prompted per package. Remember that some packages will still require you to press Yes so you may want to stick around for this mass uninstall.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;choco uninstall all -y&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What about Winget?
&lt;/h2&gt;

&lt;p&gt;Winget was introduced as the package manager by Microsoft for Windows 10 upwards in 2021.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/windows/package-manager/winget/" rel="noopener noreferrer"&gt;Use the winget tool to install and manage applications&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It does what Chocolatey does but relies on the Microsoft Store for it’s repository of packages and programs.&lt;/p&gt;

&lt;p&gt;As it uses the Microsoft Store, it currently has not as many packages to choose from as Chocolatey does. This does seem to be the future plan from&lt;/p&gt;

&lt;p&gt;You’ll find that right now the package you want won’t be available using Winget but will be when using Chocolatey.&lt;/p&gt;

&lt;p&gt;It's useful in it’s current state but needs a little time to mature and for more packages to be added to the Microsoft store.&lt;/p&gt;

&lt;p&gt;When this happens, it will be a major competitor to the long standing dominance of Chocolatey in the Windows package management space.&lt;/p&gt;

&lt;p&gt;For me though Chocolatey still wins out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chocolatey for Automated Windows VM Configs
&lt;/h2&gt;

&lt;p&gt;Overall, I’m a big fan of Chocolatey and using one line to automate the installation of my most useful apps makes my life much simpler for Windows Virtual machines especially.&lt;/p&gt;

&lt;p&gt;We’re going to look at a few bigger use cases in a future guide when we look at using it as part of the automated setup and deployment of a Windows 11 Virtual Machine running on Esxi 8.0.&lt;/p&gt;

&lt;p&gt;There's a lot more inspiration that you can find in the Chocolatey subreddit too&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reddit.com/r/chocolatey/?ref=reprodev.com" rel="noopener noreferrer"&gt;https://www.reddit.com/r/chocolatey/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Congratulations for getting through this overview and guide to Chocolatey. It wasn't the shortest blog so well done for making it to the end.&lt;/p&gt;

&lt;p&gt;I hope I've given you a few ideas of what you can do with this and how it might save you a lot of time on some of the boring system admin you have to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOW5tMGs3OG5qemR1ZW45ZjZvbTQ5YTR6c3J2ZDllanB6Z2ZwbnhoNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Tyyr7XJh3NKco/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExOW5tMGs3OG5qemR1ZW45ZjZvbTQ5YTR6c3J2ZDllanB6Z2ZwbnhoNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Tyyr7XJh3NKco/giphy.gif" width="500" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>automation</category>
      <category>tutorial</category>
      <category>codenewbie</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Setting up Custom Hostname Forwarding On Your Home Network with Nginx Proxy Manager and Pi-Hole</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Sat, 17 Feb 2024 15:27:45 +0000</pubDate>
      <link>https://dev.to/reprodev/setting-up-custom-hostname-forwarding-on-your-home-network-with-nginx-proxy-manager-and-pi-hole-1im4</link>
      <guid>https://dev.to/reprodev/setting-up-custom-hostname-forwarding-on-your-home-network-with-nginx-proxy-manager-and-pi-hole-1im4</guid>
      <description>&lt;p&gt;You’ve installed some self hosted services and applications on your Pi but need any easy way to access them on your local LAN and beyond.&lt;/p&gt;

&lt;p&gt;This is where NGINX Proxy Manager comes in. When you combine this with PiHole's Local DNS feature it could make your life a whole lot easier.&lt;/p&gt;

&lt;p&gt;We're going to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Look at what Nginx Proxy Manager is&lt;/li&gt;
&lt;li&gt;  Install via Portainer or Docker Command Line&lt;/li&gt;
&lt;li&gt;  Create Persistent Mount Folders for our configs&lt;/li&gt;
&lt;li&gt;  Create our Docker Compose File using Nano Text Editor&lt;/li&gt;
&lt;li&gt;  Run and Setup Nginx Proxy Manager using Docker Compose&lt;/li&gt;
&lt;li&gt;  Setup a Custom Hostname for a local service in Nginx Proxy Manager&lt;/li&gt;
&lt;li&gt;  Add this proxy to your existing Pi-Hole Local DNS&lt;/li&gt;
&lt;li&gt;  Forward this Custom Hostname to your IP Address and Port of Choice&lt;/li&gt;
&lt;li&gt;  Test connecting to our local service using just the hostname&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What's Nginx Proxy Manager
&lt;/h3&gt;

&lt;p&gt;Nginx Proxy Manager is a GUI web based reverse proxy service that runs on a machine on your network.&lt;/p&gt;

&lt;p&gt;It forwards a hostname of your choice and all the HTTP or HTTPS traffic to an IP or Hostname with a port you define e.g. &lt;strong&gt;&lt;a href="http://whoogle.this" rel="noopener noreferrer"&gt;http://whoogle.this&lt;/a&gt;&lt;/strong&gt; would take to you to &lt;strong&gt;&lt;a href="http://192.168.0.23:5001" rel="noopener noreferrer"&gt;http://192.168.0.23:5001&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/3orieWOvx0ChPZt1G8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3orieWOvx0ChPZt1G8/giphy.gif" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can add and edit entries easily using a GUI web app and even switch these off and on as needed.&lt;/p&gt;

&lt;p&gt;There's an also option to automatically get SSLs if you set this up with LetsEncrypt automation but in this guide we'll only be using the forward proxy features.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This guide will use PiHole and it's Local DNS Feature so check out this previous guide to get that installed first if you haven't already. &lt;a href="https://reprodev.com/docker-pihole/" rel="noopener noreferrer"&gt;Get Started with Docker : Part 3 Pi Hole&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;We're going to install this using Docker Command Line but you can install this using Portainer instead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to use Portainer than go ahead and check out the guide below and search for it in the App Templates and then skip to "Nginx Proxy Manager Initial Setup"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://reprodev.com/portainer/" rel="noopener noreferrer"&gt;Get Started with Docker - Part 4: Portainer : How To Deploy Containers The Easy Way&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Where can I install this?
&lt;/h2&gt;

&lt;p&gt;In this guide we're using a Raspberry Pi running Ubuntu Server Minimal.&lt;/p&gt;

&lt;p&gt;If you need help with setting that up with Docker on your Raspberry Pi then check out the guide below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reprodev.com/raspberry-pi-docker/" rel="noopener noreferrer"&gt;Get Started with Docker - Part 2a: Raspberry Pi Install&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can run the same commands on WSL using Docker Desktop on a Windows machine if you prefer with the guide below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reprodev.com/windows-docker-desktop-wsl2/" rel="noopener noreferrer"&gt;Get Started with Docker - Part 2b: Windows 11 Install Guide&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Set up your persistent Docker Config folders
&lt;/h2&gt;

&lt;p&gt;In this guide and for most of our guides we'll be using the following folder to store all of our config files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/$yourusername/docker/Files/AppData/Config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s best that we start with a folder structure to make it easier to organise and back up the data volumes.&lt;/p&gt;

&lt;p&gt;This is the folder structure that we used in the Pi-Hole Docker tutorial but feel free to edit to your own liking.&lt;/p&gt;

&lt;p&gt;Once you've started, you can then use this structure for all your Docker config folders. You just need to add the name of the application or service as a new folder at the end.&lt;/p&gt;




&lt;h3&gt;
  
  
  Create our Nginx Proxy Manager Config folder
&lt;/h3&gt;

&lt;p&gt;First, we're going to create a folder on the Pi to mount to the docker containers you create later as volumes for your NGINX Proxy Manager configs to persist and save.&lt;/p&gt;

&lt;p&gt;If you haven't created your config folder then we can do this in a one line command in Linux.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  SSH into your Docker install&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fphaynpvlwj4dk112ukng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fphaynpvlwj4dk112ukng.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Check you are in the home folder by running &lt;strong&gt;pwd&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1obduqkg4hvn847snqe0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1obduqkg4hvn847snqe0.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Copy and paste or type the below line and press &lt;strong&gt;Enter&lt;/strong&gt; to create the folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;mkdir -p Files/AppData/Config/nginx-proxy-manager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5ifna822ft6yi7upnzee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5ifna822ft6yi7upnzee.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ficoyhsm40bvdhxx9fol9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ficoyhsm40bvdhxx9fol9.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Change into this the newly created folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;cd Files/AppData/Config/nginx-proxy-manager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9bnnxz7nr1gadungj9id.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9bnnxz7nr1gadungj9id.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F473uahamffav0xbdsb1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F473uahamffav0xbdsb1q.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You should now be in this new folder &lt;strong&gt;/home/pi/Files/AppData/Config/nginx-proxy-manager&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You can use this to store all of it's config files when you spin up or down a container without losing those setting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next up, we'll use Nano Text Editor to create our Docker Compose YML File to spin this up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Creating our Docker Compose file
&lt;/h2&gt;

&lt;p&gt;We're going to use a Docker Compose file for this deployment. Now that we're in the right folder we can create that with the below command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano docker-compose.yml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0b2gebt0is8isdd6y77g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0b2gebt0is8isdd6y77g.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F89xm4w1jyt9meox2m5ly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F89xm4w1jyt9meox2m5ly.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you can't find *&lt;strong&gt;&lt;em&gt;nano&lt;/em&gt;&lt;/strong&gt;* on your system then run *&lt;strong&gt;&lt;em&gt;sudo apt-get install nano&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;  You can then copy and paste the below code block into the terminal window to create your Docker Compose file. &lt;/li&gt;
&lt;li&gt;  I'd suggest leaving the Public ports as default but you can change the Admin Web Port if you need to.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;version: "3" services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format &amp;lt;host-port&amp;gt;:&amp;lt;container-port&amp;gt; - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port &lt;span class="c"&gt;# Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container DB_SQLITE_FILE: "/data/npm.sqlite" # Uncomment this if IPv6 is not enabled on your host DISABLE_IPV6: 'true' volumes: - /home/pi/Files/AppData/Config/nginx-proxy-manager/data:/data - /home/pi/Files/AppData/Config/nginx-proxy-manager/letsencrypt:/etc/letsencrypt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.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%2Fia5kqds4hc2tz1xlg15p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fia5kqds4hc2tz1xlg15p.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type Ctrl + X to write the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fik75yepwp08e5siua58u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fik75yepwp08e5siua58u.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Then type Y to save this file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb2a4pv6qq4vip7om8uka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb2a4pv6qq4vip7om8uka.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Press Enter to Exit out back to the command line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjdf0tz5yslzhhierslmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjdf0tz5yslzhhierslmm.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Start up Nginx Proxy Manager
&lt;/h2&gt;

&lt;p&gt;With the &lt;strong&gt;Docker Compose&lt;/strong&gt; yml file created we can spin this up using our trusty docker compose command below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F4hxjecah9wescagq16ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4hxjecah9wescagq16ju.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This will start to download the Nginx Proxy Manager image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6t7z9x8mn1unvpzdzm62.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6t7z9x8mn1unvpzdzm62.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  After a few minutes you'll be back at the terminal again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fxrkhezddlr5utyapmnch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fxrkhezddlr5utyapmnch.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjatxbm1y093emu2keg2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjatxbm1y093emu2keg2u.png" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Your new Nginx Proxy Manager Container and Docker Network has been started using the folder we created to store it's settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can now log in using a browser into the web gui to set things up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let's get started with Nginx Proxy Manager
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Login to Nginx Proxy Manager
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Open up web browser to go to the Nginx Proxy Manager login page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fchr6mywqv4fzx6xxgrl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fchr6mywqv4fzx6xxgrl8.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We can sign in using the default Admin Credentials on this first login  &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Email address: &lt;strong&gt;&lt;a href="mailto:admin@example.com"&gt;admin@example.com&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Password: &lt;strong&gt;changeme&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0ynarqak9vcm1o5glo4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0ynarqak9vcm1o5glo4a.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  First let’s change that password and the email address to our own. &lt;/li&gt;
&lt;li&gt;  When you first login if it doesn't open automatically you change these by going to the top right of the Dashboard and clicking &lt;strong&gt;Edit Details&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fm36kq7vdlw8wrtndygt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fm36kq7vdlw8wrtndygt0.png" width="296" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz5njutc5irqq2ndaoyqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz5njutc5irqq2ndaoyqx.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Let’s set up the nickname of the Administrator account to &lt;strong&gt;NPMPi4&lt;/strong&gt; and click &lt;strong&gt;Save&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flwjfb60tme5p7mrg4fw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flwjfb60tme5p7mrg4fw6.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you haven't been prompted already then click &lt;strong&gt;Change Password&lt;/strong&gt; to set up a more secure password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fg2usf08prsz8xn4ccn6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fg2usf08prsz8xn4ccn6v.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fq6rqvwpx7qgacwnl8nu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq6rqvwpx7qgacwnl8nu9.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Save&lt;/strong&gt; and then log out from the top right menu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F89wwrkgwtz8grdr8yahg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F89wwrkgwtz8grdr8yahg.png" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F2c67177dlolcs73jg8at.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F2c67177dlolcs73jg8at.png" width="348" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Log back into &lt;strong&gt;Nginx Proxy Manager&lt;/strong&gt; using the new email address and password you've set to make sure it's working&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3aupw8bpzsk8i80i7d2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3aupw8bpzsk8i80i7d2l.png" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhcpbht5meo5qczpm6t02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhcpbht5meo5qczpm6t02.png" width="800" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you've now set up an Nginx Proxy Manager instance on your network.&lt;/p&gt;

&lt;p&gt;We can to now add this as a proxy on our network using the Local Custom DNS Feature in Pi-hole.&lt;/p&gt;




&lt;h2&gt;
  
  
  Local DNS on Pi-Hole
&lt;/h2&gt;

&lt;p&gt;If you haven't already set up Pi-Hole then you can follow the below guide to use the same folder structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reprodev.com/docker-pihole/" rel="noopener noreferrer"&gt;Get Started with Docker - Part 3: Pi-Hole&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've already got an existing Pi-Hole set up on your network then you'll need to know the IP of Nginx Proxy Manager if it isn't running on the same machine.&lt;/p&gt;

&lt;p&gt;We'll be using the Pi-Hole as to forward specific requests with the domain *&lt;strong&gt;&lt;em&gt;.this&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;We can forward the address &lt;strong&gt;whoogle.this&lt;/strong&gt; to our Whoogle instance for any devices using our Pi-Hole for their DNS.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting up Local Custom DNS Records on Pi-hole
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Start by logging into your &lt;strong&gt;Pi-Hole&lt;/strong&gt; and scroll down to the &lt;strong&gt;Local DNS&lt;/strong&gt; section on the left hand menu&lt;/li&gt;
&lt;li&gt;  Click &lt;strong&gt;DNS Records&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgt9blyjy4kgv8xnfs79r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgt9blyjy4kgv8xnfs79r.png" width="322" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F6i6az8b9n075xo7o7qu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F6i6az8b9n075xo7o7qu9.png" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Enter the details for your &lt;strong&gt;A Record&lt;/strong&gt; with Domain and IP Address&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In our example these are, Domain *&lt;strong&gt;&lt;em&gt;proxy.this&lt;/em&gt;&lt;/strong&gt;* and the IP Address of *&lt;strong&gt;&lt;em&gt;Nginx Proxy Manager (192.168.0.23)&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fn2u458bi844baqi74e33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fn2u458bi844baqi74e33.png" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Make sure you click &lt;strong&gt;Add&lt;/strong&gt; to save this to the current &lt;strong&gt;Custom DNS&lt;/strong&gt; list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbay3gz9tpfls1v0hs571.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbay3gz9tpfls1v0hs571.png" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If we try to go to &lt;strong&gt;&lt;a href="http://proxy.this" rel="noopener noreferrer"&gt;http://proxy.this&lt;/a&gt;&lt;/strong&gt; now before joining the &lt;strong&gt;Pi-hole DNS&lt;/strong&gt; we'll get the below result in Google or an existing website on the internet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fzl8v9fdvory0k7yqoijx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fzl8v9fdvory0k7yqoijx.png" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This is a Windows 11 machine currently not connected to the Pi-hole and using our ISP DNS from our router.&lt;/li&gt;
&lt;li&gt;  We'll go ahead and manually change the DNS to use the Pi-hole in Network Settings under the IPv4 Settings in Windows 11&lt;/li&gt;
&lt;li&gt;  Add our Pi-hole address as the Preferred DNS under the IPv4 settings&lt;/li&gt;
&lt;li&gt;  Click Save once you've added our Pi-hole IP Address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdrk35ensnehepjvfqaw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdrk35ensnehepjvfqaw7.png" width="619" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F0w7zd09dcnap6uxhyn2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F0w7zd09dcnap6uxhyn2i.png" width="599" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you now go to &lt;strong&gt;proxy.this&lt;/strong&gt; in your browser, you'll see the Nginx Proxy Manager default welcome page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F09e9qk5tpp6g3xvk39a7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F09e9qk5tpp6g3xvk39a7.png" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We can now use &lt;a href="http://proxy.this:81" rel="noopener noreferrer"&gt;http://proxy.this:81&lt;/a&gt; to get to Nginx Proxy Manager to test and add our first forwarded service, Whoogle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhvr73e6fxfrizv7ibxyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhvr73e6fxfrizv7ibxyx.png" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Add a Proxy Host in Nginx Proxy Manager
&lt;/h2&gt;

&lt;p&gt;The major advantage in using this setup is that you can set Proxy Hosts to define the IP address and port number when you use the reverse proxies.&lt;/p&gt;

&lt;p&gt;Let's go ahead and add our first Proxy Host in Nginx Proxy Manager.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Login using your email address and password from earlier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Feuef7jwfg7abpul1rvjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Feuef7jwfg7abpul1rvjd.png" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F8xj9icbdafnv783ojqb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F8xj9icbdafnv783ojqb2.png" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once logged in you will currently have 0 Proxy Hosts set up&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open up another tab in your browser and let's go to our Whoogle instance&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember this could be anywhere on your local network but in our example it's on the same machine on the same IP address&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F06yf3cpf6mduc8n547f7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F06yf3cpf6mduc8n547f7.png" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Make a note of this IP and Port number, if you haven't already and go back to your Nginx Proxy Manager tab&lt;/li&gt;
&lt;li&gt;  Click the &lt;strong&gt;Proxy Hosts&lt;/strong&gt; button and then &lt;strong&gt;Add Proxy Host&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fdx6g4kr28a6vz55uuepz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fdx6g4kr28a6vz55uuepz.png" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Go ahead and add &lt;strong&gt;whoogle.this&lt;/strong&gt; to &lt;strong&gt;Domain Names&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Press *&lt;strong&gt;&lt;em&gt;Enter&lt;/em&gt;&lt;/strong&gt;* or click *&lt;strong&gt;&lt;em&gt;Add whoogle.this...&lt;/em&gt;&lt;/strong&gt;* to make sure this is added to the *&lt;strong&gt;&lt;em&gt;Domain Names&lt;/em&gt;&lt;/strong&gt;* for the *&lt;strong&gt;&lt;em&gt;New Proxy Host&lt;/em&gt;&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F00pxiwwf2zeu36jh1410.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F00pxiwwf2zeu36jh1410.png" width="677" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvs558sgc3xnqi40q26an.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvs558sgc3xnqi40q26an.png" width="677" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fkbmr6of653xzsjmfyvab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkbmr6of653xzsjmfyvab.png" width="677" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Add the Forward IP address for your W*&lt;em&gt;hoogle&lt;/em&gt;* instance and the Forward port number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fezlp0w9gsfwyhlj5rrly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fezlp0w9gsfwyhlj5rrly.png" width="677" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Toggle the below options and click the &lt;strong&gt;Save&lt;/strong&gt; button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fltk5y7afyuwhnke0s9oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fltk5y7afyuwhnke0s9oi.png" width="677" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftr6hrwd5absrc1u7pnf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftr6hrwd5absrc1u7pnf8.png" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  This should now be added to your list of Proxy Hosts in Nginx Proxy Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fai5mp6u9k2vbsp7zsucw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fai5mp6u9k2vbsp7zsucw.png" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now need to go and add this as a CNAME record in Pi-hole&lt;/p&gt;




&lt;h2&gt;
  
  
  Adding CNAME Record in Pi-hole
&lt;/h2&gt;

&lt;p&gt;Nginx Proxy Manager will handle the IP Address and Port number for us but we'll still use the Pi-hole Local DNS to forward the .this domain locally.&lt;/p&gt;

&lt;p&gt;Before the &lt;strong&gt;Pi-hole DNS&lt;/strong&gt; knows how to forward &lt;strong&gt;whoogle.this&lt;/strong&gt; address to Nginx Proxy Manager and in turn our &lt;strong&gt;Whoogle&lt;/strong&gt; instance for us, we need to add a &lt;strong&gt;CNAME&lt;/strong&gt; record in Pi-hole.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Log back into the &lt;strong&gt;Pi-hole&lt;/strong&gt; in a new tab in your browser if you haven't got it open already&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp5b3o9rh0eaisq91ir9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp5b3o9rh0eaisq91ir9a.png" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  On the left hand menu, under &lt;strong&gt;Local DNS&lt;/strong&gt; click the &lt;strong&gt;CNAME Records&lt;/strong&gt; option&lt;/li&gt;
&lt;li&gt;  You will now be on the Local CNAME Records page&lt;/li&gt;
&lt;li&gt;  Add the service and hostname you want to forward on the left in &lt;strong&gt;Domain&lt;/strong&gt; - &lt;strong&gt;whoogle.this&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  Add the address of Nginx Proxy Manager on the right in the &lt;strong&gt;Target Domain&lt;/strong&gt; - &lt;strong&gt;proxy.this&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fclytlhv4muu1qp8mucbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fclytlhv4muu1qp8mucbz.png" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fb6paj2c1j9s1h7zgye0p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fb6paj2c1j9s1h7zgye0p.png" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Click &lt;strong&gt;Add&lt;/strong&gt; to add this to the &lt;strong&gt;List of local CNAME records&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  You'll get a notification at the top right to let you know this has been added&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fjct1ns5xr8ympj50s4rk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fjct1ns5xr8ympj50s4rk.png" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Scroll down to check it's in the list current list on the &lt;strong&gt;Pi-hole&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpmarahb8hvrm2ujt9i6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpmarahb8hvrm2ujt9i6w.png" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing the Forward Proxy
&lt;/h2&gt;

&lt;p&gt;We can now test this new forward proxy on our Pi-hole DNS connected device&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Open up another tab in your browser and your new proxy hostname&lt;/li&gt;
&lt;li&gt;  If you're following along with the same subdomain then head to &lt;a href="http://whoogle.this" rel="noopener noreferrer"&gt;http://whoogle.this&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fnwokc672fk1m8inhev0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fnwokc672fk1m8inhev0s.png" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  We can run a quick search just to make sure that everything is working in our &lt;strong&gt;Whoogle&lt;/strong&gt; instance using this address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F1w7x124oej2j1014rxjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F1w7x124oej2j1014rxjw.png" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you’ve set up your first forward on your local DNS. You can now add other services and use them instead of having to remember all those IP addresses.&lt;/p&gt;

&lt;p&gt;This is also useful if those IP addresses ever change, as you can just change it in Nginx Proxy Manager and not have to change the hostname in any references in your overall network.&lt;/p&gt;

&lt;p&gt;Remember, these hostnames won't work when you aren't connected to your Pi-hole DNS but this can be setup to be used securely and remotely.&lt;/p&gt;

&lt;p&gt;I'll outline how this can be done in a future guide as it's a very useful feature when when you're not on your local network using Tailscale VPN.&lt;/p&gt;




&lt;p&gt;For more Docker Compose files check out &lt;strong&gt;ReproDev Recipes&lt;/strong&gt; on GitHub with Docker Compose files for you to try out yourself&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/reprodev/reprodev-recipes/tree/main?ref=reprodev.com" rel="noopener noreferrer"&gt;GitHub - reprodev/reprodev-recipes: ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Check out the guide below if you want more information on What Docker is and how to get started&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reprodev.com/get-started-with-docker-intro-to-docker/" rel="noopener noreferrer"&gt;Looking to get started with Docker? Learn about Docker Compose Files, Docker Images, Docker Engine and Docker Desktop in this guide to containers&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.&lt;/p&gt;

&lt;p&gt;If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.&lt;/p&gt;




</description>
      <category>nginx</category>
      <category>pihole</category>
      <category>docker</category>
      <category>networking</category>
    </item>
    <item>
      <title>Simplify your OpenSSL CSR Requests with PowerCSR GUI Tool</title>
      <dc:creator>Repro Dev</dc:creator>
      <pubDate>Fri, 16 Feb 2024 00:57:20 +0000</pubDate>
      <link>https://dev.to/reprodev/simplify-your-openssl-csr-requests-with-powercsr-gui-tool-148h</link>
      <guid>https://dev.to/reprodev/simplify-your-openssl-csr-requests-with-powercsr-gui-tool-148h</guid>
      <description>&lt;p&gt;Let's all take a moment to think about all those Web Servers and Services that are secured with an SSL (Secure Socket Layer) certificate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fbb9m1xu6r82v0mks11fj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fbb9m1xu6r82v0mks11fj.png" alt="Gmail SSL Bar" width="305" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That little padlock in the address bar that makes sure the traffic is trusted, encrypted and going through a HTTPS connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftr7yoy9smt6vvn1g2q83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftr7yoy9smt6vvn1g2q83.png" alt="Gmail SSL Bar Cert" width="334" height="253"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;About a year ago, I was given my first real SSL renewals from a Certificate Authority like GoDaddy to look at. Even though I was very new to the implementation, I had a rough idea of the execution.&lt;/p&gt;

&lt;p&gt;Up until now I'd only used Letsencypt Certificates with ACME servers where most it was just automated and in Linux so this was all kind of new.&lt;/p&gt;

&lt;p&gt;I learnt that most production SSL certs are bought and renewed every year after Apple stopped accepting 2 year certs a few years ago.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digicert.com/faq/public-trust-and-certificates/how-long-are-tls-ssl-certificate-validity-periods" rel="noopener noreferrer"&gt;https://www.digicert.com/faq/public-trust-and-certificates/how-long-are-tls-ssl-certificate-validity-periods&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything was going fine doing these requests while doing Windows IIS Server CSR requests inside of Windows Server but then I came up against a new challenge where there wasn't an IIS server present.&lt;/p&gt;

&lt;p&gt;I had been given a introduction and some guidance to getting OpenSSL installed on my work laptop but for some reason whenever I tried to use the same commands as my colleagues it just wouldn't work for me.&lt;/p&gt;

&lt;p&gt;I got him to do it for me this time and thought it was so rare I shouldn't have to worry about it. Then it happened again this time for a wildcard certificate and without I was under a bit of tighter deadline than I usually was.&lt;/p&gt;

&lt;p&gt;The engineer in me decided that I needed to have a solution to this issue and had by this time already removed all traces of that previous installation from my device.&lt;/p&gt;

&lt;p&gt;I span up a Windows Development 11 machine in Hyper-V with 2GB of Ram and started following the a newer guide from AdamTheAutomator for the prerequisites, again this time keeping everything installed and configured in the VM.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://adamtheautomator.com/openssl-windows-10/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fadamtheautomator.com%2Fwp-content%2Fuploads%2F2024%2F01%2FOpenSSL-on-Windows-10.jpg" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://adamtheautomator.com/openssl-windows-10/" rel="noopener noreferrer" class="c-link"&gt;
            Master OpenSSL on Windows 10: A Guide to Powerful Security
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Navigate OpenSSL on Windows 10 with ease: This guide covers from installation to certificate management using PowerShell. Enhance your security skills today!
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fadamtheautomator.com%2Fwp-content%2Fthemes%2Fadam-the-automator%2Fassets%2Fimages%2Flogos_favicons%2Ffavicon-16x16.png" width="16" height="16"&gt;
          adamtheautomator.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I finally had a good way of doing these on a machine that was available to me whenever I needed but the CSR process and private key generation were still a bit fiddly especially if I mistyped one of the details.&lt;/p&gt;

&lt;p&gt;I decided I needed to design a GUI for this as I know had all of the working lines of code for this.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing PowerCSR GUI Tool
&lt;/h2&gt;

&lt;p&gt;This GUI tool designed and running in Powershell will let you use a machine that has OpenSSL and the environmental variables set correctly to generate CSRs and Private Keys in a much easier way.&lt;/p&gt;

&lt;p&gt;I tested this out on my own machine first with some dummy certificates and information to see if they worked and they did.&lt;/p&gt;

&lt;p&gt;You will need to have your Powershell Execution Policy set to Unrestricted and let it Run Once for now.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;
        reprodev
      &lt;/a&gt; / &lt;a href="https://github.com/reprodev/PowerCSR" rel="noopener noreferrer"&gt;
        PowerCSR
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A GUI form built in Powershell to efficiently generate a CSR and Private Key file using OpenSSL for quick and easy cert generation
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;PowerCSR&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A GUI form built in Powershell to efficiently generate a CSR and Private Key file using OpenSSL for quick and easy cert generation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ko-fi.com/Z8Z6E0CY0" rel="nofollow noopener noreferrer"&gt;&lt;img height="36" src="https://camo.githubusercontent.com/2df914a0101385fd5196ed05218772a0e5f8211fd309ee00367069b730a06b7d/68747470733a2f2f63646e2e6b6f2d66692e636f6d2f63646e2f6b6f6669322e706e673f763d33" alt="Buy Me a Coffee at ko-fi.com"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use this tool to quickly do CSR requests for SSL certificates using Powershell on Windows.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Prequisites&lt;/h1&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure you first have OpenSSL installed and your environmental variables set so that you can get to open ssl from a terminal for this.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the .ps1 file in the directory that you want to generate the files.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/8764255/299128080-01f61ccd-8b81-4be4-a462-fba2b5bfa50f.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODA4MC0wMWY2MWNjZC04YjgxLTRiZTQtYTQ2Mi1mYmEyYjViZmE1MGYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZTUzMjNjYzIwOWViOGNhYzFjMWFjZWJiZTM4NDUyOWE1ZDA2OWM5YjMwNjQ5OWMyMzk2ZDM4N2QzYzdhMmYxZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.omV96dxbAXRwyL_Vj1EFoZg9SK4cVhbcvNsyFkC3-VI"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F8764255%2F299128080-01f61ccd-8b81-4be4-a462-fba2b5bfa50f.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODA4MC0wMWY2MWNjZC04YjgxLTRiZTQtYTQ2Mi1mYmEyYjViZmE1MGYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZTUzMjNjYzIwOWViOGNhYzFjMWFjZWJiZTM4NDUyOWE1ZDA2OWM5YjMwNjQ5OWMyMzk2ZDM4N2QzYzdhMmYxZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.omV96dxbAXRwyL_Vj1EFoZg9SK4cVhbcvNsyFkC3-VI" alt="01 Main Menu"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Go ahead and enter some details and a password if you want to with in built error checking to make sure that they match or leave empty for no password on the private key which can be useful for embedded devices such as firewalls.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/8764255/299128239-87985765-f898-4782-9773-6282e5091c01.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODIzOS04Nzk4NTc2NS1mODk4LTQ3ODItOTc3My02MjgyZTUwOTFjMDEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzlmNGMyYThhYjAwZTk4OGM2MTBmNWJjZDQ0MGIxYzg3ZDA2MTY3MzZjNzhkZTMyNWJhMWUxNGRkZjIzMjFkNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.k7jHHDwFrCeQWAny-Wo90WempUcAKuuEPQ03ROjwjuw"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F8764255%2F299128239-87985765-f898-4782-9773-6282e5091c01.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODIzOS04Nzk4NTc2NS1mODk4LTQ3ODItOTc3My02MjgyZTUwOTFjMDEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzlmNGMyYThhYjAwZTk4OGM2MTBmNWJjZDQ0MGIxYzg3ZDA2MTY3MzZjNzhkZTMyNWJhMWUxNGRkZjIzMjFkNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.k7jHHDwFrCeQWAny-Wo90WempUcAKuuEPQ03ROjwjuw" alt="02 Some Details"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;The CSR and Private Key will be generated and a success message if everything went well.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/8764255/299128308-c91f9633-4cb0-422f-a836-0a053a3246d0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODMwOC1jOTFmOTYzMy00Y2IwLTQyMmYtYTgzNi0wYTA1M2EzMjQ2ZDAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZDYwYWZmYWFjOTJjY2I2ZTA2MDY4OTZlMTQxZWQ0ZTU5YTJmOWM1NTA2MjA5OTllNjYwNmYyOWE4MzEzMzNmMSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.Z9cxPewQKiDePngKXS6Rd0hEuIGfeSk8TdVDUP9oqno"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F8764255%2F299128308-c91f9633-4cb0-422f-a836-0a053a3246d0.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzE1NDExMDgsIm5iZiI6MTc3MTU0MDgwOCwicGF0aCI6Ii84NzY0MjU1LzI5OTEyODMwOC1jOTFmOTYzMy00Y2IwLTQyMmYtYTgzNi0wYTA1M2EzMjQ2ZDAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDIxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAyMTlUMjI0MDA4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZDYwYWZmYWFjOTJjY2I2ZTA2MDY4OTZlMTQxZWQ0ZTU5YTJmOWM1NTA2MjA5OTllNjYwNmYyOWE4MzEzMzNmMSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.Z9cxPewQKiDePngKXS6Rd0hEuIGfeSk8TdVDUP9oqno" alt="03 Generated CSR Success"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;You'll find your files in the directory that you have run…&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/reprodev/PowerCSR" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sure you have OpenSSL installed with the correct Environmental Variables (&lt;a href="https://adamtheautomator.com/openssl-windows-10/" rel="noopener noreferrer"&gt;https://adamtheautomator.com/openssl-windows-10/&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the PS1 file to a folder of your choice on your Windows machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run with Powershell (Make sure you have your Powershell Execution Policy set to Unrestricted)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F9xiuketuaxz1ztlvjqaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F9xiuketuaxz1ztlvjqaf.png" alt="PowerCSR GUI V1 Screen 01" width="636" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter the name of the domain that you need to secure and the other details like Organization and Organizational Unit (No need to fill out every line if not needed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fyh27a55ic7l7slm6zu90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fyh27a55ic7l7slm6zu90.png" alt="PowerCSR GUI V1 Screen 02" width="636" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Generate CSR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fgj55if1ezgdtatr3ee7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fgj55if1ezgdtatr3ee7u.png" alt="PowerCSR GUI V1 Screen 03" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This generates the mycsr.csr (CSR text file) and mykey.key (Private key) in the same folder that you ran this in. Make sure that you copy these somewhere else before you generate again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fvwbg1deuf26xgfml23or.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fvwbg1deuf26xgfml23or.png" alt="PowerCSR GUI V1 Screen 04" width="141" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you want to check this file is correct before submitting to a CA then you can check this txt file by pasting in an online CSR decoder like &lt;a href="https://www.sslshopper.com/csr-decoder.html" rel="noopener noreferrer"&gt;https://www.sslshopper.com/csr-decoder.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Flofrq1hz71mfjpt0ems9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Flofrq1hz71mfjpt0ems9.png" alt="PowerCSR GUI V1 Screen 05 - SSL Shopper CSR Decoder Site" width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can then use this to request and validate the certificate for use on your services e.g. a website from the usual SSL places like GoDaddy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Optional&lt;/strong&gt;: As an added bonus you can also add a password to generated files with inbuilt error checking to make sure you can't generate one until these passwords match.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This has reduced my frustration when it comes to doing these and I can definitely suggest using it to bring down your overall SSL stress level.&lt;/p&gt;

&lt;p&gt;This first release is to makes sure that the underlying logic works and that it's actually production ready for more features to be added.&lt;/p&gt;

&lt;p&gt;I would also like to spin off exporting and combining validated certificate files to create a PFX file to be imported into IIS Servers and other devices that may need a new SSL cert.&lt;/p&gt;




&lt;p&gt;This small step into the world of SSL Certificates is definitely one that I've enjoyed.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://reprodev.com" rel="noopener noreferrer"&gt;https://reprodev.com&lt;/a&gt; for more guides, tutorials and self hosted tips.&lt;/p&gt;

&lt;p&gt;For more code examples and ongoing projects you can tap into my Github&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/reprodev" rel="noopener noreferrer"&gt;https://github.com/reprodev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>coding</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
