<?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: Ejibode Ibraheem</title>
    <description>The latest articles on DEV Community by Ejibode Ibraheem (@linsmed).</description>
    <link>https://dev.to/linsmed</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%2F955852%2F64b35e7d-a548-4bec-b9f5-ff021d74922d.png</url>
      <title>DEV Community: Ejibode Ibraheem</title>
      <link>https://dev.to/linsmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/linsmed"/>
    <language>en</language>
    <item>
      <title>Understanding the Lusophone Wikimedia Wishlist: Improving Contributor Experience</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Tue, 14 Apr 2026 12:43:21 +0000</pubDate>
      <link>https://dev.to/linsmed/understanding-the-lusophone-wikimedia-wishlist-improving-contributor-experience-a8j</link>
      <guid>https://dev.to/linsmed/understanding-the-lusophone-wikimedia-wishlist-improving-contributor-experience-a8j</guid>
      <description>&lt;p&gt;When I first heard of Wikimedia, the first thing that came to  my mind was Wikipedia. However,as time went by, I understood that behind the scenes, Wikimedia is a large ecosystem of tools, contributors, and communities working together to make knowledge accessible to everyone.&lt;/p&gt;

&lt;p&gt;As I began exploring Wikimedia during my Outreachy application, I discovered that a lot of effort goes into improving not just content, but also the experience of contributors—the editors, researchers, and volunteers who make Wikimedia projects possible.&lt;/p&gt;

&lt;p&gt;One initiative that really caught my attention is the Lusophone Technological Wishlist.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What is the Lusophone Technological Wishlist?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
The Lusophone Technological Wishlist is a community-driven initiative focused on identifying the most important technical needs of Portuguese-speaking Wikimedia contributors.&lt;/p&gt;

&lt;p&gt;Rather than leaders making assumptions, this wishlist is created from real feedback from the community. It highlights tools and improvements that can make editing, researching, and contributing more efficient and enjoyable.&lt;/p&gt;

&lt;p&gt;This aligns closely with Wikimedia’s broader goal of improving contributor experience, which ensures that contributors have the right tools they need to work effectively.&lt;/p&gt;

&lt;p&gt;As part of this effort, specific proposals are selected for implementation—and two of them particularly were prerequisites for Outreachy applicants that will make them eligible to be selected as interns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wishlist #3: Detecting Duplicate References in the Visual Editor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One common challenge when editing Wikipedia articles is managing references. Contributors often reuse sources, but without proper checks, they can add the same reference multiple times, leading to duplication.&lt;/p&gt;

&lt;p&gt;Wishlist #3 proposes a solution to this problem:&lt;/p&gt;

&lt;p&gt;Automatically detect duplicate references in the Visual Editor using identifiers such as DOI, ISBN, or URL, and allow users to reuse existing references instead of creating new ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does this matter?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It keeps articles cleaner and more organized&lt;/li&gt;
&lt;li&gt;It reduces redundancy in citations&lt;/li&gt;
&lt;li&gt;It improves the editing experience, especially for new contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While working on a related task involving URL validation, I began to understand how important it is to handle identifiers correctly. Even small inconsistencies in URLs or formats can lead to duplication or errors.&lt;/p&gt;

&lt;p&gt;I also encountered a situation where date handling behaved differently across time zones, which made me realize that seemingly simple data can introduce subtle issues in real-world applications. This reinforced the importance of carefully handling edge cases when building features like duplicate detection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wishlist #8: Adding Wikidata Support to WikiScore&lt;/strong&gt;&lt;br&gt;
Another interesting proposal is Wishlist #8, which focuses on improving a tool called WikiScore.&lt;/p&gt;

&lt;p&gt;WikiScore is used to track and evaluate contributions during events like edit-a-thons and contests. However, it currently has limited support for Wikidata contributions.&lt;/p&gt;

&lt;p&gt;Wishlist #8 aims to:&lt;/p&gt;

&lt;p&gt;Extend WikiScore to include Wikidata edits, allowing contributions to structured data to be properly counted and recognized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is this important?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wikidata plays a major role in structuring knowledge across Wikimedia&lt;/li&gt;
&lt;li&gt;Contributors working on Wikidata deserve visibility and recognition&lt;/li&gt;
&lt;li&gt;It encourages broader participation in different types of contributions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;My Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During my tasks, I worked with structured data and learned how important it is to process and present it correctly. Transforming raw data into meaningful output is not always straightforward, especially when consistency and accuracy are required.&lt;/p&gt;

&lt;p&gt;This gave me a better appreciation for tools like WikiScore, where contributions need to be tracked reliably and fairly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned from Exploring These Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working on tasks related to these ideas helped me understand that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small improvements can have a big impact on user experience
Real-world data often comes with inconsistencies and edge cases&lt;/li&gt;
&lt;li&gt;Writing functional code is not enough,code must also be reliable and adaptable&lt;/li&gt;
&lt;li&gt;Feedback plays a key role in improving both code quality and understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For example, through feedback, I learned to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handle time zone differences when working with dates&lt;/li&gt;
&lt;li&gt;Improve error handling to provide more meaningful output&lt;/li&gt;
&lt;li&gt;Follow best practices when making HTTP requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These lessons helped me move beyond just “making things work” to thinking more deeply about how and why things should work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What stood out to me most is how these wishlist items focus on real contributor needs.&lt;/p&gt;

&lt;p&gt;Whether it’s reducing duplicate references or recognizing Wikidata contributions, these improvements are about making it easier for people to contribute effectively.&lt;/p&gt;

&lt;p&gt;In a global, collaborative platform like Wikimedia, even small enhancements can improve workflows for thousands of contributors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Exploring the Lusophone Technological Wishlist has given me a deeper appreciation for the work that goes into supporting Wikimedia contributors.&lt;/p&gt;

&lt;p&gt;It’s not just about building features—it’s about understanding real problems, handling real-world data, and creating tools that make collaboration smoother and more effective.&lt;/p&gt;

&lt;p&gt;As I continue learning and contributing, I’m excited about the opportunity to be part of efforts that improve both the quality of information and the experience of those who help create it.&lt;/p&gt;

