Get Started with Docker - Part 4: Portainer : How To Deploy Containers The Easy Way

Get Started with Docker - Part 4: Portainer : How To Deploy Containers The Easy Way
Logos Property of Portainer https://portainer.io & Docker https://www.docker.com

If you've been following along so far then you've already managed to get Docker installed on your system and your first Docker container service deployed.

A lot of Docker management can be done through the command line and a lot of people like working with docker compose files and docker run commands in the terminal but this can start to get overly complicated.

via GIPHY

I started out by using Portainer which was a great way to get started with lists of community maintained, curated apps to install with a simple point and click web browser based dashboard. Making it easy to try out loads of different containers quickly from one of theses lists or your own without having to use the terminal.


In this guide, we'll spin up one of the most best ways to manage, deploy and mantain your docker containers from an easy to use Web UI.

We'll be

  • Looking at What Portainer is
  • Going to the project page for Portainer for our build and install instructions
  • SSH into the host machine where Docker is installed
  • Creating a Docker Volume for Portainer Data
  • Spin up and deploy our Portainer Docker Container
  • Configure New Portainer Environment
  • What Are Stacks
  • Set up the Portainer App Store (App Templates)
  • Customise and deploy a stack from the Portainer App Store

What's Portainer?

Portainer is a lightweight management toolset that allows you to easily build, manage, and maintain Docker and Kubernetes environments.

Once deployed and connected to your docker network, you will have a running web service that you can access to help see your running Docker containers.

You can click into your running containers to check out the logs, stop, start or change variables to redeploy.

The main attraction though is the list of ready to use Docker Containers that are included by default but can be added to by custom XML files in the Settings.

There are some drawbacks with managing containers you have deployed using Docker Compose but you can always redeploy in Portainer if you want to manage everything from here.


Portainer Project Page

Portainer is available to license for Business Use but we'll be using the Community Edition.

GitHub - portainer/portainer: Making Docker and Kubernetes management easy.
Making Docker and Kubernetes management easy. Contribute to portainer/portainer development by creating an account on GitHub.

SSH into Docker Install

In this guide we're using a Raspberry Pi running Ubuntu Server Minimal. If you need help with setting that up with docker on your Raspberry Pi then check out the guide below

Get Started with Docker - Part 2a: Raspberry Pi Install
Easily install Docker & Docker Compose on a Raspberry Pi 4 with our step-by-step guide. Start using Docker containers on your Pi in no time at all

Alternatively, you can run the same commands on WSL using Docker Desktop on a Windows machine if you prefer with the guide below

Get Started with Docker - Part 2b: Windows 11 Install Guide
Easily install Docker Desktop & WSL 2 on Windows 11 with our step-by-step guide. Start using Docker containers on Windows in no time at all

via GIPHY

Let's go ahead and Create a Docker Volume for Portainer.


Create a Docker Volume for Portainer

A Docker Volume let's containers store things like settings, databases and config files persistently on the host machine independent of the containers lifecycle.

This let's Portainer keep those settings even if the container is destroyed and recreated e.g. if a new Portainer image has been released or the host machine is rebooted.

via GIPHY

To create a Docker Volume for Portainer we can use the Docker Volume command

docker volume create portainer_data

Then we can deploy Portainer using the below Docker run command, referencing the "portainer_data" Docker Volume we've just created

docker run -d -p 8000:8000 -p 9000:9000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Open a browser and connect to the IP address of your Docker installation and port 9000

The admin username will already be filled in for you so go ahead and set up a password this account and make sure you make a note of this too somewhere safe.

You can untick the Allow collection of anonymous statistics if you don't want to send anything to Portainer

Click Create user

This will bring you to the Portainer Quick Setup Wizard

Click Get Started to proceed using the local environment Portainer is running in.

Click local to explore our local Docker environment.

This will bring us to the Portainer Dashboard for our currently running containers, images, volumes, networks and stacks running in Docker.

The current running container, image and volume is Portainer itself.

We're now ready to start using Portainer and stacks.


What Are Stacks

Portainer deploys Docker Networks, Containers and Services using a similar set up to Docker Compose YML files using Stacks.

