<?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>Forem: Zahid Ahmed</title>
    <description>The latest articles on Forem by Zahid Ahmed (@iamzahid).</description>
    <link>https://forem.com/iamzahid</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%2F1114516%2Fc772590d-f73b-4db9-bdbf-07081fd68d35.JPG</url>
      <title>Forem: Zahid Ahmed</title>
      <link>https://forem.com/iamzahid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/iamzahid"/>
    <language>en</language>
    <item>
      <title>Lets Setup K8s Cluster</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 11 Feb 2026 17:42:45 +0000</pubDate>
      <link>https://forem.com/iamzahid/lets-setup-k8s-cluster-24nd</link>
      <guid>https://forem.com/iamzahid/lets-setup-k8s-cluster-24nd</guid>
      <description>&lt;p&gt;0) Setting Hostnames [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo hostnamectl set-hostname master.k8s.local
sudo hostnamectl set-hostname worker-one.k8s.local
&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;sudo init 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1) Update Hostfile [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo tee -a /etc/hosts &amp;lt;&amp;lt;EOF
192.168.1.10 master.k8s.local
192.168.1.11 worker-one.k8s.local
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Disabling Swap [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
&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;sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
&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;sudo swapoff -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Configure Kernel Modules [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
&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;sudo modprobe br_netfilter
sudo modprobe overlay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) Configure Kernel Parameters [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply sysctl params without reboot&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Verify settings&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
sysctl net.ipv4.ip_forward
sysctl net.bridge.bridge-nf-call-ip6tables
sysctl net.bridge.bridge-nf-call-iptables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5) Install Container Runtime [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install -y containerd
&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;sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/            SystemdCgroup = false/            SystemdCgroup = true/' /etc/containerd/config.toml
cat /etc/containerd/config.toml
&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;sudo systemctl restart containerd.service
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
sudo systemctl status containerd
sudo containerd config dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6) Install Kubernetes Management Tools [Master &amp;amp; Worker Nodes]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
&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;sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable kubelet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7) Initialization Kubernetes Cluster [Master Node Only]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo kubeadm init \
  --apiserver-advertise-address=192.168.10.2 \
  --pod-network-cidr=192.168.0.0/16 \
  --service-cidr=10.30.0.0/16 \
  --control-plane-endpoint=master.k8s.local:6443 \
  --upload-certs \
  --cri-socket /run/containerd/containerd.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8) Install Cilium Within Kubernetes Cluster [Master Node Only]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
cilium version
cilium install --version 1.16.2
kubectl get pod -n kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9) Check Cluster Status [Master Node Only]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl cluster-info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10) Scheduling Pods On Master [Master Node Only]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl taint nodes --all node-role.kubernetes.io/master-
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>kubernetes</category>
      <category>cluster</category>
      <category>infrastructure</category>
      <category>linux</category>
    </item>
    <item>
      <title>VM Stress Test Steps</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Fri, 23 Jan 2026 19:41:29 +0000</pubDate>
      <link>https://forem.com/iamzahid/vm-stress-test-steps-20pa</link>
      <guid>https://forem.com/iamzahid/vm-stress-test-steps-20pa</guid>
      <description>&lt;h1&gt;
  
  
  Production Stress Test Documentation
&lt;/h1&gt;

&lt;p&gt;This guide provides instructions for installing and running stress tests on AlmaLinux/Rocky Linux and Ubuntu systems using &lt;code&gt;stress-ng&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install Stress Tools On Alma/Rocky Linux
&lt;/h2&gt;

&lt;p&gt;Run the following commands to install the necessary tools:&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;dnf &lt;span class="nb"&gt;install &lt;/span&gt;epel-release &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;stress-ng &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;tmux &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Run a Stress Test (20 Hours)
&lt;/h2&gt;