</description>
      <category>wikimedia</category>
      <category>outreachy</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>Fedora, Community, and the Badges Revamp: My Experience</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Mon, 30 Mar 2026 15:09:57 +0000</pubDate>
      <link>https://dev.to/linsmed/fedora-community-and-the-badges-revamp-my-experience-3p05</link>
      <guid>https://dev.to/linsmed/fedora-community-and-the-badges-revamp-my-experience-3p05</guid>
      <description>&lt;p&gt;When I first came across the Fedora Project during my initial Outreachy application for the &lt;strong&gt;December 2025 cohort&lt;/strong&gt;, I didn’t fully explore it. At the time, my focus was elsewhere—I was contributing to Debian, another Linux distribution, where I began to understand open source collaboration.&lt;/p&gt;

&lt;p&gt;Although I gained valuable experience working with Debian, Fedora remained something I had only seen from a distance. For the &lt;strong&gt;May 2026 Outreachy application&lt;/strong&gt;, however, my approach is completely different. This time, I am very much intentional about diving deeper into Fedora, committed and determined not only to contribute during the internship period but also to remain an active contributor beyond Outreachy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Fedora Project?
&lt;/h2&gt;

&lt;p&gt;The Fedora Project is a global community dedicated to building free and open source software. Its flagship product, Fedora Linux, is known for integrating the latest technologies and serving as an upstream source for many other distributions.&lt;/p&gt;

&lt;p&gt;But Fedora is more than just an operating system—it is an ecosystem where contributors(which I have become one of them(smiles)) collaborate across development, design, infrastructure, and documentation. What makes Fedora unique is how it blends innovation with community-driven values.I have more to say about Fedora, but let me just stop here for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering Fedora Through Fedora Badges
&lt;/h2&gt;

&lt;p&gt;One of the most interesting parts of Fedora that I explored is &lt;strong&gt;Fedora Badges&lt;/strong&gt;, which you can visit here:&lt;br&gt;
&lt;a href="https://badges.fedoraproject.org/" rel="noopener noreferrer"&gt;https://badges.fedoraproject.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fedora Badges is a platform that recognizes and rewards contributors (hopefully I get a lot of badges soon)for their participation in the Fedora ecosystem. Whether you are contributing code, attending events, or helping others in the community, you earn badges that reflect your journey.&lt;/p&gt;

&lt;p&gt;Exploring the live platform helped me see how Fedora celebrates contributions in real time, making the experience both engaging and motivating.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fedora Badges Revamp Project
&lt;/h2&gt;

&lt;p&gt;One of the key projects for the current Outreachy internship cycle is the &lt;strong&gt;Fedora Badges revamp project&lt;/strong&gt;, and this is where my interest is strongly focused.&lt;/p&gt;

&lt;p&gt;This effort aims to modernize the entire badges system after years of limited updates. From what I have learned, it is not just a redesign—it is a full transformation of the platform, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A modernized frontend with improved user experience&lt;/li&gt;
&lt;li&gt;A reworked backend architecture&lt;/li&gt;
&lt;li&gt;Better tools for contributors and administrators&lt;/li&gt;
&lt;li&gt;A containerized development environment using tools like Podman and Vagrant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;New features such as global search, dark mode, improved badge collections, and redesigned interfaces are being introduced.&lt;/p&gt;

&lt;p&gt;What makes this project particularly exciting is that it directly impacts how contributors are recognized within Fedora. It is a meaningful project that combines technical work with community value, and it is exactly the kind of work I am eager to contribute to during Outreachy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fedora Matters to Me as a DevOps Engineer
&lt;/h2&gt;

&lt;p&gt;As a DevOps engineer, Linux is part of my daily workflow. I interact with Linux systems constantly—running commands, managing environments, and automating processes.&lt;/p&gt;

&lt;p&gt;Fedora, being one of the major Linux distributions, is part of this larger ecosystem. While I have used Linux extensively, I realized that I have not yet explored Fedora deeply.&lt;/p&gt;

&lt;p&gt;Contributing to Fedora gives me the opportunity to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand a major Linux distribution from the inside&lt;/li&gt;
&lt;li&gt;Improve my practical knowledge beyond daily usage&lt;/li&gt;
&lt;li&gt;Connect my DevOps experience with real open source contributions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, this is not just about using Linux—it is about understanding how it is built, maintained, and improved by a community.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community Experience
&lt;/h2&gt;

&lt;p&gt;One of the most impactful parts of my journey so far has been the Fedora community itself.&lt;/p&gt;

&lt;p&gt;I have met many like-minded individuals who are always willing to help, guide, and share knowledge. The sense of openness and collaboration is something I deeply appreciate.&lt;/p&gt;

&lt;p&gt;The mentors, in particular, have been incredibly supportive. Even though we are in different time zones, they consistently make time to guide us. On my part, I have had to make adjustments—sometimes sacrificing sleep—because I do not want to miss sessions where I can learn directly from them.&lt;/p&gt;

&lt;p&gt;This experience has shown me that open source is not just about code—it is about people.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge of Getting Started
&lt;/h2&gt;

&lt;p&gt;At the moment, I am still setting up my development environment on my local machine. This process has not been entirely smooth—it has come with its own set of challenges and learning curves.&lt;/p&gt;

&lt;p&gt;However, I see this as part of the journey. Every issue I encounter is an opportunity to learn something new and grow more confident in navigating complex systems.&lt;/p&gt;

&lt;p&gt;I plan to share more about this experience in my next article, where I will write in detail about the challenges I faced during environment setup and how I was able to overcome them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Watch out for it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fedora’s Four Foundations
&lt;/h2&gt;

&lt;p&gt;As I explored further, Fedora’s Four Foundations—&lt;strong&gt;Freedom, Friends, Features, and First&lt;/strong&gt;—became clearer to me.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Freedom&lt;/strong&gt; ensures that everything is open and accessible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friends&lt;/strong&gt; highlights the importance of community and collaboration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features&lt;/strong&gt; reflects Fedora’s commitment to innovation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First&lt;/strong&gt; emphasizes being at the forefront of new technologies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Badges revamp project perfectly reflects these values, especially “Features” and “First.”&lt;/p&gt;

&lt;h2&gt;
  
  
  My Commitment This Time
&lt;/h2&gt;

&lt;p&gt;This time, I am approaching Fedora with clarity and purpose.&lt;/p&gt;

&lt;p&gt;My first encounter during the December 2025 Outreachy cycle gave me awareness, and my experience contributing to Debian gave me a foundation. Now, in the May 2026 application cycle, I am bringing both together—actively setting up the development environment, exploring real projects like the Fedora Badges revamp, and identifying where I can contribute meaningfully.&lt;/p&gt;

&lt;p&gt;More importantly, my goal is not limited to securing the internship. I am committed to contributing to Fedora &lt;strong&gt;long after Outreachy ends&lt;/strong&gt;, growing within the community and continuing to build impactful work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advice for Future Outreachy Applicants
&lt;/h2&gt;

