<?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: Shelley Benhoff</title>
    <description>The latest articles on DEV Community by Shelley Benhoff (@sbenhoff).</description>
    <link>https://dev.to/sbenhoff</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F766663%2F33f88c0c-47fc-47fc-b456-df73193c16d3.png</url>
      <title>DEV Community: Shelley Benhoff</title>
      <link>https://dev.to/sbenhoff</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sbenhoff"/>
    <language>en</language>
    <item>
      <title>How to Access a Running Container with Docker Exec</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:53:58 +0000</pubDate>
      <link>https://dev.to/sbenhoff/how-to-access-a-running-container-with-docker-exec-3cpg</link>
      <guid>https://dev.to/sbenhoff/how-to-access-a-running-container-with-docker-exec-3cpg</guid>
      <description>&lt;p&gt;You've created your application, placed it into a container, and deployed it. However, your application seems to behave strangely. It is unable to connect to the database, your configuration file doesn't load properly, or you've got an error message that doesn't really say anything.&lt;/p&gt;

&lt;p&gt;So far, you've checked your container's logs and couldn't get enough information out of them. Wouldn't it be great to enter the container and check everything manually?&lt;/p&gt;

&lt;p&gt;And here comes the &lt;code&gt;docker exec&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;In this article, I will cover how to access a running container with Docker exec, execute commands inside containers, and troubleshoot some typical problems without stopping your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Docker Exec
&lt;/h2&gt;

&lt;p&gt;Using the &lt;code&gt;docker exec&lt;/code&gt; command, you can execute any command inside an already running container.&lt;/p&gt;

&lt;p&gt;The most useful feature of this command is the possibility to open an interactive shell allowing you to examine the container's filesystem, processes, and the environment.&lt;/p&gt;

&lt;p&gt;It will help you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check your configuration files and environment variables&lt;/li&gt;
&lt;li&gt;Verify that your application files are in the right directory&lt;/li&gt;
&lt;li&gt;Troubleshoot networking and connectivity problems&lt;/li&gt;
&lt;li&gt;Check running processes&lt;/li&gt;
&lt;li&gt;Execute diagnostic commands without stopping your container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But remember that containers are lightweight, so they might lack some of the tools that are usually installed on a regular host machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Find Your Running Container
&lt;/h3&gt;

&lt;p&gt;Before you access your container, you should find out which container you want to investigate.&lt;/p&gt;

&lt;p&gt;Open a terminal and type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command will display the list of running containers together with their container IDs, names, images, and statuses.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;`CONTAINER ID &amp;nbsp; IMAGE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NAMES&lt;/p&gt;

&lt;p&gt;a1b2c3d4e5f6 &amp;nbsp; nginx:latest &amp;nbsp; Up 10 minutes&amp;nbsp; my-web-app`&lt;/p&gt;

&lt;p&gt;Here we have an Nginx container called &lt;code&gt;my-web-app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can use either container ID or name when executing Docker commands. I prefer using names because it's easier to remember them.&lt;/p&gt;

&lt;p&gt;Open an Interactive Shell Inside Your Container&lt;/p&gt;

&lt;p&gt;Now that you've found the container you want to work with, you can access it and open the interactive shell:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker exec -it my-web-app /bin/bash&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here is what each part of the command means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;docker exec: executes a command inside a running container&lt;/li&gt;
&lt;li&gt;-i: keeps standard input open for interaction with the shell&lt;/li&gt;
&lt;li&gt;-t: allocates a pseudo-TTY for interactive use&lt;/li&gt;
&lt;li&gt;my-web-app: specifies a container that you want to use&lt;/li&gt;
&lt;li&gt;/bin/bash: starts a bash shell in this container&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The -it flag is actually two separate options combined for convenience.&lt;/p&gt;

&lt;p&gt;And now you've entered the shell of your container.&lt;/p&gt;

&lt;p&gt;But keep in mind that not all Docker images have a Bash shell installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Troubleshooting
&lt;/h2&gt;

&lt;p&gt;Now that you're inside your container, let's have a look at several practical examples of troubleshooting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1: Checking Your Application Files
&lt;/h3&gt;

&lt;p&gt;Suppose that your application is unable to load a configuration file.&lt;/p&gt;

&lt;p&gt;You can use the following command to check the filesystem:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls -la /app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command will show you the list of files in &lt;code&gt;/app&lt;/code&gt; directory, assuming that your application files are located in this directory.&lt;/p&gt;

&lt;p&gt;You can check a particular file by using the &lt;code&gt;cat&lt;/code&gt; command, for example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cat /app/config.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This allows you to verify that your file exists and has the correct settings in it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: Checking Environment Variables
&lt;/h3&gt;

&lt;p&gt;As a common practice, your containerized application uses environment variables for configuration.&lt;/p&gt;

&lt;p&gt;To check them, you can use the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;printenv&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can check a particular variable:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;printenv NODE_ENV&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If your application requires &lt;code&gt;NODE_ENV&lt;/code&gt; to be set to &lt;code&gt;production&lt;/code&gt;, this command will check that it is so.&lt;/p&gt;

&lt;p&gt;Remember that it is a good practice not to share environment variables because they might include sensitive information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 3: Network Connectivity Problems
&lt;/h3&gt;

&lt;p&gt;Let's say your application cannot connect to another service.&lt;/p&gt;

&lt;p&gt;You can try to use the following command to check it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -I http://api-service:8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command sends an HTTP HEAD request to the service specified and outputs its headers.&lt;/p&gt;

&lt;p&gt;In case of failure, you might have a networking or DNS problem, or the service is unavailable.&lt;/p&gt;

&lt;p&gt;Keep in mind that some diagnostic tools might not be included in your container image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Executing Commands Without Opening a Shell
&lt;/h2&gt;

&lt;p&gt;Sometimes you don't need to open an interactive shell to check your container.&lt;/p&gt;

&lt;p&gt;For example, you can list files from your terminal directly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker exec my-web-app ls -la /usr/share/nginx/html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can check a particular environment variable too:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker exec my-web-app printenv NODE_ENV&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It is a great feature when you want to run a single command and don't want to open a shell session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Leaving the Shell
&lt;/h2&gt;

&lt;p&gt;When you've finished troubleshooting, just type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will exit your interactive shell session.&lt;/p&gt;

&lt;p&gt;Leaving the shell doesn't stop your container! Your application continues working as before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices When Using Docker Exec
&lt;/h2&gt;

&lt;p&gt;Although &lt;code&gt;docker exec&lt;/code&gt; is a powerful diagnostic tool, there are a couple of things to consider.&lt;/p&gt;

&lt;p&gt;First, don't make any permanent changes in a running container. All changes in the writable filesystem of your container will disappear when your container is destroyed and built again.&lt;/p&gt;

&lt;p&gt;Instead, update your Dockerfile or your application source code when needed and build your container again.&lt;/p&gt;

&lt;p&gt;Also, don't install unnecessary debugging tools in your production containers. Keeping container images small decreases their attack surface and increases the efficiency of deployment.&lt;/p&gt;

&lt;p&gt;And finally, don't forget that you can use &lt;code&gt;docker exec&lt;/code&gt; only in a running container. If your container stops immediately after starting, you need to investigate its logs or the configuration first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you want to learn more about working with Docker containers?
&lt;/h2&gt;

&lt;p&gt;Then you may have a look at my &lt;a href="https://linkedin.com/learning/docker-your-first-project" rel="noopener noreferrer"&gt;Docker: Your First Project&lt;/a&gt; course on LinkedIn Learning. It is a part of the Docker Foundations Professional Certificate learning path, where you will get hands-on experience building and running containers.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>containers</category>
    </item>
    <item>
      <title>5 Signs It's Time For a Career Change</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Mon, 12 Oct 2026 20:05:58 +0000</pubDate>
      <link>https://dev.to/sbenhoff/5-signs-its-time-for-a-career-change-6e4</link>
      <guid>https://dev.to/sbenhoff/5-signs-its-time-for-a-career-change-6e4</guid>
      <description>&lt;p&gt;Do you ever start a day wondering: “Is this what I am really meant to do for the next five years?” Of course, every employee has bad days at work. It might be due to a challenging project, unrealistic deadlines, or an unpleasant manager. However, experiencing a lack of motivation for some weeks or even months doesn’t mean that you have picked the wrong career path.&lt;/p&gt;