These digital recipe files contain everything needed to start a service like OrganizrV2, a Dashboard for all your self-hosted services or Plex, a self hosted Netflix style Media Server for all your home media.

via GIPHY

You can then configure the stack to use the settings that you want and even deploy different versions using the same stack by changing a few variables e.g. the config folder and IP address.

We'll focus more on the manual stack setup in another blog article soon, as in this guide we're going to use a more automated way of doing this.

To try this out we're going to install a privacy-focused version of Google called Whoogle on your server using a custom Portainer App Template List.


Add a custom Portainer App Template List

The most powerful feature in Portainer is the large list of curated images that can be added to make trying out new services or applications and then removing them a breeze.

The default list already contains some services to get started.

We're going to add a new custom list that includes a lot more than the inbuilt list from the Github Portainer Templates by Qballjos

GitHub - Qballjos/portainer_templates: Template file for new portainer setup
Template file for new portainer setup. Contribute to Qballjos/portainer_templates development by creating an account on GitHub.
Portainer V2 Templates for Selfhosted Projects/Homelabs
Template file for new portainer setup

From the Dashboard menu on the left we're going to scroll down to the Settings

There is a JSON file already filled in here with the current default list of stacks from Portainer

Paste the below line in there

https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Template/template.json

Press Save to Apply the settings to your App Templates

We've now got a combined and curated list of the most popular and useful self hosted services and applications to choose from, right inside Portainer.

Think of it as a free Portainer App Store to search for and start up services in a few clicks.

via GIPHY


Customise and deploy a stack from App Templates

One of the reason's many people choose to self-host is to be able to stop giving their digital data and online habits to online services like Google and Meta.

via GIPHY

We're going to self host our own search engine using Google but without having to give up our digital privacy using Whoogle

GitHub - benbusby/whoogle-search: A self-hosted, ad-free, privacy-respecting metasearch engine
A self-hosted, ad-free, privacy-respecting metasearch engine - GitHub - benbusby/whoogle-search: A self-hosted, ad-free, privacy-respecting metasearch engine

Click App Templates if you're not already there and scroll down or search for Whoogle in the list.

Click Whoogle

This will bring you to the App Template setup with the default name whoogle

It will also have the network set to bridge as default which we'll leave for now

Scroll down and click the Plus sign to the left of Advanced Options

For our Port mapping, we'll leave the default host port we connect to as 5001 and container port of 5000

For this tutorial, we're going to use the auto function for Volume mapping instead of the bind function to create a local volume on the host automatically

Scroll down to Actions and click Deploy the container to go ahead and start up our service

You'll be brought back to the Containers Page with your new service getting ready to start.

Refresh the Page and you should see the State should turn green and show as running or in our case healthy

Open a new tab in your browser and go to your Server IP address and port 5001

For our example it's the below

https://192.168.0.23:5001

This will bring you to the Whoogle home page which is hosted on your server.

Check out the configuration options for some really interesting ways to search.

Or just do your first search without giving Google your browsing data along the way

Congratulations, you've deployed your first self hosted service in a container using Portainer.

You can deploy almost everyone of those services on the list using this same method so get exploring and try out some of those complicated services you always wanted to without all the hassle.

Next up we're going to start getting fancy by forwarding custom hostnames using Nginx Proxy Manager and Pi-Hole's Local DNS feature.

via GIPHY


For more Docker Compose files check out ReproDev Recipes on GitHub with Docker Compose files for you to try out

GitHub - reprodev/reprodev-recipes: ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com
ReproDev Recipes is a repository of code snippets and docker compose files from reprodev.com - GitHub - reprodev/reprodev-recipes: ReproDev Recipes is a repository of code snippets and docker compo…

Check out the guide below if you want more information on What Docker is and how to get started

Get Started with Docker - Part 1 : An Intro to Docker
Looking to get started with Docker? Learn about Docker Compose Files, Docker Images, Docker Engine and Docker Desktop in this guide to containers

Don't forget to explore the rest of our website as we build out more content. Stay tuned for more tutorials, tips, and tricks to help you make tech work for you.

If you want to stay up-to-date with regular updates, make sure to subscribe to our free mailing list.