&lt;p&gt;If you are applying to Outreachy and exploring Fedora:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start small and build gradually&lt;/li&gt;
&lt;li&gt;Don’t be discouraged by complexity&lt;/li&gt;
&lt;li&gt;Ask questions and engage with the community (I ask questions a lot from peers and mentors)&lt;/li&gt;
&lt;li&gt;Explore real projects like Fedora Badges to understand impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, stay consistent. Growth in open source comes from persistence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Fedora is more than an operating system—it is a community-driven platform where innovation and collaboration thrive.&lt;/p&gt;

&lt;p&gt;Looking back, I realize that simply “seeing” Fedora during my first Outreachy application was not enough. It takes intentional effort to truly understand and contribute to such a rich ecosystem. Now that I am fully engaging with Fedora, I feel more confident, more prepared, and more motivated than ever.&lt;/p&gt;

&lt;p&gt;This journey is no longer just about applying for Outreachy—it is about becoming a long-term contributor to Fedora. And this time, I am ready to give it my all.&lt;/p&gt;

</description>
      <category>fedora</category>
      <category>opensource</category>
      <category>linux</category>
      <category>outreachy</category>
    </item>
    <item>
      <title>Introduction to Docker: Simplifying Containerized Applications</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Sun, 02 Mar 2025 14:23:58 +0000</pubDate>
      <link>https://dev.to/linsmed/introduction-to-docker-simplifying-containerized-applications-37h9</link>
      <guid>https://dev.to/linsmed/introduction-to-docker-simplifying-containerized-applications-37h9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table Of Content&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Basic Docker commands&lt;/li&gt;
&lt;li&gt;Running  an application using Dockerfile&lt;/li&gt;
&lt;li&gt;Docker volume&lt;/li&gt;
&lt;li&gt;Docker network&lt;/li&gt;
&lt;li&gt;Docker compose file &lt;/li&gt;
&lt;li&gt;Clean UP&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prerequisite&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An AWS account&lt;/li&gt;
&lt;li&gt;A Linux system (Ubuntu 20.04 or  Amazon Linux 2 recommended )&lt;/li&gt;
&lt;li&gt;Basic knowledge of Linux commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
Docker has become an essential tool for building, shipping, and running applications seamlessly across different environments in today's fast-paced software development landscape. Whether you're a developer, DevOps engineer, or system administrator, understanding Docker can significantly enhance your ability to manage applications efficiently.&lt;/p&gt;

&lt;p&gt;This article will guide you through key Docker concepts, including:&lt;br&gt;
✅ Dockerfile – Automating image creation&lt;br&gt;
✅ Docker Network – Enabling seamless communication between containers&lt;br&gt;
✅ Docker Volume – Managing persistent data in containers&lt;br&gt;
✅ Docker Compose – Defining and running multi-container applications effortlessly&lt;/p&gt;

&lt;p&gt;Each section includes hands-on examples to help you grasp these concepts in a practical way. By the end of this article, you'll be well-equipped to leverage Docker for your containerized workflows. Let's dive in! 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: launch an EC2 instance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;click on Launch instance&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Choose your instance name and Amazon Machine Image&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select your instance type and your key pair&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Allow traffic from SSH, HTTP, HTTPS and click on launch instance&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;SSH into the server from your terminal&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2: Install Docker&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update  and upgrade your system
&lt;code&gt;sudo apt-get update -y &amp;amp;&amp;amp; sudo apt-get upgrade -y&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Install Docker:
&lt;code&gt;sudo apt-get install -y docker.io&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Enable and start docker :
&lt;code&gt;sudo systemctl enable docker &amp;amp;&amp;amp; sudo systemctl start docker&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Allow the current user to run Docker commands without sudo (optional)
&lt;code&gt;sudo usermod -aG docker $USER&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Log out and log in again for this change to take effect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Explore docker commands&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;check if docker is running
&lt;code&gt;sudo sysetmctl status docker&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Pull and run NGINX image from the docker hub
&lt;code&gt;docker pull nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Verify the downloaded image
&lt;code&gt;docker images&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Run a container using NGINX image
&lt;code&gt;docker run -d -p 8080:80 --name my-nginx nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Verify the container is running
&lt;code&gt;docker ps&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Open your browser and navigate to &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;. You should see the Nginx welcome page&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Stop the container
&lt;code&gt;docker stop my-nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Remove the container
&lt;code&gt;docker rm my-nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 4 Create a Custom Docker Image&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;create a directory &lt;br&gt;
&lt;code&gt;mkdir nginx-image &amp;amp;&amp;amp; cd nginx-image&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a Dockerfile:&lt;br&gt;
&lt;code&gt;vim Dockerfile&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the following content:&lt;/p&gt;
&lt;h1&gt;
  
  
  Use the official nginx image as the base image
&lt;/h1&gt;

&lt;p&gt;FROM nginx:latest&lt;/p&gt;
&lt;h1&gt;
  
  
  Copy a custom HTML file to the nginx document root
&lt;/h1&gt;

&lt;p&gt;COPY index.html /usr/share/nginx/html/index.html&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a custom index.html&lt;br&gt;
&lt;code&gt;vim index.html&lt;/code&gt;&lt;br&gt;
Add the following content:&lt;br&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
My Custom Nginx&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Welcome to My Custom Nginx Container!&lt;/h1&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Build the docker image &lt;br&gt;&lt;br&gt;
&lt;code&gt;docker build -t ejibode .&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Run the container using the custom image
&lt;code&gt;docker run -d -p 8081:80 --name ejibode ejibode&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Open your browser and navigate to &lt;a href="http://localhost:8081" rel="noopener noreferrer"&gt;http://localhost:8081&lt;/a&gt;. You should see your custom HTML content.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 5 Manage Volumes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a volume:
&lt;code&gt;docker volume create my-volume&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Run a container and mount the volume
&lt;code&gt;docker run -d -p 8082:80 --name my-new-nginx -v my-volume:/usr/share/nginx/html nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Access the container shell&lt;br&gt;
&lt;code&gt;docker exec -it my-new-nginx&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a custom HTML&lt;br&gt;
&lt;code&gt;echo "&amp;lt;h1&amp;gt;Persistent Volume Content&amp;lt;/h1&amp;gt;" &amp;gt; /usr/share/nginx/html/index.html&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Open your browser and navigate to &lt;a href="http://localhost:8082" rel="noopener noreferrer"&gt;http://localhost:8082&lt;/a&gt;. You should see the updated content.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Stop and remove the container:
&lt;code&gt;docker stop my-new-nginx &amp;amp;&amp;amp; docker rm my-new-nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 6: Use docker networks&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a docker network:
&lt;code&gt;docker network create my-network&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Run a container in the network:
&lt;code&gt;docker run -d --name network-nginx --network my-network nginx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Inspect the network
&lt;code&gt;docker network inspect my-network&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Remove the network
&lt;code&gt;docker network rm my-network&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 7 :Multicontainer Application Using Docker compose&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install Docker compose&lt;br&gt;
&lt;code&gt;sudo apt-get install -y docker-compose&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a docker-compose.yml file&lt;br&gt;
&lt;code&gt;vim docker-compose.yml&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;paste the following code&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;version: '3'&lt;br&gt;
services:&lt;br&gt;
  web:&lt;br&gt;
    image: nginx&lt;br&gt;
    ports:&lt;br&gt;
      - "8080:80"&lt;br&gt;
  app:&lt;br&gt;
    image: custom-nginx&lt;br&gt;
    build:&lt;br&gt;
      context: .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run the container&lt;br&gt;