&lt;p&gt;I’ve been working in tech for over 25 years. Being a developer, then a team lead, lead developer, and finally a technology leader, I have seen a lot of things over these years. I can assure you that professional growth doesn’t always mean progressing in your career. So here are 5 signs you have to consider for changing your career.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. You Don't See Yourself Improving
&lt;/h2&gt;

&lt;p&gt;As soon as you enter your profession, you see all the challenges you have to face. You learn a lot and develop your skills. However, with the passing of time, you stop discovering anything new and do the same routine again.&lt;/p&gt;

&lt;p&gt;For example, you have been a software developer for 5 years, working with the same application all the time. Now, you know the codebase perfectly and know how to deal with any issue associated with it. However, you understand that it’s becoming a routine and you cannot learn anything new. While the other developers in your company study cloud technologies, AI, and the latest trends in development.&lt;/p&gt;

&lt;p&gt;On the one hand, you feel quite comfortable in your current position, but on the other hand, you understand that you are losing ground. Before making a decision, try to ask yourself if there are some ways to improve within your company. Perhaps, you can participate in some new projects or become a leader. If you check everything and still feel like you are at a dead end, maybe it’s high time for change.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. You Feel Like Work Isn't Interesting For You
&lt;/h2&gt;

&lt;p&gt;There are no ideal professions. We all have meetings, administrative tasks, and projects we don’t like. However, what if you have lost the joy of doing your work?&lt;/p&gt;

&lt;p&gt;For example, let’s imagine that you are a senior developer who worked very hard to become an engineering manager. You have succeeded and feel proud of yourself, but after some years of performance reviews, budget meetings, project planning, and similar tasks, you realize that you miss your days as a developer.&lt;/p&gt;

&lt;p&gt;Actually, you aren’t dissatisfied with your company. You just understood that you are not interested in management anymore. It doesn’t mean that your experience was useless. On the contrary, your leadership skills can make you a much better technical leader or individual contributor. In short, sometimes, a change in your career means a change in your place within it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Your Career Is No Longer in Tune With Your Life Goals
&lt;/h2&gt;

&lt;p&gt;What was important for you at the age of 25 is completely different from what matters to you when you are 35, 45, or 55. At the early stages of your career, you may concentrate on getting a higher position and higher salary, developing your skills, and having promotions. However, after some time, you may understand that the balance has changed and now you value flexibility, interesting work, stability, and more time for your family. Actually, it’s quite normal that your priorities have changed.&lt;/p&gt;

&lt;p&gt;Let’s suppose that you are a technology leader, leading several development teams. You have a nice salary and position, but your job includes a lot of travelling, evening and weekend work. Several years ago, this situation fitted you well, but now you want to have more freedom in your schedule and some time for your hobbies.&lt;/p&gt;

&lt;p&gt;Perhaps you can consider consulting, teaching, technical writing, or any other profession that does not require so much responsibility. What you have to ask yourself is whether your career helps you to have the life you want to have. If your priorities have changed, maybe you have to change your career as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. You're Stressed All the Time
&lt;/h2&gt;

&lt;p&gt;Stress is a natural thing in any profession, especially in tech, because of tight deadlines and a rapidly changing environment. However, you shouldn’t feel stress all the time. Otherwise, you risk burning out. Maybe you spend most of your evenings and weekends at work. Or you have to spend Sundays preparing for a new working week. Or you feel exhausted from your work and cannot do anything else.&lt;/p&gt;

&lt;p&gt;Let’s imagine that you are a lead developer of a critical production application. Your team is understaffed, the deadlines are unrealistic, and you are always fixing urgent bugs and solving emergencies. You’ve discussed the problems with the leaders of your company several times, but nothing has changed. Finally, your stress affects your life negatively. It disturbs your sleep, hurts your relationships with people, and influences your health.&lt;/p&gt;

&lt;p&gt;Before making a decision about changing your career, try to understand whether your stress is caused by your profession or the way you organize your work. Maybe you should find another company or another team to work with. However, if your profession requires you to have so much stress all the time, maybe you have to change your profession.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. You Keep Dreaming About Something Different
&lt;/h2&gt;

&lt;p&gt;Sometimes, the clearest sign of the necessity to change your career is that you constantly dream about something else. Maybe you researched different types of work, took some online courses, and imagine yourself working in some other profession. Then you start dreaming about these careers.&lt;/p&gt;

&lt;p&gt;For example, you are an experienced developer who loves mentoring young people. You always volunteer to introduce new hires in your company, explain something technical to them, and help them to build their career paths. Eventually, you start dreaming about how nice it would be to teach or to train developers. Such dreams may be the sign that you have to change your career path.&lt;/p&gt;

&lt;p&gt;However, being interested in some other type of work doesn’t necessarily mean that you have to change your job immediately. Instead, you can try to understand this sphere better. You can volunteer for some projects, communicate with people who work in this sphere, and experiment. Perhaps, you will find a new career path for yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Act When You Want To Change Your Career?
&lt;/h2&gt;

&lt;p&gt;Recognition of your desire to change your career is the first step. However, figuring out what to do next may be challenging, especially if you spent many years building your professional background. The good news is that changing your career path doesn’t necessarily mean that you have to forget about all your experience.&lt;/p&gt;

&lt;p&gt;Your technical skills, leadership experience, communication skills, and ability to solve problems may be useful in many other spheres and jobs. And, actually, you don’t have to make a big step right away. You can start with understanding what is missing in your current career, search for some opportunities, and build a realistic plan. Remember that you don’t have to know where you want to go yet. It’s enough to know what to do next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready To Move Your Career Forward?
&lt;/h2&gt;

&lt;p&gt;If you feel stuck, are considering changing your career, or are looking for advice on what to do next, I can help you. We will figure out your goals, search for some opportunities, and build a realistic plan to move your career forward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hoffstech.com/coaching" rel="noopener noreferrer"&gt;Learn more about career coaching and schedule a free consultation.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>discuss</category>
      <category>learning</category>
    </item>
    <item>
      <title>Getting Started with .NET and Docker Tutorial</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Wed, 18 Dec 2024 18:27:05 +0000</pubDate>
      <link>https://dev.to/sbenhoff/getting-started-with-net-and-docker-tutorial-31o0</link>
      <guid>https://dev.to/sbenhoff/getting-started-with-net-and-docker-tutorial-31o0</guid>
      <description>&lt;p&gt;In today’s development landscape, Docker has become an essential tool for containerizing applications. It allows developers to create, deploy, and run applications in isolated environments, ensuring consistency across different stages of development and deployment. In this Getting Started with .NET and Docker Tutorial, I’ll guide you through creating a .NET project in Visual Studio with Docker container support, enabling you to leverage Docker for simplified deployment and scalability.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Installing Docker Desktop
&lt;/h2&gt;

&lt;p&gt;First, you need to download and install Docker Desktop from the &lt;a href="http://docker.com/products/docker-desktop" rel="noopener noreferrer"&gt;Docker website&lt;/a&gt;. You can leave all of the default options checked during the installation process. Once it’s downloaded, sign in using your Docker Hub account. If you don’t have an account, you can sign up at &lt;a href="https://hub.docker.com" rel="noopener noreferrer"&gt;hub.docker.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once Docker Desktop is running, right-click on the icon in your system tray and select “Switch to Windows containers.”&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%2Fi10mqt22lqdlok0a72sa.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%2Fi10mqt22lqdlok0a72sa.png" alt="Image description" width="296" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you get an error message saying that you need to enable Windows containers, run the PowerShell script specified in the dialog in a terminal with admin rights and restart your PC. Then, make sure to start Docker Desktop.&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%2Fdqqepcjx6vy9hy7nj34x.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%2Fdqqepcjx6vy9hy7nj34x.png" alt="Image description" width="570" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a .NET Core Project in Visual Studio
&lt;/h2&gt;

