<?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: BHARGAV THAKAR</title>
    <description>The latest articles on Forem by BHARGAV THAKAR (@tkrbhargav).</description>
    <link>https://forem.com/tkrbhargav</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%2F1424090%2F0065b244-fccb-4824-9496-f085a8ca7348.jpg</url>
      <title>Forem: BHARGAV THAKAR</title>
      <link>https://forem.com/tkrbhargav</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tkrbhargav"/>
    <language>en</language>
    <item>
      <title>Setting Up PostgreSQL with Docker: A Beginner's Guide</title>
      <dc:creator>BHARGAV THAKAR</dc:creator>
      <pubDate>Fri, 15 Nov 2024 09:01:56 +0000</pubDate>
      <link>https://forem.com/tkrbhargav/setting-up-postgresql-with-docker-a-beginners-guide-6lk</link>
      <guid>https://forem.com/tkrbhargav/setting-up-postgresql-with-docker-a-beginners-guide-6lk</guid>
      <description>&lt;p&gt;Hey there, fellow developers! 👋 Today, we're going to walk through setting up PostgreSQL using Docker. If you've been wanting to learn Docker or need a quick way to spin up a PostgreSQL database for your projects, this guide is for you!&lt;/p&gt;

&lt;h2&gt;
  
  
  What We'll Cover 🗺️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Installing Docker&lt;/li&gt;
&lt;li&gt;Setting up PostgreSQL in a container&lt;/li&gt;
&lt;li&gt;Basic PostgreSQL operations&lt;/li&gt;
&lt;li&gt;Common troubleshooting tips&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;A Linux-based system (I'm using Ubuntu)&lt;/li&gt;
&lt;li&gt;Basic command-line knowledge&lt;/li&gt;
&lt;li&gt;Terminal access&lt;/li&gt;
&lt;li&gt;Internet connection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Installing Docker 🐳
&lt;/h2&gt;

&lt;p&gt;First things first, let's get Docker installed on your system. Open your terminal and run these commands:&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 update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update your package list&lt;/li&gt;
&lt;li&gt;Install Docker&lt;/li&gt;
&lt;li&gt;Start the Docker service&lt;/li&gt;
&lt;li&gt;Enable Docker to start on boot&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To verify your installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see something like &lt;code&gt;Docker version 20.10.21&lt;/code&gt; (version numbers may vary).&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Setting Up PostgreSQL 🐘
&lt;/h2&gt;

&lt;p&gt;Now that we have Docker running, let's pull the official PostgreSQL image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify the download with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Creating Your PostgreSQL Container
&lt;/h3&gt;

&lt;p&gt;Here's where the magic happens. We'll create a new PostgreSQL container with some custom configurations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; my_postgres &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myuser &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mypassword &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_DB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mydatabase &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 5432:5432 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-d&lt;/span&gt; postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break down what each flag means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--name my_postgres&lt;/code&gt;: Names our container&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e POSTGRES_USER=myuser&lt;/code&gt;: Sets the database user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e POSTGRES_PASSWORD=mypassword&lt;/code&gt;: Sets the user password&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e POSTGRES_DB=mydatabase&lt;/code&gt;: Creates an initial database&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p 5432:5432&lt;/code&gt;: Maps the container's PostgreSQL port to our host&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-d&lt;/code&gt;: Runs the container in detached mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verify your container is running:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Working with PostgreSQL 💽
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connecting to Your Database
&lt;/h3&gt;

&lt;p&gt;To connect to your PostgreSQL instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my_postgres psql &lt;span class="nt"&gt;-U&lt;/span&gt; myuser &lt;span class="nt"&gt;-d&lt;/span&gt; mydatabase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Essential PostgreSQL Commands
&lt;/h3&gt;

&lt;p&gt;Here are some commands you'll use frequently:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all databases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CREATE DATABASE newdatabase;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\c newdatabase&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switch to a database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\dt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;\q&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exit postgres&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Changing the User Password
&lt;/h3&gt;

&lt;p&gt;If you need to change the password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my_postgres psql &lt;span class="nt"&gt;-U&lt;/span&gt; myuser &lt;span class="nt"&gt;-d&lt;/span&gt; mydatabase
ALTER USER myuser WITH PASSWORD &lt;span class="s1"&gt;'newpassword'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Cleanup 🧹
&lt;/h2&gt;

&lt;p&gt;When you're done, here's how to clean up:&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;# Stop the container&lt;/span&gt;
docker stop my_postgres

&lt;span class="c"&gt;# Remove the container&lt;/span&gt;
docker &lt;span class="nb"&gt;rm &lt;/span&gt;my_postgres

&lt;span class="c"&gt;# Remove the PostgreSQL image&lt;/span&gt;
docker rmi postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pro Tips 💡
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use Docker Volumes&lt;/strong&gt;: For data persistence, consider adding a volume:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker run &lt;span class="nt"&gt;-v&lt;/span&gt; postgres_data:/var/lib/postgresql/data ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strong Passwords&lt;/strong&gt;: In production, use strong passwords and environment variables:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker run &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$MY_SECURE_PASSWORD&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Custom Configuration&lt;/strong&gt;: You can mount custom PostgreSQL configuration files:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker run &lt;span class="nt"&gt;-v&lt;/span&gt; my_postgres.conf:/etc/postgresql/postgresql.conf ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting Common Issues 🔧
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Permission Denied?
&lt;/h3&gt;

&lt;p&gt;If you get permission errors, you might need to add your user to the docker group:&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;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to log out and back in for changes to take effect!&lt;/p&gt;

&lt;h3&gt;
  
  
  Container Won't Start?
&lt;/h3&gt;

&lt;p&gt;Check the logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs my_postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;And there you have it! You now have a PostgreSQL database running in Docker. This setup is perfect for development environments and can be easily modified for production use.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Learn about Docker Compose for multi-container applications&lt;/li&gt;
&lt;li&gt;Explore PostgreSQL backup strategies&lt;/li&gt;
&lt;li&gt;Set up a pgAdmin container for GUI database management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resources 📚
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/" rel="noopener noreferrer"&gt;Official Docker Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org/docs/" rel="noopener noreferrer"&gt;PostgreSQL Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/_/postgres" rel="noopener noreferrer"&gt;Docker Hub PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
    </item>
    <item>
      <title>Hello , Techies 👋</title>
      <dc:creator>BHARGAV THAKAR</dc:creator>
      <pubDate>Sun, 14 Apr 2024 11:38:00 +0000</pubDate>
      <link>https://forem.com/tkrbhargav/hello-techies-a7j</link>
      <guid>https://forem.com/tkrbhargav/hello-techies-a7j</guid>
      <description>&lt;p&gt;namaste 🙏, I'm  Bhargav Thakar, 22 year old , Frontend Web Developer  💻. Passionate about creating awesome web experiences. 🚀 #WebDevelopment #CodingLife&lt;/p&gt;

</description>
      <category>firstpost</category>
      <category>intro</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