&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access the application at &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Stop and remove the application
&lt;code&gt;docker-compose down&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 8 Clean up&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove all the stopped containers
&lt;code&gt;docker container prune&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Remove unused images
&lt;code&gt;docker image prune -a&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Remove unused volumes
&lt;code&gt;docker volume prune&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Mastering these concepts enables efficient containerization of applications, improves scalability and streamline deployment processes.&lt;br&gt;
Thank you for reading my article!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>docker</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Demystifying AWS VPC: A Comprehensive Guide to Networking in the Cloud</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Fri, 06 Dec 2024 19:06:55 +0000</pubDate>
      <link>https://dev.to/linsmed/demystifying-aws-vpc-a-comprehensive-guide-to-networking-in-the-cloud-3c5m</link>
      <guid>https://dev.to/linsmed/demystifying-aws-vpc-a-comprehensive-guide-to-networking-in-the-cloud-3c5m</guid>
      <description>&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;What is AWS VPC&lt;/li&gt;
&lt;li&gt;Benefits of AWS VPC&lt;/li&gt;
&lt;li&gt;How to create VPC using terraform &lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Networking serves as the foundation of any infrastructure in cloud computing. AWS Virtual Private Cloud (VPC) is a fundamental component of Amazon Web Services (AWS), providing a secure and scalable environment for deploying resources. Whether you’re a cloud enthusiast or a DevOps engineer, understanding VPC is crucial for designing robust architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AWS VPC
&lt;/h2&gt;

&lt;p&gt;AWS Virtual Private Cloud (VPC) is a isolated section of the AWS Cloud where you can you deploy your resources, such as EC2 instances, in a secure virtual network. It enables complete control over your network, including IP address range, subnets, routing, and security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Components of AWS VPC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public Subnets&lt;/strong&gt;: Subnets with internet access via an Internet Gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private Subnets&lt;/strong&gt;: Isolated for secure resources without direct internet access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Route Tables&lt;/strong&gt;&lt;br&gt;
Direct traffic within and outside the VPC using rules. For example:&lt;/p&gt;

&lt;p&gt;Public subnets use routes to an Internet Gateway.&lt;br&gt;
Private subnets route traffic through a NAT Gateway for internet access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internet Gateway (IGW) and NAT Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IGW: Facilitates internet communication for public resources.&lt;/p&gt;

&lt;p&gt;NAT Gateway: Enables outbound internet traffic for private resources.&lt;br&gt;
Security Groups (SGs)&lt;br&gt;
Act as virtual firewalls for your instances, controlling inbound and outbound traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Access Control Lists (NACLs)&lt;/strong&gt;&lt;br&gt;
Stateless firewalls that provide subnet-level traffic control.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Your First AWS VPC with Terraform
&lt;/h2&gt;

&lt;p&gt;Here’s how to create a VPC using Terraform resources:&lt;/p&gt;

&lt;p&gt;Set up Terraform: Ensure Terraform is installed on your system.&lt;br&gt;
Terraform Configuration File: Create a file named vpc.tf and include the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-east-1"
}

resource "aws_vpc" "my_vpc" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags = {
    Name = "MyVPC"
  }
}

resource "aws_subnet" "public_subnet" {
  vpc_id                  = aws_vpc.my_vpc.id
  cidr_block              = "10.0.1.0/24"
  map_public_ip_on_launch = true
  availability_zone       = "us-east-1a"
  tags = {
    Name = "PublicSubnet"
  }
}

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.my_vpc.id
  tags = {
    Name = "InternetGateway"
  }
}

resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.my_vpc.id
  tags = {
    Name = "PublicRouteTable"
  }
}

resource "aws_route" "default_route" {
  route_table_id         = aws_route_table.public_rt.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.igw.id
}

resource "aws_route_table_association" "public_association" {
  subnet_id      = aws_subnet.public_subnet.id
  route_table_id = aws_route_table.public_rt.id
}

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Deploy the Configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initialize Terraform: &lt;code&gt;terraform init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Plan the infrastructure: &lt;code&gt;terraform plan&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Apply the changes: &lt;code&gt;terraform apply -auto-approve&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you check your AWS console a VPC, public subnet, internet gateway, and routes would have been created. Do not forget to delete the resources created by running:&lt;br&gt;
&lt;code&gt;terraform destroy -auto-approve&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases for AWS VPC
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hosting Web Applications&lt;/strong&gt;: Isolate backend databases in private subnets while keeping the front end in public subnets.&lt;/p&gt;

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

&lt;p&gt;AWS VPC provides a secure, customizable foundation for deploying cloud resources. With its robust features and flexibility, it’s an essential tool for building modern, scalable network architectures.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Exploring AWS EC2 Instances: Uses and How to Create One Using Terraform</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Thu, 05 Dec 2024 22:40:50 +0000</pubDate>
      <link>https://dev.to/linsmed/exploring-aws-ec2-instances-uses-and-how-to-create-one-using-terraform-2l7o</link>
      <guid>https://dev.to/linsmed/exploring-aws-ec2-instances-uses-and-how-to-create-one-using-terraform-2l7o</guid>
      <description>&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;What is AWS EC2 instance&lt;/li&gt;