&lt;p&gt;You also need Visual Studio 2022 Community Edition which you can get from &lt;a href="https://visualstudio.microsoft.com/vs/community/" rel="noopener noreferrer"&gt;visualstudio.microsoft.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Open Visual Studio 2022 and click Create a new project in the welcome dialog.&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%2Ft05mcllp7h3wapqaqgp9.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%2Ft05mcllp7h3wapqaqgp9.png" alt="Image description" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Create a new project dialog, search for “.net core web app” and select the ASP.NET Core Web App (Razor Pages) template. Then, click Next.&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%2Fxu2n2bmoeyy5zc0knh2v.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%2Fxu2n2bmoeyy5zc0knh2v.png" alt="Image description" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Name the project AspNetCoreDockerDemo and select the location where you want to create an application. Then, click Next.&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%2Ffuputvib1ts37jusjjk9.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%2Ffuputvib1ts37jusjjk9.png" alt="Image description" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Additional information dialog, ensure “Configure for HTTPS” is unchecked and the “Enable container support” box is checked. In the Container OS dropdown, select Windows. Then, in the Container Build Type dropdown, select Dockerfile and then click Create.&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%2Fo27pzy9iqpvhg2isnut6.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%2Fo27pzy9iqpvhg2isnut6.png" alt="Image description" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reviewing the Dockerfile
&lt;/h2&gt;

&lt;p&gt;In the solution explorer, you should see a Dockerfile. Let’s take a look at this in detail.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;br&gt;
This stage sets up the base runtime environment your application will run on.    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base Image:&lt;/strong&gt; Uses the ASP.NET Core runtime image (not the SDK), ensuring a minimal, efficient runtime environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR /app:&lt;/strong&gt; Sets the working directory inside the container to /app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EXPOSE 8080:&lt;/strong&gt; Informs Docker that the container listens on port 8080 at runtime.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["AspNetCoreDockerDemo/AspNetCoreDockerDemo.csproj", "AspNetCoreDockerDemo/"]
RUN dotnet restore "./AspNetCoreDockerDemo/AspNetCoreDockerDemo.csproj"
COPY . .
WORKDIR "/src/AspNetCoreDockerDemo"
RUN dotnet build "./AspNetCoreDockerDemo.csproj" -c %BUILD_CONFIGURATION% -o /app/build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;br&gt;
This stage is responsible for restoring dependencies and compiling your application.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ARG BUILD_CONFIGURATION=Release:&lt;/strong&gt; Defines a build-time argument to specify the build configuration (defaulting to Release).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR /src:&lt;/strong&gt; Sets the working directory to /src, where your source code will be copied.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPY [“AspNetCoreDockerDemo/AspNetCoreDockerDemo.csproj”, “AspNetCoreDockerDemo/”]:&lt;/strong&gt; Copies the project file into the container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RUN dotnet restore “./AspNetCoreDockerDemo/AspNetCoreDockerDemo.csproj”:&lt;/strong&gt; Restores all required NuGet packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPY . .:&lt;/strong&gt; Copies the entire source code into the container (to /src).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR “/src/AspNetCoreDockerDemo”:&lt;/strong&gt; Navigates into the project’s source directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RUN dotnet build …:&lt;/strong&gt; Builds the project in the specified configuration, outputting compiled artifacts to /app/build.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./AspNetCoreDockerDemo.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;br&gt;
This stage publishes the built application into a folder ready for deployment.    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ARG BUILD_CONFIGURATION=Release:&lt;/strong&gt; Reuses the configuration argument to ensure consistent build mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RUN dotnet publish … -o /app/publish:&lt;/strong&gt; Publishes the application, which includes precompiled binaries and all necessary runtime files, into /app/publish. The /p:UseAppHost=false parameter helps reduce the image size by excluding certain host executables on some platforms.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AspNetCoreDockerDemo.dll"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;br&gt;
This is the final image that will actually be run. It uses the smaller runtime image and includes only the essential published files. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WORKDIR /app:&lt;/strong&gt; Ensures the working directory is /app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COPY –from=publish /app/publish .:&lt;/strong&gt; Copies the published output from the publish stage into the final image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ENTRYPOINT [“dotnet”, “AspNetCoreDockerDemo.dll”]:&lt;/strong&gt; Specifies the command that runs when the container starts. It launches the ASP.NET Core application using the .dll file compiled and published in previous stages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Running the .NET Web Application in a Docker Container
&lt;/h2&gt;

&lt;p&gt;Now, let’s run our application. In the top toolbar, click the start button. This will open your browser and you should see the Welcome page!&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%2Ffmxx4ynh1sdfk5y6gfez.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%2Ffmxx4ynh1sdfk5y6gfez.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you look at Docker Desktop, you will see the container for our application. This is where you can view the container logs and inspect the container to aid in troubleshooting.&lt;/p&gt;

&lt;p&gt;With Visual Studio, Docker integration makes it easy to containerize and deploy .NET applications. By following these simple steps, you can create, build, and run a Docker container for your .NET projects, enabling more efficient and consistent development and deployment workflows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Get Valuable Learning Resources Delivered To Your Inbox Every Wednesday!
&lt;/h2&gt;

&lt;p&gt;You can learn more about this Getting Started with .NET and Docker Tutorial in my &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Tech Career Newsletter&lt;/a&gt;. This newsletter will give you insight into multiple stages of your career so that you can form your career plan, overcome learning blockers, and stay competitive in today’s crowded job market. It includes featured content from authors and influencers in my network to help you navigate your career and learn new skills. Subscribe today at &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;hoffstech.com/newsletter&lt;/a&gt; and set yourself up for career success!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>dotnet</category>
      <category>dotnetcore</category>
      <category>devops</category>
    </item>
    <item>
      <title>Docker Run vs Docker Start</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Wed, 11 Dec 2024 15:15:47 +0000</pubDate>
      <link>https://dev.to/sbenhoff/docker-run-vs-docker-start-3gcm</link>
      <guid>https://dev.to/sbenhoff/docker-run-vs-docker-start-3gcm</guid>
      <description>&lt;p&gt;Docker has revolutionized the way we build, ship, and run applications, offering developers an efficient way to manage containerized environments. Among the numerous Docker commands, docker run and docker start are two of the most commonly used, yet they often cause confusion among beginners. This blog post will clarify the difference between the docker run and docker start commands, provide walkthroughs for their usage, and discuss use cases where each is applicable.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Docker Run Command
&lt;/h2&gt;

&lt;p&gt;The docker run command creates and starts a new container from an image. Think of it as a two-in-one command: it initializes a container (if one doesn’t already exist) and starts it immediately. The syntax is docker run, followed by the options, image name, startup command, and arguments.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run [OPTIONS] IMAGE [COMMAND] [ARG...]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Some key options you will often encounter include:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-d: Runs the container in detached mode (in the background).
-it: Runs the container interactively with a terminal.
--name: Assigns a custom name to the container.
-p: Maps host and container ports.
-v: Mounts a volume to persist data.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Running a Docker Container
&lt;/h2&gt;

&lt;p&gt;Let’s create a new container to run an Nginx web server. I’m going to use the integrated terminal in Docker Desktop. First, we need to pull the Nginx image using the docker pull command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker pull nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, we will run the container for the nginx image using the docker run command. We will give the container the name my-nginx, then map port 8080 on the Docker host to TCP port 80 in the container. We will run the container in detached mode and then specify the image name.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run --name my-nginx -p 8080:80 -d nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We can verify that the container is running in Docker Desktop. Clicking the link in the Ports column will open the Nginx start page.&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%2Ff9yeufdp5ds22im2fwrl.jpg" 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%2Ff9yeufdp5ds22im2fwrl.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can stop the container by clicking stop next to the container name. The container will exit but still exist in a “stopped” state.&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%2Fskvc0cnrbjetumouq40l.jpg" 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%2Fskvc0cnrbjetumouq40l.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Docker Start Command
&lt;/h2&gt;

