<?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: Yogendra Tamang</title>
    <description>The latest articles on DEV Community by Yogendra Tamang (@yogendra_tamang).</description>
    <link>https://dev.to/yogendra_tamang</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%2F276711%2Feeac6869-48e1-47f3-9331-877b9c397f82.jpg</url>
      <title>DEV Community: Yogendra Tamang</title>
      <link>https://dev.to/yogendra_tamang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yogendra_tamang"/>
    <language>en</language>
    <item>
      <title>Deploy Flask App on Kubernetes - 2</title>
      <dc:creator>Yogendra Tamang</dc:creator>
      <pubDate>Sat, 08 Aug 2020 20:48:42 +0000</pubDate>
      <link>https://dev.to/yogendra_tamang/deploy-flask-app-on-kubernetes-2-17pb</link>
      <guid>https://dev.to/yogendra_tamang/deploy-flask-app-on-kubernetes-2-17pb</guid>
      <description>&lt;p&gt;This is second part of &lt;a href="https://dev.to/yogendra_tamang/deploy-flask-app-on-kubernetes-1-39k0"&gt;this article&lt;/a&gt;, where we did following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Created Simple Flask App&lt;/li&gt;
&lt;li&gt;Built Docker Image of the App&lt;/li&gt;
&lt;li&gt;Pushed the image to DockerHub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this post, I will show you how you can deploy your app in kubernetes cluster. If you do not have access to multinode Cluster, you can install single node cluster, like &lt;a href="https://kubernetes.io/docs/setup/learning-environment/minikube/"&gt;Minikube&lt;/a&gt; or &lt;a href="https://www.docker.com/products/docker-desktop"&gt;Docker Desktop&lt;/a&gt;&lt;br&gt;
For my ubuntu 18.04 machine, I followed &lt;a href="https://ubuntu.com/kubernetes/install#single-node"&gt;this tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets first understand few resources in Kubernetes. For simplicity, I am making simple &lt;strong&gt;Book-Shop Scenario&lt;/strong&gt; here.&lt;/p&gt;

&lt;p&gt;Imagine you work in a book shop. Customers come and ask for the book. Its your job to fetch the book requested. Lets say a customer comes and asks for &lt;strong&gt;Harry Porter&lt;/strong&gt; book, you go to the fantasy novel section, find there are 3 copies, take one of them and sell it to the customer. &lt;br&gt;
Now you have 2 copies remaining. However, your shop has a rule, every book must have three copies. That means, you need bring another copy from the stock and put that along those two other books.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Pod
&lt;/h3&gt;

&lt;p&gt;In above scenario, each book is a Pod. Like the book "Harry Porter" has its own contents, pods also run their own application. Pods are instances which run actual application. &lt;/p&gt;
&lt;h3&gt;
  
  
  2. Deployment
&lt;/h3&gt;

&lt;p&gt;In above scenario, it was a rule that there must be three copies of every book. This rule controlled desired state of number of books in the shop. Like this, we have &lt;strong&gt;deployment&lt;/strong&gt; in Kubernetes which controls how many pods should be running.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Service
&lt;/h3&gt;

&lt;p&gt;There were 3 copies of "Harry Porter". You could have taken any one of them (It does not matter since they are same copies). Simply put, "Harry Porter" means any of those three books. Services are similar like this. It identifies group of pods as single unit. &lt;/p&gt;

&lt;p&gt;All resources in Kubernetes are created using yaml configurations. We usually define pod inside deployment so need two yaml files. Lets create them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;1_deployment.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yogen48/simple-flask-app&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8083&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;2.&lt;code&gt;2_service&lt;/code&gt;&lt;br&gt;
Lets create a service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-flask-app&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterIP&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9999&lt;/span&gt;
      &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8083&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now as per these yaml files, lets create resources in kubernetes&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;kubectl apply -f 1_deployment.yaml&lt;/code&gt; &lt;br&gt;