&lt;li&gt;Uses OF AWS EC2 instance&lt;/li&gt;
&lt;li&gt;Benefits of using Terraform to create EC2 instance&lt;/li&gt;
&lt;li&gt;Step-by-step guide in creating AWS EC2 instance with Terraform&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;AWS offers more than 200 services, and Amazon Elastic Cloud Compute (EC2) is one of its most widely used services. It plays a crucial role in hosting applications, managing data processing tasks, and enabling modern cloud architecture. In this article, we will explore the use of EC2 and the step-by-step guide for creating EC2 instances using Terraform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AWS EC2 Instance
&lt;/h2&gt;

&lt;p&gt;An EC2 instance is a virtual server in AWS, which enables you to run applications in a secure and scalable environment. It provides resizable computing capacity, helping developers and businesses avoid the upfront costs of physical servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uses of AWS EC2 Instance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Web Hosting: Run web applications, blogs, or static websites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Application Hosting: Deploy scalable backend applications or APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Big Data Processing: Analyze large datasets using tools like Apache Hadoop or Spark.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Machine Learning: Train and deploy ML models with powerful GPU-enabled instances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disaster Recovery: Maintain backup environments for high availability. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Benefits of using Terraform to create AWS EC2 Instance
&lt;/h2&gt;

&lt;p&gt;Terraform allows you to automate the provisioning and management of EC2 instances, ensuring consistent infrastructure deployments across environments and preventing manual errors. Key advantages include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reusability: Easily replicate infrastructure with minimal changes.&lt;/li&gt;
&lt;li&gt;Version Control: Track changes in infrastructure configurations.&lt;/li&gt;
&lt;li&gt;Scalability: Handle large and complex infrastructures efficiently.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide: Creating an AWS EC2 Instance Using Terraform
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;AWS Account: Ensure you have an AWS account and access keys.&lt;/li&gt;
&lt;li&gt;IAM User: Set up an IAM user with sufficient EC2 permissions.&lt;/li&gt;
&lt;li&gt;Terraform Installed: Download and install Terraform from terraform.io.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;create a main.tf file&lt;/strong&gt; and paste the below code in the file
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c02fb55956c7d316" # Replace with your preferred AMI ID
  instance_type = "t2.micro"

  tags = {
    Name = "MyEC2Instance"
  }
}


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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;create a variable.tf file for reusability and paste the below code in it&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;variable "instance_type" {
  default = "t2.micro"
}