&lt;p&gt;The docker start command is used to restart an existing container that was previously stopped. Unlike docker run, it does not create a new container.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker start [OPTIONS] CONTAINER&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Some options you may encounter frequently include:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-i: Attaches STDIN for interactive mode.
-a: Attaches the container’s output (logs).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now let’s start our stopped nginx container. You can either click the start button next to the stopped container in Docker Desktop or use the docker start command with the name of the container.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker start my-nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should see a green bullet indicating that the container is running. Click on the port link and you should see the nginx welcome page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences Between Docker Run vs Docker Start Commands
&lt;/h2&gt;

&lt;p&gt;The key difference between Docker run and start is that Docker run creates and starts a new container whereas Docker start starts an existing stopped container.&lt;/p&gt;

&lt;p&gt;Some use cases for the Docker run command include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First-time setup: Use docker run when creating a container from an image for the first time.&lt;/li&gt;
&lt;li&gt;    Different configurations: If you need a container with a different setup (e.g., custom ports, environment variables), docker run allows you to configure these at runtime.&lt;/li&gt;
&lt;li&gt;    Stateless apps: For containers where you don’t need to retain any data, docker run is ideal since it creates a fresh instance every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some use cases for the Docker start command include:    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusing containers: When you want to resume a container that was previously stopped without losing its state or data.&lt;/li&gt;
&lt;li&gt;    Preserving logs and files: Stopped containers retain their logs and file systems. Use docker start to pick up where you left off.&lt;/li&gt;
&lt;li&gt;    Faster startup: Starting an existing container is quicker than creating a new one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding the difference between docker run vs docker start is crucial for efficient Docker usage. While docker run is the go-to for creating new containers, docker start shines in scenarios where you need to resume work on an existing one. Mastering these commands will help streamline your workflow and improve container management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Valuable Learning Resources Delivered To Your Inbox Every Wednesday!
&lt;/h2&gt;

&lt;p&gt;You can learn more about this topic in my Tech Career Newsletter. This newsletter will give you insight into multiple stages of your career so that you can form your career plan, overcome learning blockers, and stay competitive in today’s crowded job market. It includes featured content from authors and influencers in my network to help you navigate your career and learn new skills. Subscribe today at &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;hoffstech.com/newsletter&lt;/a&gt; and set yourself up for career success!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dealing with Layoffs</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Wed, 04 Dec 2024 16:50:41 +0000</pubDate>
      <link>https://dev.to/sbenhoff/dealing-with-layoffs-1f3a</link>
      <guid>https://dev.to/sbenhoff/dealing-with-layoffs-1f3a</guid>
      <description>&lt;p&gt;Dealing with layoffs is an unfortunate reality in the tech industry, where shifting market demands, economic pressures, and organizational restructuring can lead to workforce reductions. If you’ve recently been laid off or know someone who has, it’s essential to approach the situation strategically. Here’s how to cope, rebuild, and thrive after a layoff.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Acknowledge Your Emotions
&lt;/h2&gt;

&lt;p&gt;Experiencing a layoff can trigger the five stages of grief—denial, anger, bargaining, depression, and acceptance—each playing a unique role in the emotional process. At first, denial may manifest as disbelief, making it hard to grasp the reality of the situation. Anger can follow, directed at the company, managers, or even the broader economic climate. During bargaining, you might find yourself wishing things could have gone differently, replaying scenarios where the layoff might have been avoided. Depression may settle in as the weight of uncertainty about the future takes hold, but this stage is also a time for self-reflection. Finally, acceptance brings clarity and readiness to move forward, allowing you to channel your energy into rebuilding your career. Recognizing these stages can help you process your emotions constructively and emerge stronger.&lt;/p&gt;

&lt;p&gt;It doesn’t help that layoffs tend to happen at the start or during Q4 of the calendar year which is right before the holidays. And, of course, companies tend not to hire during this time and there’s an uptick in available jobs starting in late January. Being unemployed and uncertain about your future during the holidays is hard but you should focus on the good in your life and spend time with family and friends who understand your situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review Your Finances
&lt;/h2&gt;

&lt;p&gt;After a layoff, reviewing your finances is a critical first step to maintaining stability. Start by evaluating your savings, expenses, and any severance or unemployment benefits available. Identify essential expenses and areas to cut costs, such as pausing subscriptions, reducing dining out, or renegotiating bills like insurance or utilities. Simultaneously, consider opportunities to generate passive income. For instance, creating content on platforms like YouTube can be rewarding in terms of sharing knowledge, building a following, and earning ad revenue or sponsorships over time. Additionally, explore selling digital products like e-books, launching a podcast, or offering an online course in your area of expertise. Diversifying income streams not only cushions financial pressures but also opens new avenues for long-term growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluate Your Career Goals
&lt;/h2&gt;

&lt;p&gt;A layoff can be a pivotal moment to reevaluate your career goals and align them with your passions and skills. Consider whether you want to stay in your current field or pivot to a new role or industry. Reflect on what aspects of your previous job brought you fulfillment and where you felt limited. This is also a chance to explore emerging trends, such as AI or green technology, and determine if your skills align with these growing sectors. Setting clear, actionable goals can help you focus your job search and steer your career in a more satisfying direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade Your Skills
&lt;/h2&gt;

&lt;p&gt;The tech industry evolves rapidly, and staying competitive often requires continuous learning. Use your downtime to sharpen existing skills or acquire new ones.&lt;/p&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Online Platforms: Websites like Pluralsight, Udemy, and LinkedIn Learning offer affordable courses in programming, project management, and more.&lt;/li&gt;
&lt;li&gt;    Certifications: Consider certifications like AWS, Google Cloud, or Scrum Master to boost your resume.&lt;/li&gt;
&lt;li&gt;    Community Projects: Look out for hackathons or coding meetups (e.g., via Meetup.com) where open-source contributions are often encouraged.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reconnect with Your Network
&lt;/h2&gt;

&lt;p&gt;Your professional network can be invaluable in helping you find new opportunities. Reach out to former colleagues, mentors, and industry contacts to let them know you’re seeking your next role.&lt;/p&gt;

&lt;p&gt;Strategies:   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn: Update your profile to reflect your most recent achievements and post about your job search (if you feel comfortable doing so).&lt;/li&gt;
&lt;li&gt;    Meetups and Events: Attend local or virtual industry meetups to expand your connections.&lt;/li&gt;
&lt;li&gt;    Alumni Networks: Leverage alumni associations or previous employer networks for job leads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prepare Your Cover Letter and Resume
&lt;/h2&gt;

&lt;p&gt;A strong cover letter and resume can set you apart in a competitive job market. Tailor your resume to each role by highlighting relevant skills and quantifiable achievements, such as “led a team of 10 developers to deliver a project 20% under budget.” For the cover letter, avoid generic statements and instead demonstrate enthusiasm for the company and role by connecting your experience to their mission and needs. Keep both documents concise, well-formatted, and free of errors to leave a lasting impression on hiring managers. Remember to customize your applications to reflect the unique requirements of each role. A generic resume or cover letter is less likely to stand out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore Alternatives to Full-Time Employment
&lt;/h2&gt;

&lt;p&gt;Consider alternative career paths if traditional full-time roles are not immediately available. Some of your options include:    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Freelancing: Platforms like Upwork and Toptal connect tech professionals with project-based work.&lt;/li&gt;
&lt;li&gt;    Consulting: Offer expertise to smaller companies or startups on a short-term basis.&lt;/li&gt;
&lt;li&gt;    Entrepreneurship: Use your skills to launch a side hustle or startup idea.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Layoffs, while painful, can serve as a turning point for growth. By approaching the situation with a clear plan and a positive mindset, you can emerge stronger, more skilled, and ready for the next phase of your career.&lt;/p&gt;

