<?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: Marco</title>
    <description>The latest articles on DEV Community by Marco (@marco_43).</description>
    <link>https://dev.to/marco_43</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%2F1034690%2Fa04a0f20-f22c-421e-8888-3d974cb64242.jpg</url>
      <title>DEV Community: Marco</title>
      <link>https://dev.to/marco_43</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marco_43"/>
    <language>en</language>
    <item>
      <title>Measure Execution Time in Go</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Thu, 21 Mar 2024 11:05:44 +0000</pubDate>
      <link>https://dev.to/marco_43/measure-execution-time-in-go-542j</link>
      <guid>https://dev.to/marco_43/measure-execution-time-in-go-542j</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TzWIa9aV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://practicalscript.com/content/images/2024/03/devsnack_measure_time_golang.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TzWIa9aV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://practicalscript.com/content/images/2024/03/devsnack_measure_time_golang.png" alt="Measure Execution Time in Go" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have problems to figrue out how long your functions in go are running? Or just want to see how much time a query took?&lt;/p&gt;

&lt;p&gt;Me too, I swear! But fear not! I will show you how to solve this in a very compact and clean way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 At the end of this post you can find this guide on YouTube ✌️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;For all you lazy guys out there, here is the code snippet which you can use to track your execution Time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;someHeavyCalc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"done."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[%s]: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Since&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;someHeavyCalc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"someHeavyCalc"&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;
  &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Second&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Timer Function
&lt;/h2&gt;

&lt;p&gt;Our timer function will take a name as an argument, so we can see which context is printed. Next, we will grab the starting point with &lt;code&gt;time.Now()&lt;/code&gt; to get the current timestamp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="c"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At least our function will return a &lt;strong&gt;new&lt;/strong&gt; anonymous function, which will print out the time our process took. To see how this will work, just read further ;-)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[%s]: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Since&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Measure the time
&lt;/h2&gt;

&lt;p&gt;Okay, now we can use our function to track one of our functions.&lt;/p&gt;

&lt;p&gt;Just use the timer function at the beginning of one of your functions (or whereever you want to &lt;strong&gt;start&lt;/strong&gt; your measurement) like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"myFunctionName"&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can notice two little things here&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;after we have done our regular function call, we attach another pair of bracelets &lt;code&gt;()&lt;/code&gt; to call &lt;strong&gt;the returned anonymous function&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;we use the &lt;code&gt;defer&lt;/code&gt; keyword in front, to &lt;em&gt;delay&lt;/em&gt; the call of our anonymous function at the end of the parent function&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With &lt;code&gt;defer&lt;/code&gt; go will schedule the given function at the end of the wrapping function, and will execute them after go have reached the last line of the parent. That means, that the &lt;code&gt;fmt.Printf(...)&lt;/code&gt; will be executed &lt;strong&gt;after&lt;/strong&gt; everything is finished and can print out the correct timespan.&lt;/p&gt;

&lt;p&gt;Easy, isn't it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch this Guide on YouTube
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ThzXpXDJS2M"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>devsnack</category>
      <category>go</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Easy Docker Volume Backup</title>
      <dc:creator>Marco</dc:creator>
      <pubDate>Sun, 10 Mar 2024 11:33:00 +0000</pubDate>
      <link>https://dev.to/marco_43/easy-docker-volume-backup-11a5</link>
      <guid>https://dev.to/marco_43/easy-docker-volume-backup-11a5</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kKZBQbNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://practicalscript.com/content/images/2024/03/02-Easy-Docker-Volume-Backup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kKZBQbNu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://practicalscript.com/content/images/2024/03/02-Easy-Docker-Volume-Backup.png" alt="Easy Docker Volume Backup" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You ever struggle to backup your Docker Volumes from your remote server? No problem, I show you how to archieve that. In this post we use a tiny little tool named "vackup" to run our backup process, write a script to backup all volumes at once and schedule them for automation. Okay, let's get started!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 At the end of this post you can find this guide on YouTube ✌️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Install "Vackup"
&lt;/h2&gt;

&lt;p&gt;On Github you can find the Script named "vackup" from Bret Fisher (&lt;a href="https://github.com/BretFisher/docker-vackup"&gt;link&lt;/a&gt;) which makes it very easy to backup one of our volumes. Just visit the repository and follow the installation instructions (or use the command below). You can just grab the curl-command and paste it to your machine where your volumes are located at.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://raw.githubusercontent.com/BretFisher/docker-vackup/main/vackup &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/local/bin/vackup &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo chmod&lt;/span&gt; +x /usr/local/bin/vackup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 Take a closer look to the first sentence in the repository description: this script was used to create the official backup extension for Docker Desktop. So you can be sure the script works how it should.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After you install the script, give it a little test to check if everythink works fine. For that, enter &lt;code&gt;vackup&lt;/code&gt; in your terminal, and if you see a usage description, everythink is ready to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backup all Volumes
&lt;/h2&gt;