variable "region" {
  default = "us-east-1"
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Update the main.tf to reference these variables&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider "aws" {
  region = var.region
}

resource "aws_instance" "example" {
  ami           = "ami-0c02fb55956c7d316"
  instance_type = var.instance_type

  tags = {
    Name = "MyEC2Instance"
  }
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run the command below
&lt;code&gt;terraform init&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;If successfully initialized, run:
&lt;code&gt;terraform validate&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;-Then, run :&lt;br&gt;
&lt;code&gt;terraform plan&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;terraform apply -auto-approve&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The next step is to go and confirm on the AWS console if the instance has been created.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;To destroy the resource created , run this command
&lt;code&gt;terraform destroy -auto-approve&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;AWS EC2 instances are a cornerstone of modern cloud computing, and leveraging Terraform to manage them unlocks the full potential of IaC. With Terraform, you can build scalable, repeatable, and consistent infrastructure in minutes.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Step-by-Step Guide to setting Up Terraform, AWS CLI, and VS Code</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Mon, 02 Dec 2024 21:03:36 +0000</pubDate>
      <link>https://dev.to/linsmed/step-by-step-guide-to-setting-up-terraform-aws-cli-and-vs-code-2pml</link>
      <guid>https://dev.to/linsmed/step-by-step-guide-to-setting-up-terraform-aws-cli-and-vs-code-2pml</guid>
      <description>&lt;p&gt;In this article, I am going to work you through how you can set up Terraform, AWS CLI, and VScode. I assumed you already have an AWS account.&lt;br&gt;
If your operating system is macOS, and you have homebrew installed, you can run these commands:&lt;br&gt;
&lt;code&gt;brew tap hashicorp/tap&lt;/code&gt;&lt;br&gt;
&lt;code&gt;brew install hashicorp/tap/terraform&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On Windows, if you are Chocolatey user, you can run:&lt;br&gt;
&lt;code&gt;choco install terraform&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you wish, you can install Terraform manually by going to the &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli" rel="noopener noreferrer"&gt;Terraform homepage&lt;/a&gt;,download the ZIP archive for your operating system and unzipping it into the directory where you want the terraform to be installed.&lt;br&gt;
To confirm if the Terraform is correctly installed, run this command:&lt;br&gt;
&lt;code&gt;terraform&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;For the Terraform installed to be able to communicate with AWS, AWS credentials (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY) for the IAM user you created will be needed.If you are on Unix/Linux/macOs terminal run:&lt;br&gt;
&lt;code&gt;export AWS_ACCESS_KEY_ID=(your access key id)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export AWS_SECRET_ACCESS_KEY=(your secret access key&lt;/code&gt;&lt;br&gt;
If you are on Windows, run:&lt;br&gt;
&lt;code&gt;set AWS_ACCESS_KEY_ID=(your access key id)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;set AWS_SECRET_ACCESS_KEY=(your secret access key)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To install VS Code, &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;install vscode&lt;/a&gt;click on the link, and follow the process to end.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting Started with Infrastructure as Code (IaC) Using Terraform</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Sun, 01 Dec 2024 17:38:01 +0000</pubDate>
      <link>https://dev.to/linsmed/getting-started-with-infrastructure-as-code-iac-using-terraform-9ca</link>
      <guid>https://dev.to/linsmed/getting-started-with-infrastructure-as-code-iac-using-terraform-9ca</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of contents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;What is infrastructure as a code (IaC)&lt;/li&gt;
&lt;li&gt;Five broad categories of IaC tools&lt;/li&gt;
&lt;li&gt;Key benefits of IaC&lt;/li&gt;
&lt;li&gt;Why terraform?&lt;/li&gt;
&lt;li&gt;Getting started with Terraform&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;In the modern era of cloud computing, Infrastructure as Code (IaC) has become a cornerstone of efficient and scalable DevOps practices. IaC allows engineers to manage and provision infrastructure using machine-readable configuration files rather than manual processes. Among the many tools available for implementing IaC, Terraform stands out as a popular choice due to its cloud-agnostic capabilities, strong community support, and ease of use.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is infrastructure as a code (IaC)
&lt;/h3&gt;

&lt;p&gt;Infrastructure as a code enables you to write and execute code to define,deploy, update, and destroy your infrastructure. By doing so, IaC ensures consistency, reduces manual errors, and simplifies infrastructure management across environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Five broad categories of IaC Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ad hoc scripts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration management tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Server templating tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provisioning tools&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would dwell more on these categories in another article&lt;/p&gt;

&lt;h3&gt;
  
  
  Key benefits of IaC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;**Speed and safety: **Since the deployment process is automated, it will be significantly faster, safer, and less prone to manual error.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;*&lt;em&gt;Documentation: *&lt;/em&gt; Since the infrastructure is defined as code, then the state of the infrastructure is in source files that anyone can read and understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version control:&lt;/strong&gt; Store infrastructure configurations in repositories like Git for easy tracking and rollback.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusability:&lt;/strong&gt; Infrastructure can be packaged into reusable modules, so instead of starting every deployment for every product in every environment from scratch, you can build on top of known, documented, battle-tested pieces.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Terraform?
&lt;/h3&gt;

&lt;p&gt;Terraform, developed by HashiCorp, is an open-source tool that simplifies infrastructure provisioning. It uses a declarative language, HCL (HashiCorp Configuration Language), to define resources and dependencies. Here’s why Terraform is a favorite in the IaC space:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud Agnostic: Manage resources across AWS, Azure, GCP, and even on-premises solutions.&lt;/li&gt;
&lt;li&gt;State Management: Keep track of resources using Terraform’s state file.&lt;/li&gt;
&lt;li&gt;Modularity: Use modules to organize and reuse configurations.&lt;/li&gt;
&lt;li&gt;Community Support: Leverage a robust ecosystem of providers and modules. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Getting started with Terraform
&lt;/h3&gt;

&lt;p&gt;Firstly, you need to install terraform, link on this link &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli" rel="noopener noreferrer"&gt;Terrform-installation&lt;/a&gt;.&lt;br&gt;
Once you are done type this command to confirm the installation&lt;/p&gt;

&lt;p&gt;&lt;code&gt;terraform --version&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt; The next step is to install a code editor, I would be using vscode. Click on this link &lt;a href="https://code.visualstudio.com/docs/setup/windows" rel="noopener noreferrer"&gt;install-vscode&lt;/a&gt;to install vscode.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Setup a cloud provider account.To setup an AWS account, click on this link &lt;a href="https://aws.amazon.com/free/?gclid=Cj0KCQiAr7C6BhDRARIsAOUKifj7ffvRaS-CjUnBKKZ-_dFp8xzjUo1MTs0vc5DtQesCXIWPM4_axyQaAojTEALw_wcB&amp;amp;trk=99f831a2-d162-429a-9a77-a89f6b3bd6cd&amp;amp;sc_channel=ps&amp;amp;ef_id=Cj0KCQiAr7C6BhDRARIsAOUKifj7ffvRaS-CjUnBKKZ-_dFp8xzjUo1MTs0vc5DtQesCXIWPM4_axyQaAojTEALw_wcB:G:s&amp;amp;s_kwcid=AL!4422!3!645125273267!e!!g!!aws%20account!19574556890!145779847112" rel="noopener noreferrer"&gt;signup AWS account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To Install AWS CLI and configure it, click on this link &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;AWS-CLI&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the command below to confirm&lt;br&gt;
&lt;code&gt;aws --version&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7e6c0zn1h62lu1zx2q9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7e6c0zn1h62lu1zx2q9n.png" alt="aws-cli" width="561" height="185"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Terraform simplifies the process of managing and scaling infrastructure through its declarative syntax and robust tooling. By adopting IaC practices and leveraging Terraform, teams can improve efficiency, reduce errors, and build more resilient infrastructure.&lt;/p&gt;

&lt;p&gt;What’s your experience with Terraform? Let’s discuss this in the comments!&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Efficient User and Group Management on Linux: A Bash Script Tutorial</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Wed, 03 Jul 2024 22:44:14 +0000</pubDate>
      <link>https://dev.to/linsmed/efficient-user-and-group-management-on-linux-a-bash-script-tutorial-4k16</link>
      <guid>https://dev.to/linsmed/efficient-user-and-group-management-on-linux-a-bash-script-tutorial-4k16</guid>
      <description>&lt;h2&gt;
  
  
  Table Of Content
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;script overview&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A Bash script is a text file containing a series of commands written in the Bash (Bourne Again SHell) scripting language, which is a command processor that typically runs in a text window where the user types commands to perform actions. A Bash script allows users to automate repetitive tasks, manage system operations, and perform complex operations by executing commands.&lt;/p&gt;

&lt;p&gt;As a SysOps engineer, managing user accounts and groups is crucial for maintaining a secure and organized development environment. In this article, I will guide you through a bash script designed to automate user creation, assign groups, set up home directories, and handle permissions efficiently.&lt;/p&gt;

&lt;p&gt;The script, create_users.sh, performs the following tasks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reading Input: It reads a text file containing usernames and their associated groups.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User and Group Creation: It creates users and their groups if they do not already exist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Home Directory Setup: It sets up home directories with appropriate permissions and ownership.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Password Generation: It generates random passwords for the users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Logging: It logs all actions to /var/log/user_management.log and stores the passwords securely in /var/secure/user_passwords.csv.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Script Overview
&lt;/h3&gt;

&lt;p&gt;Here’s a detailed breakdown of the script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checking Input Argument: The script checks if the input file is provided as an argument.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if [ -z "$1" ]; then
    echo "Usage: $0 &amp;lt;name-of-text-file&amp;gt;"
    exit 1
fi

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Initialization: It initializes log and password files and ensures the secure directory exists.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Function to generate a random password
generate_password() {




    # using 'openssl rand -base64 12’ to generate a 12-character password
    openssl rand -base64 12
}

# Read input file line by line
while IFS=';' read -r username groups; do
    # Create groups if they don't exist
    for group in $(echo "$groups" | tr ',' ' '); do
      groupadd "$group" 2&amp;gt;/dev/null || echo "Group $group already exists"
    done

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  create user
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useradd -m "$username" -G "$groups" 2&amp;gt;/dev/null || echo "User $username already exists"&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;command that sets passwords&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;password=$(generate_password)&lt;br&gt;
    echo "$username:$password" | chpasswd&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Command that logs actions &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;echo "$(date '+%Y-%m-%d %H:%M:%S') - Created user $username with groups: $groups" &amp;gt;&amp;gt; "$log_file"&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Command that stores password securely&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;echo "$username:$password" &amp;gt;&amp;gt; "$password_file"&lt;br&gt;
done &amp;lt; "$input_file"&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;This script simplifies managing users and groups on a Linux system, ensuring security and efficiency. Automating these tasks not only saves time but also reduces the risk of human error.&lt;/p&gt;

&lt;p&gt;For more information on the HNG internship program and to learn how to become a world-class developer, visit &lt;a href="https://hng.tech/internship" rel="noopener noreferrer"&gt;HNG Internship&lt;/a&gt; and &lt;a href="https://hng.tech/premium" rel="noopener noreferrer"&gt;HNG Premium&lt;/a&gt;.&lt;br&gt;
You can also find the code to the bash script on my GitHub here &lt;a href="https://github.com/Linsmed/hng_stage_1_task" rel="noopener noreferrer"&gt;Linsmed&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>devops</category>
      <category>sysop</category>
    </item>
    <item>
      <title>Effortless Project Management: Deploying OpenProject with Docker on AWS for Optimal Performance</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Fri, 14 Jun 2024 05:40:01 +0000</pubDate>
      <link>https://dev.to/linsmed/effortless-project-management-deploying-openproject-with-docker-on-aws-for-optimal-performance-4m1e</link>
      <guid>https://dev.to/linsmed/effortless-project-management-deploying-openproject-with-docker-on-aws-for-optimal-performance-4m1e</guid>
      <description>&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduction&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prerequisite&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Steps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conclusion&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introdcution
&lt;/h2&gt;

&lt;p&gt;In today's fast-paced and interconnected world, project management solutions have become indispensable for organizations striving to maintain efficiency and team coordination. Open management tool (openproject) is a robust open-source project management software designed to facilitate collaboration, track progress, and manage project timelines. However, deploying and maintaining such complex applications can be daunting, especially when dealing with various dependencies and configurations.&lt;/p&gt;

&lt;p&gt;Docker, a leading containerization platform, offers a seamless way to deploy applications by encapsulating them and their dependencies into containers. This approach ensures consistency, scalability, and ease of deployment across different environments. By leveraging Docker, deploying OpenProject becomes significantly more manageable, enabling teams to focus on productivity rather than infrastructure.&lt;/p&gt;

&lt;p&gt;I will help you in this article by deploying OpenProject in a Docker container. We will explore the benefits of containerization, discuss the prerequisites, and provide detailed instructions to get your OpenProject instance up and running. Whether you are a seasoned DevOps professional or a project manager looking to streamline your project management processes, this guide will equip you with the knowledge to deploy OpenProject efficiently using Docker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;Before diving into the deployment of OpenProject using Docker, ensure that you have the following prerequisites in place. These requirements will help guarantee a smooth installation and optimal performance of OpenProject.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Account: An active Amazon Web Services (AWS) account is essential for provisioning and managing the cloud infrastructure required for this deployment. If you don't already have an account, you can create one at AWS.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.Server Specifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Memory: At least 8 GB of RAM to handle the application and its dependencies efficiently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CPU: A minimum of 4 cores for processing power. Ensure your instance type provides at least 8 vCPUs for optimal performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Operating System: Ensure your server is running a compatible operating system, preferably a Linux distribution such as Ubuntu or CentOS, which are well-supported for Docker installations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitBash or MobaXterm: For Windows users, GitBash or MobaXterm are recommended for connecting to the server via SSH. These tools provide a Unix-like shell experience, making it easier to execute commands and manage your server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitBash or MobaXterm: For Windows users, GitBash or MobaXterm are recommended for connecting to the server via SSH. These tools provide a Unix-like shell experience, making it easier to execute commands and manage your server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker and Docker Compose: Ensure Docker and Docker Compose are installed on your server. Docker simplifies application deployment by using containers, while Docker Compose allows you to manage multi-container applications with ease. Follow the installation instructions provided for your specific operating system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic Knowledge of Docker and Linux Command Line: Familiarity with Docker commands and basic Linux command line operations will be advantageous during the deployment process.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Having these prerequisites in place will ensure a smooth and successful deployment of OpenProject in a Docker container. With the necessary tools and resources ready, you are now prepared to proceed with the installation and configuration steps detailed in this guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Steps&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;UPDATE THE PACKAGES AND DEPENDENCIES&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;` sudo apt update -y `
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;INSTALL DOCKER ON THE SERVER&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo apt install docker.io -y&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CLONE THE OPENPROJECT REPOSITORY&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/opf/openproject.git&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;NAVIGATE TO THE COMPOSE DIRECTORY&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd openproject/compose&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;INSTALL DOCKER COMPOSE IN THIS DIRECTORY&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo apt install docker-compose&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;GIVE THE NECESSARY PERMISSIONS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo chmod 666 /var/run/docker.sock&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;PULL THE REQUIRED IMAGE FROM THE DOCKERHUB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;docker-compose pull&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;LAUNCH THE CONTAINERS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;OPENPROJECT_HTTPS=false docker-compose up -d&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the openproject as seen below by pasting your ip address http//ipaddress:8080 on your preferred browser.
The default username is admin, while the password is admin as well&lt;/li&gt;
&lt;/ul&gt;

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

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

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

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

&lt;p&gt;Deploying OpenProject using Docker offers a powerful and efficient way to manage your project management software, leveraging the benefits of containerization for consistency, scalability, and ease of deployment. By following this guide, you have set up a robust environment that encapsulates all necessary dependencies, ensuring that OpenProject runs smoothly across various environments.&lt;/p&gt;

&lt;p&gt;The journey began with preparing the prerequisites, ensuring you had the necessary AWS account, server specifications, and tools like Docker and Docker Compose. From there, you learned how to deploy OpenProject, leveraging Docker's capabilities to simplify the installation and configuration process. This deployment strategy not only reduces the complexities associated with managing multiple services but also enhances the portability and reliability of your project management setup.&lt;/p&gt;

&lt;p&gt;As you move forward, you can take advantage of Docker's features to scale your OpenProject instance, integrate with other tools, and maintain a secure and up-to-date environment. The skills and knowledge gained from this deployment process will be invaluable for managing other applications in a similar fashion, making you well-equipped to handle modern infrastructure challenges.&lt;/p&gt;

&lt;p&gt;I hope this helps!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>aws</category>
      <category>linux</category>
    </item>
    <item>
      <title>A Comprehensive Guide to Deploying WordPress on Docker: Simplifying Website Hosting with Containerization</title>
      <dc:creator>Ejibode Ibraheem</dc:creator>
      <pubDate>Wed, 08 May 2024 17:41:18 +0000</pubDate>
      <link>https://dev.to/linsmed/a-comprehensive-guide-to-deploying-wordpress-on-docker-simplifying-website-hosting-with-containerization-1937</link>
      <guid>https://dev.to/linsmed/a-comprehensive-guide-to-deploying-wordpress-on-docker-simplifying-website-hosting-with-containerization-1937</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Prerequisite&lt;/li&gt;
&lt;li&gt;Steps&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In an era defined by dynamic web development and scalable infrastructure, the deployment of web applications demands efficiency, flexibility, and reliability. Docker, a powerful containerization platform, has emerged as a cornerstone technology in modern software deployment strategies. Its ability to encapsulate applications and their dependencies into lightweight, portable containers offers developers a streamlined approach to building, shipping, and running applications across diverse environments.&lt;/p&gt;

&lt;p&gt;WordPress, the world's most popular content management system (CMS), powers millions of websites, ranging from personal blogs to enterprise-level platforms. Deploying WordPress within a Docker container harnesses the advantages of containerization, enabling developers to isolate the application, manage dependencies effortlessly, and scale with ease.&lt;/p&gt;

&lt;p&gt;In this article, we delve into the intricacies of deploying a WordPress website on a Docker container. From setting up the Docker environment to configuring WordPress within the container, we explore the step-by-step process to achieve a seamless deployment. Whether you're a seasoned developer seeking to optimize your workflow or a newcomer eager to explore modern deployment practices, this guide will equip you with the knowledge to leverage Docker for WordPress deployment effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;Before diving into the deployment process, there are several prerequisites you'll need to have in place:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;AWS Account: To deploy resources on the Amazon Web Services (AWS) cloud platform, you must have an active AWS account. If you haven't already created one, you can sign up for free on the AWS website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic Knowledge of Docker: While you don't need to be an expert, having a fundamental understanding of Docker concepts such as containers, images, and Docker files will be beneficial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Familiarity with WordPress: It's essential to have a basic understanding of WordPress, including how to navigate its admin dashboard, install plugins, and configure settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS CLI or Management Console Access: You'll need access to either the AWS Command Line Interface (CLI) or the AWS Management Console to create and manage AWS resources such as EC2 instances and Amazon RDS databases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Networking Knowledge: Understanding networking concepts like virtual private clouds (VPCs), subnets, security groups, and DNS will help configure the network infrastructure of your WordPress deployment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By ensuring you have these prerequisites in place, you'll be well-prepared to follow along with the deployment process and effectively leverage AWS services in conjunction with Docker for hosting your WordPress website.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On your AWS console management, navigate to EC2 service, click 
on it, and click on launch instance, then name your server any 
name of your choice.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Choose the OS image of your choice, here I am going with the 
Amazon Linux&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Select the instance type of your choice, here I am going with t2 micro which is free tier eligible&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Create a new key pair or select an existing key pair&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Configure the security setting and allow traffic from TCP,HTTP, and so on as shown below&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Leave storage configuration and advanced settings as default&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click on the launch instance &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;After a few minutes, your instance should be up and running&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Connecting to the EC2 Instance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The next step is to connect to the EC2 instance from the terminal, to do this, click on connect&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Then copy the command that is under the example as shown below&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The next thing is to open your terminal, either on vscode or gitbash, here I would be using gitbash. Navigate to where your keypair is, mine is in download.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then, paste the code you copied on the AWS console, then if you get any prompt, type ‘yes’&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Boom!! , you have successfully connected to the EC2 instance.&lt;/li&gt;
&lt;li&gt;Since the user does not have sudoers privilege, we have to be including sudo in our command.  For the purpose of this exercise, I will be using Vim text editor.&lt;/li&gt;
&lt;li&gt;Update and upgrade the yum packages and dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo yum update &amp;amp;&amp;amp; sudo yum upgrade&lt;/code&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Installing Docker
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install docker using the command below, the command is flagged with -y to avoid prompting us to enter yes:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo yum install docker -y&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Start the server and verify the installation using the below command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start docker &amp;amp;&amp;amp; sudo docker run hello-world&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Enable the docker
&lt;code&gt;sudo systemctl enable docker&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Add the current user(ec2-user) to the docker group using this command 
&lt;code&gt;sudo usermod -a -G docker ec2-user&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wqd9zovcni73kg9wju3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wqd9zovcni73kg9wju3.png" alt="add-user-to-the-docker-group" width="643" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing docker compose
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install the docker compose by using this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose 

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

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Make the docker compose file executable
&lt;code&gt;sudo chmod +x /usr/local/bin/docker-compose&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Cloning a github repository on the server
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To be able to run git commands, git has to be installed
&lt;code&gt;sudo yum install git -y&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Now that git has been installed, clone the repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/Iron-chest/wordpress-mysql-dockercompose.git&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Execute your docker-compose yaml file for default docker-compose file name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Check the docker containers if they are running&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;docker container ls&lt;/code&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;You can access the WordPress website by pasting the IP address of the server to the browser of your choice&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;By clicking on continue and all other fields imputed correctly, you should see something like this&lt;/li&gt;
&lt;/ul&gt;

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

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

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

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

&lt;p&gt;In conclusion, deploying a WordPress website on Docker offers a multitude of advantages, from enhanced portability and scalability to simplified management and resource optimization. Throughout this guide, we've explored the step-by-step process of setting up a Docker environment, configuring WordPress within a container, and achieving a seamless deployment.&lt;/p&gt;

&lt;p&gt;By harnessing the power of Docker containerization, developers can isolate their WordPress applications, streamline development workflows, and deploy with confidence across various environments. Additionally, leveraging cloud platforms like AWS further enhances the scalability and reliability of the deployment, ensuring optimal performance for your website.&lt;/p&gt;

&lt;p&gt;As technology continues to evolve, embracing modern deployment practices such as Docker becomes increasingly essential for staying competitive in the digital landscape. Whether you're a seasoned developer seeking to optimize your workflow or a newcomer eager to explore innovative solutions, mastering WordPress deployment on Docker opens up a world of possibilities for efficient and scalable website hosting.&lt;/p&gt;

&lt;p&gt;With the knowledge and skills gained from this guide, you're well-equipped to embark on your Dockerized WordPress journey. Embrace the flexibility, reliability, and efficiency that Docker offers, and empower your WordPress websites for success in the dynamic digital realm.&lt;/p&gt;

&lt;p&gt;Happy deploying!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>docker</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