&lt;p&gt;You can learn more about setting yourself up for success and standing out above the crowd in my book, Lead Developer Career Guide. Learn the skills you need to move through your tech career, with expert advice on mentoring teams, handling clients and project managers, and keeping your head in emergencies. &lt;a href="https://amzn.to/3ODOvgn" rel="noopener noreferrer"&gt;Click here&lt;/a&gt; to get your copy from Amazon!&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
    </item>
    <item>
      <title>Lead Developer Career Guide – on Amazon!</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Wed, 20 Nov 2024 19:49:51 +0000</pubDate>
      <link>https://dev.to/sbenhoff/lead-developer-career-guide-on-amazon-516h</link>
      <guid>https://dev.to/sbenhoff/lead-developer-career-guide-on-amazon-516h</guid>
      <description>&lt;p&gt;I’m thrilled to announce the release of my book, Lead Developer Career Guide, now available on &lt;a href="https://amzn.to/3Zp13i9" rel="noopener noreferrer"&gt;Amazon&lt;/a&gt; in both print and Kindle formats! After years of working in tech and supporting developers at every stage of their careers, I wrote this guide to help others achieve the skills and mindset needed to become successful leaders in our industry. Steve Buchanan, author and Principal PM Manager at Microsoft, wrote the foreword. You can check it out on Amazon here: &lt;a href="https://amzn.to/3Zp13i9" rel="noopener noreferrer"&gt;Lead Developer Career Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Wrote Lead Developer Career Guide
&lt;/h2&gt;

&lt;p&gt;As a developer who moved into leadership roles, I realized there was a gap in resources available for guiding developers who wanted to grow their leadership skills and advance their careers. I’ve had countless conversations with developers who feel ready to take on more responsibility but don’t know how to make that transition. This book is the resource I wish I’d had early on, and I’m excited to share the insights I’ve gathered to support you on your journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Inside
&lt;/h2&gt;

&lt;p&gt;In Lead Developer Career Guide, I cover all the skills and strategies developers need to become effective leaders, including:    &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building a Leadership Mindset: Learn how to think like a leader and take responsibility for your team’s success.&lt;/li&gt;
&lt;li&gt;Communication Skills: From feedback to conflict resolution, mastering communication is essential for any developer leader.&lt;/li&gt;
&lt;li&gt;Coaching and Mentoring: Discover techniques to support your team’s growth and create a collaborative work environment.&lt;/li&gt;
&lt;li&gt;Career Growth Strategies: Practical advice on how to advance your career, set goals, and achieve work-life balance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each chapter includes actionable advice, tips, and examples from real-world scenarios that I’ve encountered throughout my career. Whether you’re a developer hoping to take on more leadership responsibilities, or you’re already in a lead role looking to improve your skills, this guide provides a clear roadmap for growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Studies
&lt;/h2&gt;

&lt;p&gt;This book includes case studies from other authors and influencers in my network. I want to thank them for taking the time to speak with me and review the final product. Contributors include Chloe Condon, Dan Wahlin, Deborah Kurata, Edidiong Asikpo, Gabriela Martinez Sanchez, Jamie Maguire, Maureen Josephine Onyango, Ryan Lewis, Scott Hanselman, and Steve Buchanan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who This Book Is For
&lt;/h2&gt;

&lt;p&gt;This book is for developers of all levels who want to excel in leadership roles, from those just beginning their journey to seasoned leaders looking to refine their approach. I also wrote it for anyone passionate about fostering a positive, inclusive work environment where teams can thrive. If you’re eager to elevate your impact and make meaningful contributions to your team, this book is for you.&lt;br&gt;
Join Me on This Journey&lt;/p&gt;

&lt;p&gt;Writing Lead Developer Career Guide has been a labor of love, and I’m honored to be able to share it with all of you. I can’t wait to hear your thoughts on the book, and I’m excited to see how it will help developers grow their skills, take on new challenges, and build fulfilling careers in leadership.&lt;/p&gt;

&lt;p&gt;Thank you for your support, and I look forward to hearing how &lt;a href="https://amzn.to/3Zp13i9" rel="noopener noreferrer"&gt;Lead Developer Career Guide&lt;/a&gt; impacts your career journey!&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>What is a Container Registry</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Mon, 11 Nov 2024 17:31:29 +0000</pubDate>
      <link>https://dev.to/sbenhoff/what-is-a-container-registry-2594</link>
      <guid>https://dev.to/sbenhoff/what-is-a-container-registry-2594</guid>
      <description>&lt;p&gt;What is a container registry? In this article, we’ll dive into what a container registry is, how it differs from a repository, and why both are essential for containerized applications. We’ll also cover how to use public and private repositories on Docker Hub. So, first things first: What exactly is a container registry? The terms registry and repository in Docker are closely related but refer to different things. Here’s a breakdown of each:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Container Registry
&lt;/h2&gt;

&lt;p&gt;A container registry is a service where Docker images are stored and managed. It’s essentially a centralized location that hosts one or more repositories, allowing users to store, share, and distribute Docker images. Think of it as a server or library where images are kept and managed.&lt;/p&gt;

&lt;p&gt;Common examples of container registries include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Hub: A public registry hosted by Docker where users can share images publicly or privately.&lt;/li&gt;
&lt;li&gt;Amazon ECR (Elastic Container Registry): A private registry service by AWS.&lt;/li&gt;
&lt;li&gt;Google Container Registry: A private registry service by Google Cloud.&lt;/li&gt;
&lt;li&gt;Private Registries: Organizations can also set up their own private container registries within their infrastructure, often using open-source tools like Harbor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;A repository is a specific location within a registry where a particular image, or a set of related images, is stored. Repositories are used to organize images, often by software name or project. For example, you might have a repository for nginx or my-app.&lt;/p&gt;

&lt;p&gt;Each repository can contain multiple versions (or tags) of an image. For example, the nginx repository on Docker Hub has tags like latest, 1.19, 1.20, which represent different versions of the nginx image.&lt;/p&gt;

&lt;p&gt;Example to Illustrate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Registry: Docker Hub (the entire platform).&lt;/li&gt;
&lt;li&gt;Repository: nginx (a specific project or application within Docker Hub).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you refer to an image with docker pull nginx:latest, you are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accessing the registry (Docker Hub by default unless specified otherwise).&lt;/li&gt;
&lt;li&gt;Pulling an image from a specific repository (nginx).&lt;/li&gt;
&lt;li&gt;Fetching a specific tag or version (latest).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Docker Hub is the most popular public registry out there, and it’s an excellent resource for anyone working with Docker. Docker Hub hosts official images for many popular applications, libraries, and even complete environments. You’ll find images for popular applications like MySQL, NGINX, Redis, and even the operating systems you may want to use in your containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with a Public Repository
&lt;/h2&gt;

&lt;p&gt;Let’s jump into some hands-on examples. First, we’ll start with public repositories, which are visible to everyone.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Docker Desktop. This is the application you need to run Docker commands and it’s available for Windows, Mac, and Linux.&lt;/li&gt;
&lt;li&gt;Go to Docker Hub, and if you don’t have an account, create one—it’s free and only takes a minute.&lt;/li&gt;
&lt;li&gt;Once you’re logged in, you can search for any public image you might need. Look up the ‘nginx’ image, a popular web server.&lt;/li&gt;
&lt;li&gt;Make sure you’re logged into your Docker Hub account in Docker Desktop so that you can pull and push images to and from your registry (we’ll get into that in a bit).&lt;/li&gt;
&lt;li&gt;Switch to your terminal in Docker Desktop. We can pull the nginx image from Docker Hub by running this command: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;docker pull nginx&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%2Fei4j89onh89zkevix07t.jpg" 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%2Fei4j89onh89zkevix07t.jpg" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can verify that the image has been pulled by going to the images tab.&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%2Fsvtpkk3u3sweqtml6923.jpg" 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%2Fsvtpkk3u3sweqtml6923.jpg" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This command pulls the latest ‘nginx’ image from Docker Hub to your local machine. After pulling, you can run it using a simple command like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -d -p 8080:80 nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And just like that, you’ve started an nginx server on your machine! Now, you can access it at &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;. With public images, it’s that easy to start running well-maintained applications. But let’s say you want to store this image in your own public repository.&lt;/p&gt;