&lt;p&gt;Use the following command to run a stress test for 20 hours:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;stress-ng &lt;span class="nt"&gt;--cpu&lt;/span&gt; 0 &lt;span class="nt"&gt;--io&lt;/span&gt; 4 &lt;span class="nt"&gt;--vm&lt;/span&gt; 2 &lt;span class="nt"&gt;--vm-bytes&lt;/span&gt; 1G &lt;span class="nt"&gt;--hdd&lt;/span&gt; 1 &lt;span class="nt"&gt;--timeout&lt;/span&gt; 20h &lt;span class="nt"&gt;--metrics-brief&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 What this does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--cpu 0&lt;/code&gt;&lt;/strong&gt;: Stresses all available CPU cores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--io 4&lt;/code&gt;&lt;/strong&gt;: Starts 4 I/O workers to create heavy I/O pressure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--vm 2&lt;/code&gt;&lt;/strong&gt;: Starts 2 memory workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--vm-bytes 1G&lt;/code&gt;&lt;/strong&gt;: Allocates 1GB of RAM per vm worker (Total: 2GB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--hdd 1&lt;/code&gt;&lt;/strong&gt;: Starts 1 HDD worker (includes disk stress, safe temp files).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--timeout 20h&lt;/code&gt;&lt;/strong&gt;: Runs the test for 20 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--metrics-brief&lt;/code&gt;&lt;/strong&gt;: Outputs a clean performance summary after completion.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Install Stress Tools On Ubuntu
&lt;/h2&gt;

&lt;p&gt;Run the following command to install &lt;code&gt;stress-ng&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;stress-ng &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Run a High-Load Stress Test
&lt;/h2&gt;

&lt;p&gt;This command configures a specific high-load scenario (30 cores, 30GB RAM, 20 Hours):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;stress-ng &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cpu&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vm&lt;/span&gt; 30 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--vm-bytes&lt;/span&gt; 1G &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--io&lt;/span&gt; 8 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--hdd&lt;/span&gt; 2 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--timeout&lt;/span&gt; 20h &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--metrics-brief&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 Breakdown
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--cpu 30&lt;/code&gt;&lt;/strong&gt;: Stresses 30 CPU cores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--vm 30&lt;/code&gt;&lt;/strong&gt;: Starts 30 memory workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--vm-bytes 1G&lt;/code&gt;&lt;/strong&gt;: Allocates 1GB RAM per worker (Total: 30GB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--io 8&lt;/code&gt;&lt;/strong&gt;: Starts 8 I/O workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--hdd 2&lt;/code&gt;&lt;/strong&gt;: Starts 2 HDD workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--timeout 20h&lt;/code&gt;&lt;/strong&gt;: Runs for 20 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--metrics-brief&lt;/code&gt;&lt;/strong&gt;: Shows a brief summary of metrics.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>performance</category>
      <category>testing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Install Golang On Ubuntu</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 21 Jan 2026 18:56:52 +0000</pubDate>
      <link>https://forem.com/iamzahid/install-golang-on-ubuntu-4ddf</link>
      <guid>https://forem.com/iamzahid/install-golang-on-ubuntu-4ddf</guid>
      <description>&lt;p&gt;This guide walks through a clean, system-wide installation of Go using the official binary, following industry best practices.&lt;/p&gt;

&lt;p&gt;📂 Step 1: Download the Latest Go Binary&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://go.dev/dl/go1.25.6.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 Step 2: Install Go System-Wide&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tar -C /usr/local -xzf go1.25.6.linux-amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 Step 3: Configure Environment Variables (Global Setup)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/profile.d/go.sh
export GOROOT=/usr/local/go
export GOPATH=/opt/go
export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin
EOF
&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;chmod +x /etc/profile.d/go.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 Step 4: Create GOPATH Directory 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 -p /opt/go/{bin,src,pkg}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 Step 5: Reload Environment Variables&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source /etc/profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 Step 6: Verify the Installation&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Happy coding with Go 🚀&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>devops</category>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Setting Up a Kubernetes With CRIO (I)</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Sun, 29 Dec 2024 05:39:01 +0000</pubDate>
      <link>https://forem.com/iamzahid/setting-up-a-kubernetes-with-crio-3f3h</link>
      <guid>https://forem.com/iamzahid/setting-up-a-kubernetes-with-crio-3f3h</guid>
      <description>&lt;h2&gt;
  
  
  1. Setting Hostnames (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo hostnamectl set-hostname "master-one.k8s.local"
&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;sudo init 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Update Hostfile
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/hosts
#Add the following list in the end of line
172.16.1.100 master-one.k8s.local
172.16.1.101 worker-one.k8s.local
172.16.1.102 worker-two.k8s.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Disabling Swap (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
&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;sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
&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;sudo swapoff -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Configure Modules (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
&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;sudo modprobe br_netfilter
sudo modprobe overlay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Configure Networking (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
&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;sudo sysctl --system
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Install Kubernetes Management Tools (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
&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;sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable kubelet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Install Container runtime (Master &amp;amp; Worker Nodes)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CRIO_VERSION=v1.31

mkdir -p /etc/apt/keyrings/

apt-get update
apt-get install -y software-properties-common curl
curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/Release.key | \
    gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/stable:/$CRIO_VERSION/deb/ /" | \
    tee /etc/apt/sources.list.d/cri-o.list

apt-get update
apt-get install -y cri-o
systemctl start crio.service
sudo systemctl status crio
sudo systemctl daemon-reload
sudo systemctl enable crio --now
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Initialization Kubernetes Cluster (Master Node Only)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo kubeadm init \
  --pod-network-cidr=10.10.0.0/16 \
  --upload-certs \
  --control-plane-endpoint=master-one.k8s.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Install Cilium Within Kubernetes Cluster (Master Node Only)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
cilium version
cilium install --version 1.16.2
kubectl get pod -n kube-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Check Cluster Status (Master Node Only)
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl cluster-info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Apache Kafka with Docker</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 25 Dec 2024 20:10:51 +0000</pubDate>
      <link>https://forem.com/iamzahid/apache-kafka-with-docker-1din</link>
      <guid>https://forem.com/iamzahid/apache-kafka-with-docker-1din</guid>
      <description>&lt;p&gt;Apache Kafka, a robust distributed streaming platform, is essential for building dynamic data pipelines and real-time applications. Pairing it with Docker makes setting up Kafka seamless, empowering developers to explore and innovate effortlessly. In this guide, we’ll dive into the step-by-step process of running Apache Kafka with Docker&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://github.com/zahido/Docker.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This docker-compose.yml file contains kafka, zookeeper &amp;amp; GUI redpanda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spin Docker Compose
&lt;/h2&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;
  
  
  Verify Container is Running
&lt;/h2&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;h2&gt;
  
  
  Create Topic
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -it &amp;lt;kafka-container-id&amp;gt; /opt/kafka/bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic my-topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace  with the actual container ID of the Kafka container (you can find it using docker ps).&lt;/p&gt;

&lt;h2&gt;
  
  
  Produce &amp;amp; Consume Messages
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -it &amp;lt;kafka-container-id&amp;gt; /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace  with the actual container ID of the Kafka container.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You’ve successfully set up and run Apache Kafka on Docker       well done! This guide offers you a straightforward yet effective way to experiment with Kafka. 🚀&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>kafka</category>
    </item>
    <item>
      <title>Docker Architecture In Easy Mode</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Fri, 19 Apr 2024 18:52:51 +0000</pubDate>
      <link>https://forem.com/iamzahid/docker-architecture-in-easy-mode-a78</link>
      <guid>https://forem.com/iamzahid/docker-architecture-in-easy-mode-a78</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;- Explore the intricate design and comprehensive operational mechanics of Docker&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh0nev9gjsx06f9mgtge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh0nev9gjsx06f9mgtge.png" alt="Docker" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we execute command using the &lt;strong&gt;&lt;em&gt;Docker CLI&lt;/em&gt;&lt;/strong&gt; to create a container, the docker client converts the command into a &lt;strong&gt;&lt;em&gt;RESTful API&lt;/em&gt;&lt;/strong&gt;, which is then passed to the &lt;strong&gt;&lt;em&gt;Docker Daemon&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Docker Daemon&lt;/em&gt;&lt;/strong&gt; on receiving the instruction, first checks if the image provided is already available on the local system. If it is not, the image is downloaded from the docker registry, and once the image is downloaded&lt;/p&gt;

&lt;p&gt;It makes a call to the &lt;strong&gt;&lt;em&gt;containerd&lt;/em&gt;&lt;/strong&gt; to start the container. &lt;strong&gt;&lt;em&gt;containerd&lt;/em&gt;&lt;/strong&gt; is responsible for converting the image that was downloaded into an OCl compliance bundle.&lt;/p&gt;

&lt;p&gt;It then passes the bundle to &lt;strong&gt;&lt;em&gt;containerd-shim&lt;/em&gt;&lt;/strong&gt;, which in turn calls the &lt;strong&gt;&lt;em&gt;runC&lt;/em&gt;&lt;/strong&gt; to start container and interacts with the namespaces and groups.&lt;/p&gt;

&lt;p&gt;while &lt;strong&gt;&lt;em&gt;runC&lt;/em&gt;&lt;/strong&gt; utilizes &lt;strong&gt;&lt;em&gt;libcontainer&lt;/em&gt;&lt;/strong&gt; under the hood to interact with the Linux kernel and manage containers&lt;/p&gt;

&lt;p&gt;That's how a container gets created.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>architecture</category>
      <category>article</category>
    </item>
    <item>
      <title>Docker Management Tools That's Save Time &amp; Effort</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Sun, 04 Feb 2024 16:59:32 +0000</pubDate>
      <link>https://forem.com/iamzahid/docker-management-tools-thats-save-time-effort-45pd</link>
      <guid>https://forem.com/iamzahid/docker-management-tools-thats-save-time-effort-45pd</guid>
      <description>&lt;p&gt;&lt;em&gt;LazyDocker is a simple command line interface (CLI) tool that simplifies the management of Docker. LazyDocker allows you to execute regular Docker actions like initiating, halting, restarting, and eliminating containers using just one instruction. LazyDocker also simplifies the process of checking logs, removing containers and images that are not being used, and customize metrics.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bootup In Docker:&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 -it -v \
/var/run/docker.sock:/var/run/docker.sock \
-v /yourpath:/.config/jesseduffield/lazydocker \
lazyteam/lazydocker

Don't forget to change /yourpath to an actual path you created to store lazydocker's config

$ lazydocker [ launch lazy ]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;## Don’t Like To Be Lazy Try This One:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CTOP gives a brief and compressed summary of up-to-date measurements for multiple containers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debian/Ubuntu Installations:&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;sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL https://azlux.fr/repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/azlux-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian \
  $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azlux.list &amp;gt;/dev/null
sudo apt-get update
sudo apt-get install docker-ctop
&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;$ ctop [ launch command  ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;If you’re looking for a way to save time and effort managing Docker these tools's for you.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>docker</category>
      <category>monitoring</category>
      <category>management</category>
    </item>
    <item>
      <title>Nushell: Get Fun With Terminal</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 10 Jan 2024 14:56:42 +0000</pubDate>
      <link>https://forem.com/iamzahid/nushell-get-fun-with-terminal-26d6</link>
      <guid>https://forem.com/iamzahid/nushell-get-fun-with-terminal-26d6</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzqh0m0z3xbf04k3vano.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzqh0m0z3xbf04k3vano.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dive into a cutting-edge rust-powered shell that turns your terminal journey into a vibrant blend of excitement and unparalleled productivity!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;Install On Ubuntu&lt;/em&gt;
&lt;/h2&gt;

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

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ sudo apt install build-essential
$ sudo apt install pkg-config libssl-dev
$ cargo install nu


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;Start Nushell&lt;/em&gt;
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ nu 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;Nushell Commands&lt;/em&gt;
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ ls | where type == "dir"
$ ls | where type == "file" 
$ ls | sort-by modified 
$ ls | sort-by modified | reverse
$ ps {Information about currently running processes}
$ sys {Displays information about the system}
$ sys | get host | table
$ open composer.json 
$ ls **/composer.json
$ open client.db | schema | get tables. variables {Check sqlite schema}
$ http get "https://github.com/tauseedzaman/Zshop/blob/main/composer.json" {perform an HTTP GET request to fetch the content}
$ docker ps --format="{{ json . }}" | lines | each { from json } | transpose
$ docker ps --format="{{ json . }}" | lines | each { from json }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>terminal</category>
      <category>nush</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Deploying a Next.js App On AWS EC2 Guide</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Tue, 21 Nov 2023 10:06:34 +0000</pubDate>
      <link>https://forem.com/iamzahid/deploying-a-nextjs-app-on-aws-ec2-guide-1b01</link>
      <guid>https://forem.com/iamzahid/deploying-a-nextjs-app-on-aws-ec2-guide-1b01</guid>
      <description>&lt;p&gt;Before diving into the deployment process, let’s highlight some key benefits of hosting your Next.js app on the AWS cloud:&lt;/p&gt;

&lt;p&gt;1) Scalability: AWS provides the flexibility to scale your EC2 instances based on demand. This means your Next.js app can handle traffic spikes without compromising performance.&lt;/p&gt;

&lt;p&gt;2) Reliability: AWS offers a highly reliable infrastructure with a Service Level Agreement (SLA) that ensures your application is available and operational when your users need it.&lt;/p&gt;

&lt;p&gt;3) Global Reach: Deploying on AWS allows you to choose data centers around the world, reducing latency and providing a faster experience for users across different geographical locations.&lt;/p&gt;

&lt;p&gt;4) Security: AWS provides robust security measures, including firewalls, encryption, and identity management, ensuring that your Next.js app and user data are well-protected.&lt;/p&gt;

&lt;p&gt;5) Cost Efficiency: AWS EC2 instances offer a pay-as-you-go model, allowing you to control costs by selecting the appropriate instance type and scaling resources as needed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;u&gt;Step-by-Step Deploying Next.js App On AWS EC2&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;$ Step 1: Sign in to your AWS Management Console&lt;/p&gt;

&lt;p&gt;$ Step 2: Launch an EC2 Instance&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;em&gt;&lt;code&gt;Choose an Instance Type. You can select the type of machine, number of vCPUs, and memory that is required.&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;&lt;code&gt;Create a new SSH Key Pair&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;&lt;code&gt;Now under Network Settings, Choose the default VPC with Auto-assign public IP in enable mode. I will select an existing security group and will make sure under the Inbound rules of my Devops-SG, HTTP, and HTTPS ports are open. Click on Save rules to proceed.&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;&lt;code&gt;Modify rest of the settings as per your need and click on Launch Instance&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;em&gt;&lt;code&gt;On the next screen you can see a success message after the successful creation of the EC2 instance, click on Connect to instance button. Instance wizard will open, go to SSH client tab and copy the provided chmod and SSH command.&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;$ Step 3: Install Dependencies&lt;/p&gt;

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

# sudo apt update
# curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
# sudo apt-get install -y nodejs
# node -v
# sudo npm install -g npm@latest
# npm -v
# git clone https://github.com/zahido/nextjs-apps.git
# cd nextjs-apps/
# npm install
# npm run build


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;$ Step 4: Install PM2&lt;/p&gt;

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

# sudo npm install pm2 -g


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;$ Step 5: Run Next.js via PM2&lt;/p&gt;

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

# pm2 start npm --name nextjs-apps -- run start -- -p 3000
# pm2 list nextjs-apps
# pm2 stop nextjs-apps
# pm2 start nextjs-apps
# pm2 restart nextjs-apps
# pm2 delete nextjs-apps


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;&lt;em&gt;&amp;gt; Enter the EC2 Instance’s public IP along with port number 3000 in a web browser.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Conclusion&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;This post has demonstrated the deployment of a Next.js App on AWS EC2 instance. "Together, let's embark on a voyage into the dynamic universe of DevOps, uncovering exhilarating insights. Your active participation is truly valued on this exploration."&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>AWS Deploy Single Node Kubernetes Cluster</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 20 Sep 2023 16:07:30 +0000</pubDate>
      <link>https://forem.com/iamzahid/deploy-single-node-kubernetes-cluster-5193</link>
      <guid>https://forem.com/iamzahid/deploy-single-node-kubernetes-cluster-5193</guid>
      <description>&lt;p&gt;Instead of a full-blown Kubernetes cluster, the single node instances are best for both development and testing. Let's go with lightweight Kubernetes managed by Canonical, Microk8s.&lt;/p&gt;

&lt;p&gt;MicroK8s is the easiest and fastest way to get Kubernetes up and running. Experiment with the latest upstream features and toggle services on and off. Seamlessly move your work from dev to production. 😎✌🏻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Install MicroK8s on Ubuntu Server&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Install MicroK8s:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo snap install microk8s --classic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Check Status:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ microk8s status --wait-ready
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Add Your Current User To MicroK8s Group:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo usermod -a -G microk8s $USER
$ sudo mkdir ~/.kube &amp;amp;&amp;amp; sudo chown -R $USER ~/.kube
$ sudo newgrp microk8s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Enable Services That You Will Need:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ microk8s enable dns
$ microk8s enable dashboard
$ microk8s enable storage
$ microk8s enable ingress
$ microk8s enable gpu
$ microk8s enable istio
$ microk8s enable registry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;To Disable Any Of These Services Later:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ microk8s disable dns 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Check the Status Of Kubernetes Services:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ microk8s kubectl get all --all-namespaces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;To login web-based dashboard generate a token with the following commands, and then paste it into login prompt:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
$ microk8s kubectl -n kube-system describe secret $token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Get Rid Of Microk8s &amp;amp; Use Kubectl:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ alias kubectl="microk8s kubectl"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Lookup Pod &amp;amp; Node Details:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ kubectl get nodes
$ kubectl get pods -o wide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Start &amp;amp; Stop MicroK8s Service:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ microk8s start
$ microk8s stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Uninstall MicroK8s&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo snap remove microk8s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>container</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Mastering In Production-Grade Docker Compose File</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 23 Aug 2023 19:57:49 +0000</pubDate>
      <link>https://forem.com/iamzahid/mastering-in-production-grade-docker-compose-file-41gm</link>
      <guid>https://forem.com/iamzahid/mastering-in-production-grade-docker-compose-file-41gm</guid>
      <description>&lt;p&gt;As applications evolve and embrace microservices architecture, orchestrating containers in a production environment becomes critical. Docker Compose, a powerful tool for defining multi-container applications, can play a pivotal role in streamlining deployments. I'll guide you through the best practices for crafting a robust and scalable 'docker-compose.yml' file tailored for a production environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Version with Care
&lt;/h2&gt;

&lt;p&gt;Specify the appropriate Docker Compose version in your file. However, stick to a version that is well-tested and supported in your production environment to avoid compatibility issues.&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'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Separate Configuration Files
&lt;/h2&gt;

&lt;p&gt;Divide your docker-compose.yml into multiple configuration files. This promotes modularity and allows for easier management of complex deployments.&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.yml
version: '3.8'
services:
  web:

docker-compose.prod.yml
version: '3.8'
services:
  database:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Tuned Resource Allocation
&lt;/h2&gt;

&lt;p&gt;Allocate resources thoughtfully based on your application's requirements. Properly configure CPU and memory limits to prevent resource contention and ensure consistent performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  web:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: '512M'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Use Named Volumes
&lt;/h2&gt;

&lt;p&gt;Employ named volumes to ensure persistent storage across container restarts and updates. This is crucial for databases and data that need to survive container changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  database:
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Security First
&lt;/h2&gt;

&lt;p&gt;Implement security best practices by avoiding hardcoding sensitive information. Utilize environment variables, Docker secrets, or external configuration files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  web:
    environment:
      - DATABASE_URL=${DATABASE_URL}
    secrets:
      - db_password

secrets:
  db_password:
    file: ./db_password.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Horizontal Scaling
&lt;/h2&gt;

&lt;p&gt;Design your services with scalability in mind. Leverage Docker Compose's scale feature to easily replicate services when required.&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 --scale web=3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Service Discovery and Load Balancing
Implement a service discovery mechanism and load balancing to ensure high availability and distribute traffic efficiently.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  web:
    networks:
      - frontend
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s
        order: start-first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Healthchecks for Reliability
&lt;/h2&gt;

&lt;p&gt;Incorporate healthchecks to verify service health and aid in automated recovery. This helps ensure the availability of your application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  web:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Logging and Monitoring
&lt;/h2&gt;

&lt;p&gt;Integrate a centralized logging and monitoring solution to gather insights into your application's behavior and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Regular Backups
&lt;/h2&gt;

&lt;p&gt;Implement a backup strategy for data stored within your containers, especially databases. Schedule periodic backups to prevent data loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Automated Deployment
&lt;/h2&gt;

&lt;p&gt;Use continuous integration and continuous deployment (CI/CD) pipelines to automate the deployment process, ensuring consistency and minimizing human error.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Regular Testing
&lt;/h2&gt;

&lt;p&gt;Test your docker-compose.yml file and associated configurations in a staging environment that closely resembles the production setup to catch issues before they impact users.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Conclusion&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;A production-grade 'docker-compose.yml' file plays a pivotal role in ensuring the stability, scalability, and security of your containerized applications. By adhering to these best practices, you'll be well-equipped to manage the intricacies of deploying and maintaining multi-container applications in a production environment. &lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>webdev</category>
      <category>yml</category>
    </item>
    <item>
      <title>Best Practices for Writing a Dockerfile</title>
      <dc:creator>Zahid Ahmed</dc:creator>
      <pubDate>Wed, 23 Aug 2023 19:37:40 +0000</pubDate>
      <link>https://forem.com/iamzahid/best-practices-for-writing-a-dockerfile-3f82</link>
      <guid>https://forem.com/iamzahid/best-practices-for-writing-a-dockerfile-3f82</guid>
      <description>&lt;p&gt;Since I have been working with Docker for a long time, I decided to share some of my experience with you on best practices to develop better Containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with a Minimal Base Image
&lt;/h2&gt;

&lt;p&gt;Choosing the right base image is crucial. Opt for a minimal image such as Alpine Linux or Debian slim. This reduces the attack surface and minimizes the container size, leading to faster image builds, downloads, and deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Update and Upgrade Packages
&lt;/h2&gt;

&lt;p&gt;Always run package updates and upgrades in your Dockerfile. This ensures that your container starts with the latest security patches and software updates, reducing vulnerabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use a Clear Directory Structure
&lt;/h2&gt;

&lt;p&gt;Organize your project files within the container using a clear directory structure. This aids in readability and maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Copy Only What You Need
&lt;/h2&gt;

&lt;p&gt;Minimize the data you copy into the image. Use .dockerignore to exclude unnecessary files from being copied, reducing the image size and build time.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Combine RUN Commands
&lt;/h2&gt;

&lt;p&gt;Combine multiple RUN commands into a single command using logical operators (&amp;amp;&amp;amp;). This reduces the number of image layers, resulting in a smaller image.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use Multi-Stage Builds
&lt;/h2&gt;

&lt;p&gt;Utilize multi-stage builds to create intermediate build images and extract only necessary artifacts into the final image. This helps maintain a small final image size.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Set Environment Variables
&lt;/h2&gt;

&lt;p&gt;Use ENV to set environment variables that configure your application's behavior. This makes your Dockerfile more configurable and adaptable across different environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Keep Layers In Logical Order
&lt;/h2&gt;

&lt;p&gt;Arrange commands in your Dockerfile in a way that maximizes layer reuse. Commands that change frequently (like copying application code) should come after those that change infrequently (like installing dependencies).&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Use Healthchecks
&lt;/h2&gt;

&lt;p&gt;Incorporate healthchecks to monitor the container's health and ensure that your application is running as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Secure Your Dockerfile
&lt;/h2&gt;

&lt;p&gt;Avoid exposing sensitive information like credentials directly in the Dockerfile. Use build-time variables or secrets managed by the orchestration platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Document Your Dockerfile
&lt;/h2&gt;

&lt;p&gt;Add comments explaining the purpose of each command and any assumptions you're making. This aids in collaboration and troubleshooting.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Test Your Dockerfile
&lt;/h2&gt;

&lt;p&gt;Regularly test your Dockerfile by building and running the container locally. Ensure that it behaves as expected before pushing to a repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Conclusion&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;Writing an effective Dockerfile is an art that requires attention to detail and a deep understanding of both the application and containerization concepts. By following these best practices, you'll create Dockerfiles that lead to optimized images, faster build times, improved security, and a smoother development process.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>container</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
