noted.lol Open in urlscan Pro
2a06:98c1:3120::3  Public Scan

Submitted URL: http://noted.lol/install-docker-and-portainer/
Effective URL: https://noted.lol/install-docker-and-portainer/
Submission: On January 12 via manual from FR — Scanned from NL

Form analysis 2 forms found in the DOM

<form class="kg-signup-card-form" data-members-form="signup">
  <div class="kg-signup-card-fields">
    <input class="kg-signup-card-input" id="email" data-members-email="" type="email" required="true" placeholder="Your email">
    <button class="kg-signup-card-button kg-style-accent" style="color: #FFFFFF;" type="submit">
      <span class="kg-signup-card-button-default">Subscribe</span>
      <span class="kg-signup-card-button-loading"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24">
          <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
            <g class="nc-loop-dots-4-24-icon-o">
              <circle cx="4" cy="12" r="3"></circle>
              <circle cx="12" cy="12" r="3"></circle>
              <circle cx="20" cy="12" r="3"></circle>
            </g>
            <style data-cap="butt">
              .nc-loop-dots-4-24-icon-o {
                --animation-duration: 0.8s
              }

              .nc-loop-dots-4-24-icon-o * {
                opacity: .4;
                transform: scale(.75);
                animation: nc-loop-dots-4-anim var(--animation-duration) infinite
              }

              .nc-loop-dots-4-24-icon-o :nth-child(1) {
                transform-origin: 4px 12px;
                animation-delay: -.3s;
                animation-delay: calc(var(--animation-duration)/-2.666)
              }

              .nc-loop-dots-4-24-icon-o :nth-child(2) {
                transform-origin: 12px 12px;
                animation-delay: -.15s;
                animation-delay: calc(var(--animation-duration)/-5.333)
              }

              .nc-loop-dots-4-24-icon-o :nth-child(3) {
                transform-origin: 20px 12px
              }

              @keyframes nc-loop-dots-4-anim {

                0%,
                100% {
                  opacity: .4;
                  transform: scale(.75)
                }

                50% {
                  opacity: 1;
                  transform: scale(1)
                }
              }
            </style>
          </g>
        </svg></span>
    </button>
  </div>
  <div class="kg-signup-card-success" style="color: #FFFFFF;"> Email sent! Check your inbox to complete your signup. </div>
  <div class="kg-signup-card-error" style="color: #FFFFFF;" data-members-error=""></div>
</form>

<form class="gh-form" data-members-form="">
  <input class="gh-form-input" type="email" placeholder="jamie@example.com" required="" data-members-email="">
  <button class="gh-button" type="submit">
    <span><span>Subscribe</span> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" viewBox="0 0 256 256">
        <path d="M224.49,136.49l-72,72a12,12,0,0,1-17-17L187,140H40a12,12,0,0,1,0-24H187L135.51,64.48a12,12,0,0,1,17-17l72,72A12,12,0,0,1,224.49,136.49Z"></path>
      </svg></span>
    <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24">
      <g stroke-linecap="round" stroke-width="2" fill="currentColor" stroke="none" stroke-linejoin="round" class="nc-icon-wrapper">
        <g class="nc-loop-dots-4-24-icon-o">
          <circle cx="4" cy="12" r="3"></circle>
          <circle cx="12" cy="12" r="3"></circle>
          <circle cx="20" cy="12" r="3"></circle>
        </g>
        <style data-cap="butt">
          .nc-loop-dots-4-24-icon-o {
            --animation-duration: 0.8s
          }

          .nc-loop-dots-4-24-icon-o * {
            opacity: .4;
            transform: scale(.75);
            animation: nc-loop-dots-4-anim var(--animation-duration) infinite
          }

          .nc-loop-dots-4-24-icon-o :nth-child(1) {
            transform-origin: 4px 12px;
            animation-delay: -.3s;
            animation-delay: calc(var(--animation-duration)/-2.666)
          }

          .nc-loop-dots-4-24-icon-o :nth-child(2) {
            transform-origin: 12px 12px;
            animation-delay: -.15s;
            animation-delay: calc(var(--animation-duration)/-5.333)
          }

          .nc-loop-dots-4-24-icon-o :nth-child(3) {
            transform-origin: 20px 12px
          }

          @keyframes nc-loop-dots-4-anim {

            0%,
            100% {
              opacity: .4;
              transform: scale(.75)
            }

            50% {
              opacity: 1;
              transform: scale(1)
            }
          }
        </style>
      </g>
    </svg> <svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
      <path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"></path>
      <style>
        .checkmark {
          width: 40px;
          height: 40px;
          display: block;
          stroke-width: 2.5;
          stroke: currentColor;
          stroke-miterlimit: 10;
        }

        .checkmark__check {
          transform-origin: 50% 50%;
          stroke-dasharray: 48;
          stroke-dashoffset: 48;
          animation: stroke .3s cubic-bezier(0.650, 0.000, 0.450, 1.000) forwards;
        }

        @keyframes stroke {
          100% {
            stroke-dashoffset: 0;
          }
        }
      </style>
    </svg> </button>
</form>

Text Content

 * Home
 * Get Started
 * About
 * Sponsors
 * Contact
 * Contribute
 * Sign Up

Sign in Subscribe
Get Started Self Hosting


INSTALL DOCKER AND PORTAINER ON DEBIAN FOR SELF-HOSTING

Install Docker and Portainer with this quick and simple guide sure to have you
self-hosting your own apps in no time at all.

JEREMY