&lt;p&gt;Go to Docker Hub and on the repositories tab, click create repository. Name the repository nginx and set it to public. Then, click Create. Notice how it shows you the docker command to push to this repository. You just need to have your username in the tag for the image so let’s go ahead and set that up.&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%2Fdeqig1wopjfmmab30vaj.jpg" 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%2Fdeqig1wopjfmmab30vaj.jpg" alt="Image description" width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back in the terminal, type the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker tag nginx username/nginx:v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will set a tag that is linked to your repository and it includes the version which is a best practice. Now we can push this to our public repository on docker hub by typing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker push username/nginx:v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once that’s done, you can verify that the image was pushed by going to the repository in Docker Hub.&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%2F2n0manzaim5h6vz7spc3.jpg" 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%2F2n0manzaim5h6vz7spc3.jpg" alt="Image description" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with a Private Repository
&lt;/h2&gt;

&lt;p&gt;Public images are great, but what if you want to store a private image that only you or your team members can access? Docker Hub offers private repositories for this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Docker Hub, go to your dashboard and click on ‘Create Repository.’&lt;/li&gt;
&lt;li&gt;Give your repository a name, I’ll call this nginx-private, set it to ‘Private,’ and click ‘Create.’&lt;/li&gt;
&lt;li&gt;If you were adding team members to this repository, you would do that on the collaborators tab which requires a paid subscription.&lt;/li&gt;
&lt;li&gt;Now, let’s tag and push an image from your local environment to this private repository.&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%2Ffczl9cgufgqaz70t51jm.jpg" 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%2Ffczl9cgufgqaz70t51jm.jpg" alt="Image description" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back in the terminal, we’re going to do the same thing we did earlier for the public repository. We’ll tag our image:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker tag nginx username/nginx-private:v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, we can push this image to our private repository by typing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker push sbenhoff/nginx-private:v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command works because we are logged into Docker Hub via Docker Desktop. If you’re using a different terminal, you would have to log into your Docker Hub account using the docker login command. And again, once that’s done, you can verify that the image was pushed by going to the repository in Docker Hub.&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%2F07qv3qgmikhp59erim5x.jpg" 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%2F07qv3qgmikhp59erim5x.jpg" alt="Image description" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To pull the private image from Docker Hub on another machine or by a team member, they’ll need Docker Hub credentials and permission to access the repository.&lt;/p&gt;

&lt;p&gt;Once logged in, they can pull the image using the standard command format:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker pull username/nginx-private:v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After pulling, they can run the image just like any other container. With Docker Hub’s private repositories, you have more control over who can access your sensitive or work-specific images.&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;So, to summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A container registry, like Docker Hub, stores your Docker images and can be public or private.&lt;/li&gt;
&lt;li&gt;Public images on Docker Hub are freely available for everyone, which is fantastic for quick access to popular software.&lt;/li&gt;
&lt;li&gt;Private repositories on Docker Hub let you secure images for specific teams or purposes, giving you added privacy and control.&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%2Ffwoabxsro9havvxawdjm.jpg" 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%2Ffwoabxsro9havvxawdjm.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get Valuable Learning Resources Delivered To Your Inbox Every Wednesday!&lt;/p&gt;

&lt;p&gt;You can learn more about this topic in my &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Tech Career Newsletter&lt;/a&gt;. This newsletter will give you insight into multiple stages of your career so that you can form your career plan, overcome learning blockers, and stay competitive in today’s crowded job market. It includes featured content from authors and influencers in my network to help you navigate your career and learn new skills. &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Subscribe&lt;/a&gt; today and set yourself up for career success!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>container</category>
      <category>containers</category>
    </item>
    <item>
      <title>Scrum 101: A Beginner's Guide to Agile Project Management</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Mon, 04 Nov 2024 20:15:04 +0000</pubDate>
      <link>https://dev.to/sbenhoff/scrum-101-a-beginners-guide-to-agile-project-management-583b</link>
      <guid>https://dev.to/sbenhoff/scrum-101-a-beginners-guide-to-agile-project-management-583b</guid>
      <description>&lt;p&gt;Scrum is a lightweight methodology that allows teams to deliver valuable results quickly and effectively. It's based on the Agile principles of flexibility, collaboration, and continuous improvement. The Scrum framework consists of a set of practices and roles that work together to deliver high-quality products in a timely manner. The three key roles in Scrum are the Product Owner, the Scrum Master, and the Development Team. Here's a quick Scrum 101 beginners guide to help you get started using the Scrum framework.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Product Owner
&lt;/h2&gt;

&lt;p&gt;The Product Owner is responsible for defining the product vision and ensuring that the team is working on the highest-priority features. They are the voice of the customer and work closely with stakeholders to understand their needs and expectations. The Product Owner creates and maintains the product backlog, which is a list of features that need to be developed. They prioritize the backlog based on the value each feature provides to the customer. Throughout the project, the Product Owner ensures that the team is delivering a product that meets the customer's needs and provides value to the business.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scrum Master
&lt;/h2&gt;

&lt;p&gt;The Scrum Master is a servant leader who facilitates the Scrum process and ensures that the team follows the Scrum framework. They coach the team on Scrum practices and principles, and help them identify and remove any obstacles that may prevent them from delivering value. The Scrum Master is responsible for facilitating Scrum ceremonies, such as the Daily Scrum, Sprint Review, and Sprint Retrospective. They also ensure that the team is following the Scrum values of commitment, courage, focus, openness, and respect. The Scrum Master helps the team improve their process and performance over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development Team
&lt;/h2&gt;

&lt;p&gt;The Development Team is responsible for building the product and delivering it in iterations called Sprints. The Development Team is self-organizing and cross-functional, meaning that it includes all the skills needed to deliver the product. The team members collaborate closely to build the product and may pair program or work in small groups to complete tasks. The Development Team is responsible for estimating the effort required to complete each feature, selecting items from the backlog to work on during the Sprint, and delivering a potentially shippable product increment at the end of each Sprint. The team is also responsible for continuously improving their process and performance over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Scrum
&lt;/h2&gt;

&lt;p&gt;One of the main benefits of Scrum is that it allows teams to adapt to changes quickly. For example, let's say you're working on a software development project and the customer requests a new feature. With Scrum, you can easily add the new feature to the backlog and prioritize it based on the customer's needs. The team can then work on the feature in the next Sprint, which typically lasts two to four weeks. This allows the team to deliver value to the customer quickly and respond to changing requirements as needed.&lt;/p&gt;

&lt;p&gt;Another benefit of Scrum is that it promotes collaboration and transparency. The Scrum framework includes several ceremonies, such as the Daily Scrum, Sprint Review, and Sprint Retrospective, which allow the team to communicate and collaborate effectively. For example, during the Daily Scrum, the team members discuss what they accomplished the previous day, what they plan to do today, and if there are any obstacles or issues that need to be addressed. This allows the team to stay aligned and identify any issues early on.&lt;/p&gt;

&lt;p&gt;Finally, Scrum encourages continuous improvement. During the Sprint Retrospective, the team reflects on the Sprint and identifies what went well, what didn't go well, and what can be improved in the next Sprint. This allows the team to learn from their mistakes and make adjustments as needed.&lt;/p&gt;

&lt;p&gt;Scrum is a powerful Agile project management framework that can help teams deliver high-quality products quickly and efficiently. By using Scrum, project managers can promote collaboration, transparency, and continuous improvement within their teams. If you're new to Scrum, consider taking a Scrum Master certification course or working with a Scrum coach to help you get started.&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%2F9clop58sabz3wyg6dpgp.jpg" 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%2F9clop58sabz3wyg6dpgp.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get Valuable Learning Resources Delivered To Your Inbox Every Wednesday!&lt;/p&gt;