&lt;code&gt;kubectl apply -f 2_service.yaml&lt;/code&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, lets check if the there are pods, deployments and services.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;kubectl get all&lt;/code&gt; &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o-jwOmtO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0ht88s0pjqcwu42hr58o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o-jwOmtO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0ht88s0pjqcwu42hr58o.png" alt="kubectl get all"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, lets check if we got our app running or not by port forwarding the service.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;kubectl port-forard svc/simple-flask-app 8888:9999&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now lets curl&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;curl localhost:8888&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F04tvJUl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vbfiuwj0sei7jmoj0c5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F04tvJUl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vbfiuwj0sei7jmoj0c5l.png" alt="Curl output"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>kubernetes</category>
      <category>docker</category>
    </item>
    <item>
      <title>Deploy Flask App on Kubernetes - 1</title>
      <dc:creator>Yogendra Tamang</dc:creator>
      <pubDate>Mon, 03 Aug 2020 09:12:49 +0000</pubDate>
      <link>https://dev.to/yogendra_tamang/deploy-flask-app-on-kubernetes-1-39k0</link>
      <guid>https://dev.to/yogendra_tamang/deploy-flask-app-on-kubernetes-1-39k0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This is part one of two part series: &lt;br&gt;
Here, I will discuss about creating simple flask app, containerizing it and pushing it to image repository &lt;a href="https://hub.docker.com/"&gt;DockerHub&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have &lt;a href="https://docs.docker.com/get-docker/"&gt;docker installed&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Familiarity with Docker commands and Dockerfile. You can go through &lt;a href="https://towardsdatascience.com/15-docker-commands-you-should-know-970ea5203421"&gt;this blog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Create Flask APP
&lt;/h3&gt;

&lt;p&gt;Lets create &lt;code&gt;requirements.txt&lt;/code&gt; files for our app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flask==1.1.2
gunicorn==20.0.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Flask comes with one development server, but we will use production-ready server, like &lt;a href="https://gunicorn.org/"&gt;gunicorn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;src&lt;/code&gt; folder and &lt;code&gt;app.py&lt;/code&gt; file inside that. Our App will have only two endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; -- returns welcome message.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/names&lt;/code&gt; -- lists countries I visited :P
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&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="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Flask&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;country_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;'Nepal'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;'India'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;'Germany'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;'Netherlands'&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;response_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Welcome to FlaskApp"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response_dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/names'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;country_dict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;'countries'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;country_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;'total'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country_list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country_dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'0.0.0.0'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8083&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Run your app in debug mode
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;python src/app.py&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Run your app from gunicorn
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;gunicorn --chdir src app:app -w 2 -bind 0.0.0.0:8083&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Lets create &lt;code&gt;deploy.sh&lt;/code&gt;, we will execute this directly&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#! /bin/sh&lt;/span&gt;
gunicorn &lt;span class="nt"&gt;--chdir&lt;/span&gt; src app:app &lt;span class="nt"&gt;-w&lt;/span&gt; 2 &lt;span class="nt"&gt;-b&lt;/span&gt; 0.0.0.0:8083
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;(Make it executable: &lt;code&gt;chmod +x deploy.sh&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;You can browse &lt;a href="http://localhost:8083/"&gt;http://localhost:8083/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TtujSYKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yk539szsvc36upouasjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TtujSYKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yk539szsvc36upouasjg.png" alt="Output"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Building Docker Image
&lt;/h3&gt;

&lt;p&gt;Lets write &lt;code&gt;Dockerfile&lt;/code&gt; to create docker image of our app.&lt;br&gt;
Here I am going with &lt;code&gt;python-3.7-slim-buster&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This is one of light weight and recommended images to use. &lt;br&gt;
&lt;a href="https://pythonspeed.com/articles/base-image-python-docker-images/"&gt;Follow this&lt;/a&gt; if you want to learn more about other python images.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.7-slim-buster&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /app&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; [ "./deploy.sh" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now run following command to build image&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;docker build -t simple-flask-app .&lt;/code&gt;&lt;br&gt;
This will take some time depending on your network speed. Once completed you will see success message like this&lt;/p&gt;
&lt;h4&gt;
  
  
  Run your docker image
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;docker run -p 8888:8083 simple-flask-app&lt;/code&gt;&lt;br&gt;
If you browse &lt;a href="http://localhost:8888/names"&gt;http://localhost:8888/names&lt;/a&gt;, you will see following output.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BsCb0vpC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/64ze60slkaulxoexlvo1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BsCb0vpC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/64ze60slkaulxoexlvo1.png" alt="Curl Output"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now Push your image to DockerHub using following commands&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;$ docker tag simple-flask-app &amp;lt;dokcer-hub-account&amp;gt;/simple-flask-app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ docker push &amp;lt;dokcer-hub-account&amp;gt;/simple-flask-app&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are not logged in, log in first.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;$ docker login&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>docker</category>
      <category>kubernetes</category>
    </item>
  </channel>
</rss>
