{"id":67504,"date":"2023-06-15T22:30:56","date_gmt":"2023-06-15T22:30:56","guid":{"rendered":"https:\/\/linuxiac.com\/?p=67504"},"modified":"2025-08-25T18:41:02","modified_gmt":"2025-08-25T18:41:02","slug":"docker-portainer-install","status":"publish","type":"post","link":"https:\/\/linuxiac.com\/docker-portainer-install\/","title":{"rendered":"How to Install and Use Portainer to Manage Docker Containers"},"content":{"rendered":"\n<p>Managing Docker containers from the command line can quickly become complex, especially as the number of them grows. Portainer simplifies this by providing a web-based interface that lets you deploy, monitor, and control containers, images, networks, and volumes with just a few clicks.<\/p>\n\n\n\n<p>In this guide, I\u2019ll show you how to install Portainer on a Docker host and walk through its basic usage to simplify container management. But before proceeding, some theory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-s-portainer\">What&#8217;s Portainer?<\/h2>\n\n\n\n<p>Portainer is a container management tool that gives you a graphical interface (web-based dashboard) to easily deploy, manage, and monitor containers, images, networks, and volumes, allowing users to interact with Docker easily and perform container-related tasks without complex command-line operations.<\/p>\n\n\n\n<p>Think of it like a control panel for your container infrastructure\u2014especially handy for those who want the power of Docker without memorizing every command-line option.<\/p>\n\n\n\n<p>Additionally, Portainer supports managing multiple Docker hosts, making it an excellent choice for organizations or individuals working with complex Docker deployments across different environments.<\/p>\n\n\n\n<p>What makes it a very attractive option is also that Portainer can work alongside&nbsp;<a href=\"https:\/\/linuxiac.com\/how-to-install-and-use-docker-compose\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker Compose<\/a>, allowing users to easily deploy and manage the entire application stack defined in the Compose file, view the status and logs of individual containers, and scale services as needed.<\/p>\n\n\n\n<p>Finally, the application is not limited to Docker only. Portainer also supports Kubernetes and Docker Swarm, allowing admins to manage and secure the cluster quickly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s the Portainer Agent?<\/h2>\n\n\n\n<p>Portainer offers a Remote Agent \u2013 a lightweight service that you deploy on the nodes (runs as a container on the remote host) you want Portainer to manage. Think of it as the middleman between your containers and the Portainer server, allowing the management of remote Docker resources.<\/p>\n\n\n\n<p>Furthermore, the agent allows a single Portainer instance to connect to multiple Docker hosts, eliminating the need for direct access to the Dockerized remote host or complex networking configurations.<\/p>\n\n\n\n<p>In simple terms, without the agent, Portainer can only directly manage environments where it has local access (like Docker socket on the same machine). But with the agent in place, you can manage multiple remote Docker or Kubernetes clusters securely from a single Portainer centralized server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Portainer Editions<\/h2>\n\n\n\n<p>Portainer offers two different editions, each catering to different user requirements and environments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Portainer Community Edition (CE)<\/h3>\n\n\n\n<p>Portainer CE is a free and open-source offering for individual users, small teams, and non-commercial use. It provides a user-friendly web interface for managing Docker containers, images, networks, and volumes, suitable for most Docker management needs. It offers a comprehensive set of tools and functionalities without any licensing fees.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Portainer Business Edition (BE)<\/h3>\n\n\n\n<p>Portainer BE is the commercial edition of Portainer, tailored for organizations and enterprise users. It builds upon the features of Portainer CE but includes additional advanced capabilities, support, and services designed to meet the needs of larger teams, complex deployments, and production environments.<\/p>\n\n\n\n<p>For example, Portainer BE offers additional features like role-based access control (RBAC), LDAP\/AD integration, enhanced security features, fine-grained access controls, container lifecycle management, and more.<\/p>\n\n\n\n<p>The table below shows the differences between the two editions.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th><strong>Portainer CE<\/strong><\/th><th>Portainer BE<\/th><\/tr><\/thead><tbody><tr><td><strong>Target Audience<\/strong><\/td><td>Small teams, hobbyists, individual users<\/td><td>Enterprise teams and large organizations<\/td><\/tr><tr><td><strong>User and Role Management<\/strong><\/td><td>Basic RBAC, limited control<\/td><td>Advanced RBAC with granular control<\/td><\/tr><tr><td><strong>Security Features<\/strong><\/td><td>Basic authentication, TLS<\/td><td>SSO, advanced security policies, audit logging<\/td><\/tr><tr><td><strong>Scalability<\/strong><\/td><td>Suitable for small environments<\/td><td>Optimized for large-scale environments<\/td><\/tr><tr><td><strong>Support<\/strong><\/td><td>Community forums, no SLA<\/td><td>Professional support with SLAs<\/td><\/tr><tr><td><strong>Audit Logging<\/strong><\/td><td>No audit logging<\/td><td>Full audit logging for compliance<\/td><\/tr><tr><td><strong>Kubernetes Management<\/strong><\/td><td>Basic Kubernetes support<\/td><td>Advanced features like multi-cluster support<\/td><\/tr><tr><td><strong>Automation<\/strong><\/td><td>Basic container management<\/td><td>Advanced automation and orchestration<\/td><\/tr><tr><td><strong>Registry Management<\/strong><\/td><td>Basic registry support<\/td><td>Advanced registry control and multiple registries<\/td><\/tr><tr><td><strong>Extensions &amp; Plugins<\/strong><\/td><td>Core functionality only<\/td><td>Additional enterprise plugins and integrations<\/td><\/tr><tr><td><strong>Pricing<\/strong><\/td><td>Free and open-source<\/td><td>Paid subscription based on node count<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Prerequisites\">Prerequisites<\/h2>\n\n\n\n<p>Having Docker installed is a must for installing Portainer. So, if you don&#8217;t already have it, here are a few guides to help you do it quickly in just minutes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-desktop-on-ubuntu-24-04-lts\/\" data-type=\"post\" data-id=\"129924\">How to Install Docker on Ubuntu 24.04<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-debian-13-trixie\/\">How to Install Docker on Debian 13 (Trixie)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-arch-linux\/\">How to Install Docker on Arch Linux<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-desktop-on-linux-mint-22\/\" data-type=\"post\" data-id=\"136426\">How to Install Docker on Linux Mint 22<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-almalinux-10\/\">How to Install Docker on AlmaLinux 10<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-fedora-linux\/\">How to Install Docker on Fedora<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-void-linux\/\">How to Install Docker on Void Linux<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-raspberry-pi\/\">How to Install Docker on Raspberry Pi<\/a><\/li>\n<\/ul>\n\n\n\n<p>The other essential component is Docker Compose. It usually comes bundled with Docker when you install it. But if it\u2019s missing on your system, no worries\u2014you can add it with just the two commands below.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">sudo curl -L <span class=\"hljs-string\">\"https:\/\/github.com\/docker\/compose\/releases\/latest\/download\/docker-compose-linux-<span class=\"hljs-variable\">$(uname -m)<\/span>\"<\/span> -o \/usr\/<span class=\"hljs-built_in\">local<\/span>\/bin\/docker-compose\nsudo chmod +x \/usr\/<span class=\"hljs-built_in\">local<\/span>\/bin\/docker-compose<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Finally, if your Linux system uses SELinux, it should be disabled before installing Portainer. However, if you require SELinux, you must pass the <code>--privileged<\/code> flag to Docker when deploying Portainer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Install Portainer<\/h2>\n\n\n\n<p>Before we begin, it is important to note that Portainer can be installed on various platforms, including Linux, Windows, and macOS. This guide will focus on installing Portainer CE (Community Edition) as a free and open-source solution designed for individuals, home labs, and small setups.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Create Docker Volume<\/h3>\n\n\n\n<p>First, we&#8217;ll create a Docker volume called &#8220;<em>portainer_data<\/em>&#8221; to persist Portainer&#8217;s configuration files.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">docker volume create portainer_data<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-01.jpg\"><img decoding=\"async\" width=\"958\" height=\"92\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-01.jpg\" alt=\"Create a Docker volume.\" class=\"wp-image-185108\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-01.jpg 958w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-01-380x36.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-01-768x74.jpg 768w\" sizes=\"(max-width: 958px) 100vw, 958px\" \/><\/a><figcaption class=\"wp-element-caption\">Create a Docker volume.<\/figcaption><\/figure>\n\n\n\n<p>If the operation is successful, the command&#8217;s result will output the volume&#8217;s name.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Install Portainer CE on Linux<\/h3>\n\n\n\n<p>We\u2019ll use Docker Compose to install Portainer since it\u2019s not only more convenient but also way more flexible than running a single Docker command. So, the first step is to create the project directory in which our Docker Compose deployment file will be placed. Then switch to it.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">mkdir portainer\n<span class=\"hljs-built_in\">cd<\/span> portainer<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Next, create a \u201c<em>docker-compose.yml<\/em>\u201d file, which serves as a blueprint for our Docker setup. This file will define the services, volumes, ports, etc., telling Docker Compose what to do and how to set up the Portainer container.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">nano<\/span> <span class=\"hljs-selector-tag\">docker-compose<\/span><span class=\"hljs-selector-class\">.yml<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">services:<\/span>\n  <span class=\"hljs-attr\">portainer:<\/span>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">portainer\/portainer-ce:latest<\/span>\n    <span class=\"hljs-attr\">container_name:<\/span> <span class=\"hljs-string\">portainer<\/span>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span>\n    <span class=\"hljs-attr\">ports:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"9443:9443\"<\/span>   <span class=\"hljs-comment\"># Web UI<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"8000:8000\"<\/span>   <span class=\"hljs-comment\"># Edge agent (optional)<\/span>\n    <span class=\"hljs-attr\">volumes:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\/var\/run\/docker.sock:\/var\/run\/docker.sock<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">portainer_data:\/data<\/span>\n\n<span class=\"hljs-attr\">volumes:<\/span>\n  <span class=\"hljs-attr\">portainer_data:<\/span>\n    <span class=\"hljs-attr\">external:<\/span> <span class=\"hljs-literal\">true<\/span>\n    <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">portainer_data<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>As you can see, the Docker deployment is pretty simple. Now, with everything in place, let\u2019s run our Portainer deployment:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">docker compose up -d<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-04.jpg\"><img decoding=\"async\" width=\"959\" height=\"394\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-04.jpg\" alt=\"Install Portainer CE on Linux.\" class=\"wp-image-185144\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-04.jpg 959w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-04-380x156.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-04-768x316.jpg 768w\" sizes=\"(max-width: 959px) 100vw, 959px\" \/><\/a><figcaption class=\"wp-element-caption\">Install Portainer CE on Linux.<\/figcaption><\/figure>\n\n\n\n<p>The command will pull the Portainer Docker image and start the container. We can check if Portainer is running by typing the command below, which lists our system&#8217;s currently running Docker containers.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">docker ps<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05.jpg\"><img decoding=\"async\" width=\"1093\" height=\"169\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05.jpg\" alt=\"List the currently running Docker containers.\" class=\"wp-image-185150\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05.jpg 1093w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05-380x59.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05-1024x158.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-05-768x119.jpg 768w\" sizes=\"(max-width: 1093px) 100vw, 1093px\" \/><\/a><figcaption class=\"wp-element-caption\">List the currently running Docker containers.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Access the Portainer Web UI<\/h2>\n\n\n\n<p>So far, so good. Now, let\u2019s move to the most exciting part. Open your browser and navigate to \u201c<strong><em>https:\/\/localhost:9443<\/em><\/strong>\u201d (if you access Portainer from the same host) or \u201c<strong><em>https:\/\/&lt;server-ip-address&gt;:9443<\/em><\/strong>\u201c (if you access it remotely). Of course, replace the \u201c<em>&lt;server-ip-address&gt;<\/em>\u201d part with your actual server\u2019s IP address.<\/p>\n\n\n\n<p>Because Portainer issues a self-signed SSL certificate, you are shown a potential security risk message. Accept it to proceed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06.jpg\"><img decoding=\"async\" width=\"1024\" height=\"639\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06-1024x639.jpg\" alt=\"Accept the security warning.\" class=\"wp-image-185156\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06-1024x639.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06-380x237.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06-768x479.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-06.jpg 1300w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Accept the security warning.<\/figcaption><\/figure>\n\n\n\n<p>There\u2019s one little catch worth mentioning. If you wait too long between screens during the initial setup, Portainer\u2019s security feature will kick in, and you\u2019ll end up seeing a page like the one below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07.jpg\"><img decoding=\"async\" width=\"1024\" height=\"639\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07-1024x639.jpg\" alt=\"Portainer instance timed out.\" class=\"wp-image-185162\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07-1024x639.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07-380x237.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07-768x479.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-07.jpg 1300w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Portainer instance timed out.<\/figcaption><\/figure>\n\n\n\n<p>If this happens, restart the container. All you need to do is run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">docker compose down\ndocker compose up -d<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-08.jpg\"><img decoding=\"async\" width=\"1009\" height=\"246\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-08.jpg\" alt=\"Restarting the container.\" class=\"wp-image-185165\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-08.jpg 1009w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-08-380x93.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-08-768x187.jpg 768w\" sizes=\"(max-width: 1009px) 100vw, 1009px\" \/><\/a><figcaption class=\"wp-element-caption\">Restarting the container.<\/figcaption><\/figure>\n\n\n\n<p>Now head back to your browser and give it a quick refresh. You&#8217;ll be taken to a page where you can create the administrative account for your Portainer instance. Enter a username (the default suggestion is &#8220;<em>admin<\/em>&#8220;) and a password of at least 12 characters, then click the &#8220;<em>Create user<\/em>&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09.jpg\"><img decoding=\"async\" width=\"1024\" height=\"673\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09-1024x673.jpg\" alt=\"Create Portainer's admin account.\" class=\"wp-image-185168\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09-1024x673.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09-380x250.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09-768x505.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-09.jpg 1335w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Create Portainer&#8217;s admin account.<\/figcaption><\/figure>\n\n\n\n<p>The &#8220;<em>Quick Setup<\/em>&#8221; page will appear. From here, you can add Docker environments to your Portainer server.<\/p>\n\n\n\n<p>However, since we mounted the host&#8217;s Docker socket to the Portainer container when we started the container, it is already connected. So, click the &#8220;<em>Home<\/em>&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10.jpg\"><img decoding=\"async\" width=\"1024\" height=\"648\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10-1024x648.jpg\" alt=\"Connect to the local Docker instance.\" class=\"wp-image-185180\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10-1024x648.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10-380x240.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10-768x486.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-10.jpg 1411w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connect to the local Docker instance.<\/figcaption><\/figure>\n\n\n\n<p>Portainer will show you it is connected to your local Docker environment, named &#8220;<em>local<\/em>.&#8221; Click on it.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11.jpg\"><img decoding=\"async\" width=\"1024\" height=\"648\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11-1024x648.jpg\" alt=\"Portainer successfully connected to the local Docker environment.\" class=\"wp-image-185186\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11-1024x648.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11-380x240.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11-768x486.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-11.jpg 1411w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Portainer successfully connected to the local Docker environment.<\/figcaption><\/figure>\n\n\n\n<p>Congratulations! From here, using the menu on the left, you can now create and manage your Docker containers, networks, images, and volumes by using the convenient web-based Portainer UI.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12.jpg\"><img decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12-1024x682.jpg\" alt=\"Manage Docker containers with Portainer.\" class=\"wp-image-185189\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12-1024x682.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12-380x253.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12-768x511.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12-1200x800.jpg 1200w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-12.jpg 1416w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Manage Docker containers with Portainer.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Connect Portainer to Remote Docker Environment<\/h2>\n\n\n\n<p>First, you must install the Portainer Agent on the remote host to connect to and manage its Docker containers.<\/p>\n\n\n\n<p>To do so, open an SSH connection to the remote server (which must already have Docker installed on it as a prerequisite). Create the project directory in which our agent&#8217;s deployment file will be placed. Then switch to it.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">mkdir portainer_agent\n<span class=\"hljs-built_in\">cd<\/span> portainer_agent<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Next, create the following \u201c<em>docker-compose.yml<\/em>\u201d file.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">nano docker-compose.yml<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">services:<\/span>\n  <span class=\"hljs-attr\">portainer_agent:<\/span>\n    <span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">portainer\/agent:latest<\/span>\n    <span class=\"hljs-attr\">container_name:<\/span> <span class=\"hljs-string\">portainer_agent<\/span>\n    <span class=\"hljs-attr\">restart:<\/span> <span class=\"hljs-string\">always<\/span>\n    <span class=\"hljs-attr\">ports:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\"9001:9001\"<\/span>\n    <span class=\"hljs-attr\">volumes:<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\/var\/run\/docker.sock:\/var\/run\/docker.sock<\/span>\n      <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-string\">\/var\/lib\/docker\/volumes:\/var\/lib\/docker\/volumes<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p> And finally, deploy it.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">docker compose up -d<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-13.jpg\"><img decoding=\"async\" width=\"974\" height=\"421\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-13.jpg\" alt=\"Deploying Poratiner Agent on a remote Docker host.\" class=\"wp-image-185201\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-13.jpg 974w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-13-380x164.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-13-768x332.jpg 768w\" sizes=\"(max-width: 974px) 100vw, 974px\" \/><\/a><figcaption class=\"wp-element-caption\">Deploying Poratiner Agent on a remote Docker host.<\/figcaption><\/figure>\n\n\n\n<p>Make sure port 9001 is open and that the machine running Portainer can access it. Then, switch back to Portainer, and from the left menu, choose &#8220;<em>Environment-related<\/em>&#8221; -&gt; &#8220;<em>Environments<\/em>,&#8221; then click on the &#8220;<em>Add environment<\/em>&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15.jpg\"><img decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15-1024x649.jpg\" alt=\"Connect Portainer to a remote Docker environment.\" class=\"wp-image-185213\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15-1024x649.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15-380x241.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15-768x487.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-15.jpg 1424w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connect Portainer to a remote Docker environment.<\/figcaption><\/figure>\n\n\n\n<p>Choose &#8220;<em>Docker Standalone<\/em>&#8221; and hit &#8220;<em>Start Wizard<\/em>.&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16.jpg\"><img decoding=\"async\" width=\"1024\" height=\"738\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16-1024x738.jpg\" alt=\"Connect Portainer to a remote Docker environment.\" class=\"wp-image-185216\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16-1024x738.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16-380x274.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16-768x553.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-16.jpg 1424w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connect Portainer to a remote Docker environment.<\/figcaption><\/figure>\n\n\n\n<p>In the &#8220;<em>Name<\/em>&#8221; field, specify a name for the remote Docker environment. Next, enter the server&#8217;s IP address followed by &#8220;<em>:9001<\/em>&#8221; in the &#8220;<em>Environment address<\/em>&#8221; field. Finally, click the &#8220;<em>Connect<\/em>&#8221; button.<\/p>\n\n\n\n<p>You should receive a message that the connection was successful. To return to the Portainer&#8217;s dashboard, click on the logo in the upper left corner.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17.jpg\"><img decoding=\"async\" width=\"1024\" height=\"656\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17-1024x656.jpg\" alt=\"Connect Portainer to a remote Docker environment.\" class=\"wp-image-185222\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17-1024x656.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17-380x243.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17-768x492.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-17.jpg 1424w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connect Portainer to a remote Docker environment.<\/figcaption><\/figure>\n\n\n\n<p>The newly added remote Docker environment is now on the list of available ones. Click on it.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18.jpg\"><img decoding=\"async\" width=\"1024\" height=\"612\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18-1024x612.jpg\" alt=\"Portainer has been successfully connected to a remote Docker environment.\" class=\"wp-image-185228\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18-1024x612.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18-380x227.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18-768x459.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-18.jpg 1424w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Portainer has been successfully connected to a remote Docker environment.<\/figcaption><\/figure>\n\n\n\n<p>You can now manage your remote Docker environment through Portainer, just like your local one.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19.jpg\"><img decoding=\"async\" width=\"1024\" height=\"702\" src=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19-1024x702.jpg\" alt=\"Manage a remote Docker environment.\" class=\"wp-image-185231\" srcset=\"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19-1024x702.jpg 1024w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19-380x260.jpg 380w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19-768x526.jpg 768w, https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/how-to-install-portainer-19.jpg 1424w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Manage a remote Docker environment.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>The installation and usage of Portainer to manage Docker containers provides a powerful and user-friendly solution for efficiently managing containerized applications, making it an ideal tool for individuals and organizations of all sizes.<\/p>\n\n\n\n<p>For additional help or useful information, we recommend you check&nbsp;the official <a href=\"https:\/\/docs.portainer.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Portainer documentation<\/a> or visit the <a href=\"https:\/\/www.portainer.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">project&#8217;s website<\/a>.<\/p>\n\n\n\n<p>Thanks for your time! I hope you find this guide helpful. As always, your feedback and comments are most welcome.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This step-by-step guide shows how to install Portainer to take control of your Docker containers via a convenient GUI.<\/p>\n","protected":false},"author":10,"featured_media":185105,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,4417],"tags":[5233,1439,5350,4980],"class_list":["post-67504","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-linux-knowledge","tag-containerization","tag-docker","tag-portainer","tag-self-hosted"],"blocksy_meta":{"has_hero_section":"default","hero_section":"type-2","pageTitleFont":{"family":"Default","variation":"Default","size":{"desktop":"2.8em","tablet":"2.8em","mobile":"2.8em","__changed":[]},"line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"hero_elements":[{"id":"custom_title","enabled":true,"heading_tag":"h1","title":"Home","__id":"nYctwA2o8l-2dHkelJoSZ"},{"id":"custom_description","enabled":false,"description_visibility":{"desktop":true,"tablet":true,"mobile":false},"__id":"6jgivp6_V-GbBQRwvgMSm"},{"id":"custom_meta","enabled":true,"meta_elements":[{"id":"author","enabled":true,"label":"By","has_author_avatar":"no","avatar_size":25,"__id":"NzuruynnYtijmV3zUvfPh"},{"id":"post_date","enabled":false,"label":"On","date_format_source":"default","date_format":"M j, Y","__id":"SVgYIQidZQn8bEtkRrqgO"},{"id":"updated_date","enabled":true,"label":"Updated","date_format_source":"default","date_format":"M j, Y","__id":"fqTIUPc_z6sMRzYCH4f41"},{"id":"categories","enabled":false,"label":"In","style":"simple","__id":"MuDiqt9Z1h2dVVhkUuN-r"},{"id":"comments","enabled":true,"__id":"S4JD5pQ0ZhyQOIA1MuaKC"}],"page_meta_elements":{"joined":true,"articles_count":true,"comments":true},"__id":"epJhjZojFpIz3R_J3UIYq","meta_type":"label"},{"id":"breadcrumbs","enabled":false,"__id":"98yAhzOKptoyNcjImWUdv"}],"hero_structure":"normal","page_title_bg_type":"custom_image","custom_hero_background":{"attachment_id":67510,"url":"https:\/\/linuxiac.com\/wp-content\/uploads\/2023\/06\/portainer-header-1024x237.jpg"},"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts\/67504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/comments?post=67504"}],"version-history":[{"count":3,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts\/67504\/revisions"}],"predecessor-version":[{"id":185255,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/posts\/67504\/revisions\/185255"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/media\/185105"}],"wp:attachment":[{"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/media?parent=67504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/categories?post=67504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linuxiac.com\/wp-json\/wp\/v2\/tags?post=67504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}