&lt;p&gt;You can learn more tips on learning soft skills for devs in my &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Tech Career Newsletter&lt;/a&gt;. This newsletter will give you insight into multiple stages of your career so that you can form your career plan, overcome learning blockers, and stay competitive in today's crowded job market. It includes featured content from authors and influencers in my network to help you navigate your career and learn new skills. &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Subscribe&lt;/a&gt; today and set yourself up for career success!&lt;/p&gt;

</description>
      <category>agile</category>
      <category>scrum</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>How To Overcome Imposter Syndrome In The Workplace</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Sat, 17 Jun 2023 15:46:32 +0000</pubDate>
      <link>https://dev.to/sbenhoff/how-to-overcome-imposter-syndrome-in-the-workplace-5c11</link>
      <guid>https://dev.to/sbenhoff/how-to-overcome-imposter-syndrome-in-the-workplace-5c11</guid>
      <description>&lt;p&gt;Imposter syndrome can be a common challenge for Junior Developers. It's the feeling that you don't belong, that you're not good enough, and that any day now, someone will find out that you're a fraud. These thoughts can be demotivating and can hold you back from achieving your full potential. However, the good news is that you can learn how to overcome imposter syndrome in the workplace with the right mindset and strategies.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Recognize Your Own Accomplishments
&lt;/h2&gt;

&lt;p&gt;It's important to recognize your accomplishments and celebrate your successes, no matter how small they may seem. Take the time to reflect on what you've achieved so far in your career, whether it's a successful project, a new skill you've learned, or positive feedback from colleagues. Write down your accomplishments and keep them in a place where you can see them regularly, such as a sticky note on your computer screen or a note on your phone. This will help you remember your achievements and boost your confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embrace Learning Opportunities
&lt;/h2&gt;

&lt;p&gt;It's normal to feel like you don't know everything. But the truth is, no one knows everything, and there's always something new to learn. Embrace learning opportunities, whether it's taking on a challenging project or attending a conference. This will help you grow your skills and knowledge, and it will also help you realize that everyone has something to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect With Others
&lt;/h2&gt;

&lt;p&gt;Connecting with others in your field can be a great way to overcome imposter syndrome. Attend meetups, join online forums, or find a mentor who can offer guidance and support. Talking to others about their experiences and challenges can help you realize that you're not alone in your feelings of self-doubt. You may even find that others look up to you for your unique perspective and skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice Self-Care
&lt;/h2&gt;

&lt;p&gt;Taking care of your physical and mental health is important for overcoming imposter syndrome. Make sure you're getting enough sleep, eating healthy, and taking breaks when you need them. Exercise can also be a great way to relieve stress and improve your mood. Additionally, consider talking to a therapist or counselor if you're struggling with imposter syndrome or other mental health issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reframe Negative Thoughts
&lt;/h2&gt;

&lt;p&gt;When you start to feel like an imposter, try to reframe your thoughts in a more positive light. Instead of thinking, "I don't know what I'm doing," try thinking, "I'm still learning, and that's okay." Instead of focusing on your mistakes, focus on what you've learned from them. Remember that everyone makes mistakes, and they're an opportunity to grow and improve.&lt;/p&gt;

&lt;p&gt;Imposter syndrome can be a challenge for Junior Developers, but it can be overcome with the right mindset and strategies. Remember to recognize your accomplishments, embrace learning opportunities, connect with others, practice self-care, and reframe negative thoughts. By doing so, you can boost your confidence and achieve your full potential in the workplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn More Tips On How To How To Overcome Imposter Syndrome in the Workplace With My Tech Career Newsletter!
&lt;/h2&gt;

&lt;p&gt;Get Valuable Learning Resources Delivered To Your Inbox Every Wednesday!&lt;/p&gt;

&lt;p&gt;You can learn more tips on how to overcome imposter syndrome in the workplace for Junior Developers, Senior Developers, Lead Developers, Project Managers, and Tech Leadership in my &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Tech Career Newsletter&lt;/a&gt;. This newsletter will give you insight into multiple stages of your career so that you can form your career plan, overcome learning blockers, and stay competitive in today's crowded job market. It includes featured content from authors and influencers in my network to help you navigate your career and learn new skills. &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Subscribe&lt;/a&gt; today and set yourself up for career success!&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
    </item>
    <item>
      <title>How To Create a GitHub Portfolio</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Sat, 10 Jun 2023 18:16:24 +0000</pubDate>
      <link>https://dev.to/sbenhoff/how-to-create-a-github-portfolio-35d8</link>
      <guid>https://dev.to/sbenhoff/how-to-create-a-github-portfolio-35d8</guid>
      <description>&lt;p&gt;Learning how to create a GitHub portfolio is a great way to showcase your work as a Junior Developer and make it easy for potential employers or collaborators to see what you can do. In this step-by-step guide, we'll walk you through the process of creating a portfolio using GitHub Pages.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 1: Create a GitHub account
&lt;/h2&gt;

&lt;p&gt;If you don't already have one, create a GitHub account. This will give you access to all of the tools you need to create your portfolio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a new repository
&lt;/h2&gt;

&lt;p&gt;Once you're logged in to GitHub, click on the "+" button in the top-right corner of the screen and select "New repository". Give your repository a name (e.g. "portfolio") and select "Public". Then, click "Create Repository".&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%2Fi5jxtz4negacyarx1all.jpg" 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%2Fi5jxtz4negacyarx1all.jpg" alt="Create a GitHub Repository" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Enable GitHub Pages
&lt;/h2&gt;

&lt;p&gt;In the Settings tab of your repository, scroll down to the GitHub Pages section and select "Main" branch as the source. This will enable GitHub Pages for your repository and make your portfolio live at "https://[username].github.io/[repository-name]".&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%2Fglhecji3s4jeehnzb37a.jpg" 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%2Fglhecji3s4jeehnzb37a.jpg" alt="Create GitHub Page" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Clone Your Repository
&lt;/h2&gt;

&lt;p&gt;Next, you need to clone your repository to your local machine. You can do this either by using GitHub Desktop or the command line, whichever you prefer. You can find instructions for this in the code dropdown in your repository and you can clone your repository to any location on your local machine.&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%2Fl8rmgtkmxcsfhvut55mp.jpg" 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%2Fl8rmgtkmxcsfhvut55mp.jpg" alt="Clone a GitHub Repository" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Create the HTML and CSS for your portfolio
&lt;/h2&gt;

&lt;p&gt;Now it's time to create the HTML and CSS that will make up the pages of your portfolio. You can do this using a code editor like Visual Studio Code, and you can use a framework like Bootstrap to make the process easier. There are also many free templates available to help you get started. Here's a &lt;a href="https://github.com/nisarhassan12/portfolio-template" rel="noopener noreferrer"&gt;link&lt;/a&gt; to the template I'm using.&lt;/p&gt;

&lt;p&gt;You can also include screenshots and a brief description of your projects to give visitors an idea of what you've been working on.&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%2F3vr9ytoyxwlxcs8ovwmf.jpg" 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%2F3vr9ytoyxwlxcs8ovwmf.jpg" alt="GitHub Portfolio Template" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Optimize for SEO
&lt;/h2&gt;

&lt;p&gt;To optimize your portfolio for search engines, make sure to include keywords in your HTML files, including your skill sets in your title, description, and headings. You can also include meta tags to help search engines understand what your portfolio is about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Share your portfolio
&lt;/h2&gt;

&lt;p&gt;Once you've finished creating your portfolio, push your code to your repository. You can do this using the Source Control panel for VSCode.&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%2Fifmc49zsezrz9cqu990z.jpg" 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%2Fifmc49zsezrz9cqu990z.jpg" alt="VSCode Source Control Panel" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you go back to your repository settings, you should see the url for your website. You can share the link to your portfolio on your social media accounts, on your personal website, or in your email signature.&lt;/p&gt;

&lt;p&gt;And that's it! By following these simple steps, you'll have a professional-looking portfolio that showcases your skills and makes it easy for potential employers or collaborators to learn more about you.&lt;/p&gt;