Sep 14, 2023 — 5 min read

When I started tinkering with self-hosting, Docker was by far my biggest hurdle.
But to learn more about Docker, we need to figure out how to install it first.
Then, later will will install and use Portainer to manage and monitor our Docker
containers.

TABLE OF CONTENTS

 1. Install Docker and Portainer on Debian for Self-Hosting
 2. Self Host a Ghost Blog on Your Homelab Using Docker
 3. Setup your Domain using Cloudflare Tunnels and Zero Trust
 4. How to Protect Self Hosted Login Pages using Cloudflare Zero Trust Policies

Docker does a good job at explaining how to install Docker on specific distros.
However, I always found it intimidating with how the instructions are laid out.
So this guide is from a different perspective. A perspective from someone who
once was lost and was learning like you are.

I'll lay it out in a much more simple format for beginners to move forward as
quickly as possible. Aftrall, we live in a "I want it now" society and quite
frankly, that's how I would want to see it done!


UPDATE AND UPGRADE THE HOST MACHINE

It's important to keep your host machine up to date. This can include important
patches that keep your host safe from vulnerabilities.

Step 1. Update the host.

apt update

Step 2. Upgrade the host.

apt upgrade -y


INSTALL DOCKER ON YOUR HOST MACHINE

Docker has made this very simple by creating an official install script that
does all the work for you. You can see what this script includes and how it
works on the Docker Github repo.

> The purpose of the install script is for a convenience for quickly installing
> the latest Docker-CE releases on the supported linux distros. It is not
> recommended to depend on this script for deployment to production systems. For
> more thorough instructions for installing on the supported distros, see
> the install instructions.

I'll be using Ubuntu 23.04 standard on Proxmox to run these commands as root.
You may need to add sudo at the beginning of these commands if you are not
logged in as root.

Step 1. Install curl.

apt install curl

Step 2. Install Docker.

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

Step 3. Check if Docker is functioning.

systemctl status docker

Step 4. Force Docker to start at boot.

systemctl enable docker

This step is not necessary but can make the process of starting docker quicker
by doing it automatically. This way you don't have to manually start Docker when
you reboot your host machine. I haven't seen any official documentation but
Docker always seems to start automatically regardless after testing on my
hardware.

As you get more comfortable with Docker and setting up self-hosted applications,
you'll also find it useful to install Docker Compose and Git along the way.


INSTALL DOCKER COMPOSE ON THE HOST MACHINE

Run the following command to install Docker Compose

apt install docker-compose


INSTALL GIT ON THE HOST MACHINE

You may come across a project that requires you to clone it to your host machine
from Github. To do this, you will need to install Git.

apt install git -y

Now you can use the git clone command to clone repositories to your host
machine.


SETTING UP PORTAINER ON THE HOST MACHINE

I think it's a great idea to learn basic Docker commands because they will come
in handy at a later time. Especially when you want to update Portainer.
Portainer makes managing Docker containers easier and in my opinion, faster. You
want it now right? 😆 Well Portainer will give you a nice graphic interface for
what would otherwise be a much larger learning curve using only the CLI (command
line interface).

Step 1. Install Portainer.

Now that Docker is installed, you can install Portainer using Docker run. Open
your terminal and run the following command to install Portainer.

docker run -d \
--name="portainer" \
--restart on-failure \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

When complete, navigate to your host IP on port 9000. Example: 192.168.1.5:9000.
You will see the Portainer registration page.

If you don't know the host machine IP, you can use the following command to
output the information.

ip addr

Mine is usually always listed under number 2 in the output.

Step 2. Create a Portainer admin account.

I uncheck the collection of anonymous statistics. I don't need anyone knowing
what I do or when I do it, but I am happy to give feedback of course.

Then click "Create user" and log in!


SIGN UP FOR NOTED


MAXIMIZE YOUR HOMELAB POTENTIAL WITH SELF-HOSTING AND OPEN-SOURCE SOLUTIONS.

Subscribe
Email sent! Check your inbox to complete your signup.


No spam. Unsubscribe anytime.


FINAL NOTES AND THOUGHTS

For now, this is a great place to stop and get familiar with Portainer and the
menu within the dashboard. Browse around and check out the different settings
but try not to get overwhelmed by all the technical jargon you may not
understand.

In the next article, we will go over Portainer basics and launching your first
self-hosted application using Portainer and the Docker Compose stacks feature.

Make a Donation ❤️



READ MORE


TINYPILOT VOYAGER 2A - PALM SIZE KVM OVER IP MADE EASY

Let's talk about the TinyPilot Voyager 2a which is an amazing product to make
having headless servers easier to manage.

By Mediacowboy Jan 2, 2024


SNAPP - YET ANOTHER SELF-HOSTED URL SHORTENER

Snapp empowers you to effortlessly create and manage shortened links.

By Jeremy Dec 7, 2023


SELF HOSTING 101 - OOPS WE HAVE TO LEARN WHAT WE BREAK!

From homelab to cloud hosted VPS. Self-hosting has many meanings! Which one is
for you?

By Flavius Nov 27, 2023


DOCKGE - A DOCKER MANAGER FOR SELF-HOSTING ENTHUSIASTS

Finally, A Docker manager tailored to the homelab enthusiast!

By Jeremy Nov 25, 2023
 * Discord
 * RSS
 * Contact
 * As seen on HN
 * Archive

Powered by Ghost


NOTED

Maximize Your Homelab Potential with Self-Hosting and Open-Source Solutions.

Subscribe