&lt;p&gt;Now we can write a little script to backup all volumes at once. Our backup script will grab the current date and attach it to our exported backup-files. And in addition, we create a folder named by the current date to give our backups a little structure.&lt;/p&gt;

&lt;p&gt;Whereever you are on your remote machine, just create a new shell file with a fancy name, for example &lt;code&gt;backup_script.sh&lt;/code&gt; and inside paste the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/home/username/backups"&lt;/span&gt;

&lt;span class="c"&gt;# create folder if it doesn't exist&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[!&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"
fi

cd &lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;

# grab all volume names
VOLUMES=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;docker volume &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; &lt;span class="s2"&gt;"{{.Name}}"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;

# loop through volumes and backup one by one
for VOLUME in &lt;/span&gt;&lt;span class="nv"&gt;$VOLUMES&lt;/span&gt;&lt;span class="s2"&gt;; do
  TIMESTAMP=(date +%Y_%m_%d)
  BACKUP_FILE="&lt;/span&gt;&lt;span class="nv"&gt;$VOLUME&lt;/span&gt;-&lt;span class="nv"&gt;$TIMESTAMP&lt;/span&gt;.tar.gz&lt;span class="s2"&gt;"

  # create folder for current date
  mkdir -p "&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;/&lt;span class="nv"&gt;$TIMESTAMP&lt;/span&gt;&lt;span class="s2"&gt;"
  cd "&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;/&lt;span class="nv"&gt;$TIMESTAMP&lt;/span&gt;&lt;span class="s2"&gt;"

  # run backup tool
  vackup export &lt;/span&gt;&lt;span class="nv"&gt;$VOLUME&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_FILE&lt;/span&gt;&lt;span class="s2"&gt;
done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test the Script
&lt;/h3&gt;

&lt;p&gt;To check if our script runs correctly, we give it a little check. Change the permission for execution with &lt;code&gt;sudo chmod +x backup_script.sh&lt;/code&gt; and run your script with &lt;code&gt;sudo ./backup_script.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The vackup utility will do the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;download the busybox image if not available&lt;/li&gt;
&lt;li&gt;spin up a new container with busybox image and the provided volume attached&lt;/li&gt;
&lt;li&gt;zip all files inside the volume and generate a tarballed archive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's it! Our volumes are now backed-up!&lt;/p&gt;

&lt;h2&gt;
  
  
  Download our backups
&lt;/h2&gt;

&lt;p&gt;A backup file on the server itself is nice, but most of the time it's better to store them externally, for example on your local hard drive. Because it's better to have a backup – of your backup, right?&lt;/p&gt;

&lt;p&gt;With one simple SCP command (wich stands for "secure copy") we download our files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp &lt;span class="nt"&gt;-r&lt;/span&gt; remote-user@&amp;lt;remote-ip-address&amp;gt;:/path/to/backup-dir/&lt;span class="k"&gt;*&lt;/span&gt; /path/to/local/destination/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't forget the little asterisk at the end of the first path to grab &lt;strong&gt;all&lt;/strong&gt; files and folders at the target path. 💡&lt;/p&gt;

&lt;h2&gt;
  
  
  Schedule automatic backups
&lt;/h2&gt;

&lt;p&gt;We are lazy dudes and so we don't want to execute our script manually everytime. For that, we use cron to run our self-written script automatically. Go to your crontab editor with &lt;code&gt;sudo crontab -e&lt;/code&gt; and paste the following line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;0 3 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; 1 /home/username/backup_script.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, our server will create backups &lt;strong&gt;every Week on Monday&lt;/strong&gt; in date-named directories. Easy as 1-2-3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: use rsync
&lt;/h2&gt;

&lt;p&gt;If you don't wanna download all files at once every time, you can use &lt;strong&gt;rsync&lt;/strong&gt; to download only the newest changes. Instead of using the SCP command just use the following rsync command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-va&lt;/span&gt; remote-user@&amp;lt;remote-ip-address&amp;gt;:/path/to/backup-dir/&lt;span class="k"&gt;*&lt;/span&gt; /path/to/local/destination/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Watch this Guide on YouTube
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/PGp3Sb77-cg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>docker</category>
      <category>backup</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