&lt;p&gt;Learn More Tips On How To Create a GitHub Portfolio In My &lt;a href="https://hoffstech.com/newsletter" rel="noopener noreferrer"&gt;Tech Career Newsletter&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>github</category>
      <category>portfolio</category>
      <category>career</category>
      <category>careerdevelopment</category>
    </item>
    <item>
      <title>How To Run a Docker Container</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Sun, 28 May 2023 19:38:01 +0000</pubDate>
      <link>https://dev.to/sbenhoff/how-to-run-a-docker-container-9if</link>
      <guid>https://dev.to/sbenhoff/how-to-run-a-docker-container-9if</guid>
      <description>&lt;p&gt;Docker is a powerful tool that allows users to easily deploy and run applications in containers. Containers are lightweight, standalone, and executable packages that contain everything an application needs to run, including code, libraries, dependencies, and runtime. They are isolated from the host system and from other containers, making them a convenient and secure way to package and distribute applications. In this article, we will discuss how to run a Docker container.&lt;/p&gt;

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

&lt;p&gt;To run a docker container, you will need to have Docker installed on your system. If you do not have Docker installed, you can download it from the official &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker website&lt;/a&gt; or use a package manager to install it.&lt;/p&gt;

&lt;p&gt;Once Docker is installed, you can run a docker container using the docker run command. The docker run command takes the following syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The IMAGE[:TAG] argument specifies the image to use for the container. The TAG is optional and specifies a specific version of the image to use. If no TAG is specified, the latest version of the image will be used.&lt;/p&gt;

&lt;p&gt;The COMMAND argument specifies the command to run when the container is started such as executing a startup script. This is optional and can be omitted if the image includes a default command.&lt;/p&gt;

&lt;p&gt;The ARG arguments are optional and can be used to pass additional arguments to the command.&lt;/p&gt;

&lt;p&gt;Before starting a container, you may want to first search for the image you want to use. You can do this using the docker search command, which searches the Docker Hub registry for images. For example, to search for an Ubuntu image, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker search ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return a list of available Ubuntu images, along with their names, descriptions, and tags. You can then use the name and tag of the image you want to use with the docker run command.&lt;/p&gt;

&lt;p&gt;Once you have found the image you want to use, you can run a docker container using the docker run command. Here is an example of starting a docker container using the docker run command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -it ubuntu:20.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will start a new container based on the ubuntu:20.04 image and run the bash command inside the container. If the image is not found locally, it will be pulled from the registry. The -it option specifies that the container should run in interactive mode and allocate a pseudo-TTY. This is especially useful for debugging running containers and viewing logs.&lt;/p&gt;

&lt;p&gt;You can use other options with the docker run command to customize the behavior of the container. Some common options include:&lt;/p&gt;

&lt;p&gt;-d: Run the container in detached mode. This means that the container will run in the background and the command prompt will return to the host system.&lt;/p&gt;

&lt;p&gt;-p: Map a port on the host system to a port inside the container. This allows you to access the application inside the container from the host system.&lt;/p&gt;

&lt;p&gt;-v: Mount a volume inside the container. This allows you to persist data across container restarts and share data between the host system and the container.&lt;/p&gt;

&lt;p&gt;For example, to run a container in detached mode and map port 8080 on the host system to port 80 inside the container, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d -p 8080:80 nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This docker command starts a new container based on the nginx image and runs it in detached mode. The -d option specifies that the container should run in the background, while the -p option maps port 8080 on the host system to port 80 inside the container. This allows you to access the web server running inside the container from the host system on port 8080.&lt;/p&gt;

&lt;p&gt;If you wanted to specify a bind mount inside the container, you can use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d -p 8080:80 -v /app:/foo nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the host directory of a bind-mounted volume doesn’t exist, Docker will automatically create this directory on the host for you. In the example above, Docker will create the&amp;nbsp;/app/&amp;nbsp;folder before starting your container.&lt;/p&gt;

&lt;p&gt;There are many options to consider when you are running Docker containers and in this article, I listed the most common options that you are likely to use often. If you want to learn more options for running Docker containers, you can find the full list here.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is a Dockerfile?</title>
      <dc:creator>Shelley Benhoff</dc:creator>
      <pubDate>Fri, 12 May 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/sbenhoff/what-is-a-dockerfile-2k3h</link>
      <guid>https://dev.to/sbenhoff/what-is-a-dockerfile-2k3h</guid>
      <description>&lt;p&gt;When you’re getting started with Docker, it is important to understand what is a Dockerfile. You will work with Dockerfiles in every project you work on regardless of the operating system you’re using in your image. If you want to follow along with the demos in this blog post, you will need the food trucks repo from the Docker community repos. You can find it on their GitHub.&lt;/p&gt;

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

&lt;p&gt;A Dockerfile is similar to a batch script that contains all the commands to build a Docker image. The first line states the base image to begin with and then follow the instructions to install required modules, copy files, and deploy the code which results in a working environment. Every Dockerfile must start with the FROM instruction. This tells Docker what base image to use as you build your final image. In this case, we are using the ubuntu standard OS image. You can find images for many different operating systems and development environments for any technology you’re using.&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%2F9hgagv34qe69qpbxj862.jpg" 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%2F9hgagv34qe69qpbxj862.jpg" alt="Example Dockerfile" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The LABEL instruction adds metadata to an image. A LABEL is a key-value pair. You can add multiple labels to a Dockerfile to include any custom information you want. In this example, we are creating a key named “maintainer” and setting it equal to the text on the right. Labels are visible when you use a docker inspect command to view low-level information on Docker objects which is helpful to keep your projects organized.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LABEL maintainer="Prakhar Srivastav &amp;lt;prakhar@prakhar.me&amp;gt;"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The RUN instruction will execute any commands in a new layer on top of the current image and commit the results. The resulting committed image will be used for the next step in the Dockerfile. All instructions are executed in order so you have to be careful to add your run instructions in the exact order they should be run. In this example, we are installing the required system-wide dependencies for Python and node as these are needed to run the food trucks website.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# install system-wide deps for python and node&lt;br&gt;
RUN apt-get -yqq update&lt;br&gt;
RUN apt-get -yqq install python3-pip python3-dev curl gnupg&lt;br&gt;
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash&lt;br&gt;
RUN apt-get install -yq nodejs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The ADD instruction copies new files, directories or remote file URLs from the  listed on the left and adds them to the filesystem of the image at the  path listed on the right. The destination path is located inside the image that is being built by the Dockerfile.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# copy our application code&lt;br&gt;
ADD flask-app /opt/flask-app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open a terminal and execute the command docker-compose up and then inspect the filesystem of your container to find the destination file path. You can even save this image as a reference to use for later if you want.&lt;/p&gt;

&lt;p&gt;To save an image from a running container, get the container id by typing docker ps. Then, run a docker commit command using the container id and then a custom image name and version. That’s it! You can run the docker images command to confirm your new image has been created.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker commit [container id] [image name]:[image version]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile. In this example, the node package manager commands are run in the working directory that has been defined.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WORKDIR /opt/flask-app&lt;br&gt;
RUN npm install&lt;br&gt;
RUN npm run build&lt;br&gt;
RUN pip3 install -r requirements.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The EXPOSE instruction informs Docker that the container listens on the specified network ports at runtime. EXPOSE does not make the ports of the container accessible to the host.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# expose port&lt;br&gt;
EXPOSE 5000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And finally, we have the CMD instruction. There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect. The main purpose of a CMD is to provide defaults for an executing container. In this example, we are running the app script for the website located in the root of the working directory and naming the app python3.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# start app&lt;br&gt;
CMD [ "python3", "./app.py" ]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it! Stop your running container by executing the docker-compose down command. Go back to the Dockerfile and uncomment everything using the shortcut Ctrl+k+u. Save your work and execute docker-compose up.&lt;/p&gt;

&lt;p&gt;Open a browser and navigate to localhost on port 5000. You should see the foodtrucks website!&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%2F4g0g9dr270nsryc9wwzr.jpg" 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%2F4g0g9dr270nsryc9wwzr.jpg" alt="Food Trucks Website" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>devops</category>
      <category>containers</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
