Portainer installeren en gebruiken voor Docker beheer met Nginx Proxy Manager
Portainer is een open-source container management oplossing voor Docker, Kubernetes, en Nomad die het starten, maken en draaien van containers op een eenvoudige manier vereenvoudigt. Het biedt een webgebaseerd dashboard om containers, images, netwerken, en volumes te beheren.
In deze zelfstudie leer je de Portainer container management oplossing op een Linux server te installeren en te configureren, en te gebruiken om Docker containers te maken en te beheren om verschillende apps te draaien. Je leert ook om deze containers achter Nginx te zetten met de Nginx proxy manager.
Vereisten
- Een Linux server met Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
- Een niet-root gebruiker met sudo privileges.
- Een Fully Qualified Domain Name (FQDN) die wijst naar de server voor Portainer (
portrainer.example.com
) en Nginx Proxy Manager (npm.example.com
).
Stap 1 – Firewall instellen
Cent OS/Rocky Linux/Alma Linux
Je zou de Firewalld firewall geïnstalleerd moeten hebben. Controleer de status van de firewall.
$ sudo firewall-cmd --state running
Open poorten 80, 9443 en 443. Portainer gebruikt poort 9443 om zijn web UI via HTTPS bloot te stellen.Nginx Proxy Manager gebruikt poort 81 voor zijn UI.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https $ sudo firewall-cmd --permanent --add-port=9443/tcp $ sudo firewall-cmd --permanent --add-port=81/tcp
Herlaad de firewall om de veranderingen in te schakelen.
$ sudo firewall-cmd --reload
Ubuntu/Debian
Ubuntu en Debian systemen gebruiken standaard ufw (Uncomplicated Firewall).
Controleer of de firewall draait.
$ sudo ufw status
Als hij draait, open dan poorten 80, 9443 en 443.
$ sudo ufw allow 80 $ sudo ufw allow 443 $ sudo ufw allow 9443 $ sudo ufw allow 81
Open de SSH poort als de firewall niet draait.
$ sudo ufw allow "OpenSSH"
Schakel de firewall in als hij niet draait.
$ sudo ufw enable
Als hij wel draait, herlaad hem dan om de veranderingen toe te passen.
$ sudo ufw reload
Stap 2 – Installeer Docker
Cent OS/Rocky Linux/Alma Linux
Voer het volgende commando uit om Docker te installeren.
$ sudo yum install -y yum-utils $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo $ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt update $ sudo apt install docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $ sudo apt update $ sudo apt install docker-ce docker-ce-cli containerd.io
Schakel de Docker service in en start hem.
$ sudo systemctl start docker --now
Voeg je gebruikersnaam toe aan de Docker groep.
$ sudo usermod -aG docker $USER
Log uit het systeem en log weer in om de verandering toe te passen.
Stap 3 – Installeer Docker Compose
Download en installeer de Docker compose binary.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Pas uitvoerbare toestemming toe op de binary.
$ sudo chmod +x /usr/local/bin/docker-compose
Stap 4 – Installeer Portainer
Maak een map voor Portainer.
$ mkdir ~/portainer
Schakel over naar de directory.
$ cd ~/portainer
Maak het Docker Compose bestand aan en open het om te bewerken.
$ nano docker-compose.yaml
Plak er de volgende code in.
version: "3.3" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always privileged: true volumes: - ./data:/data:Z - /var/run/docker.sock:/var/run/docker.sock:Z ports: - 9443:9443
Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.
Laten we het Docker compose bestand doornemen.
- We trekken de nieuwste versie van de Portainer Community Edition van Docker Hub. Portainer Community Editie is gratis te gebruiken, terwijl hun Business editie een betaalde licentie vereist. Je kunt de Business Editie trekken, maar er zal je om de licentiesleutel gevraagd worden om hem te gebruiken.
- We hebben onze container de naam
portainer
gegeven ter identificatie en koppeling. - De restart policy is ingesteld op
always
zodat de container tijdens het opstarten aanblijft. - De instelling
privileged: true
is om Portainer toegang te geven tot de Docker socket en in een bevoorrechte context te laten draaien omdat we SELinux gebruiken. Als je geen SELinux gebruikt, kun je deze instelling verwijderen. Deze instelling geeft Portainer container toegang tot alles op het host systeem, inclusief toegang tot de hardware. Schakel deze instelling dus alleen in als je weet wat je doet. - De sectie
volumes
brengt de map op de host in kaart met de mappen in de container met behulp van Bind mounts. We hebben de map~/portainer/data
aan de container blootgesteld voor het opslaan van eventuele relevante gegevens en Docker socket API voor het beheer van de container. Het label:Z
vertelt Docker dat we SELinux draaien op onze host. Als je SELinux niet ingeschakeld hebt, moet je het label verwijderen.
Start Portainer.
$ docker-compose up -d
Controleer de status van de container.
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 916411e8d12e portainer/portainer-ce:latest "/portainer" 5 seconds ago Up 4 seconds 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp portainer
Stap 5 – Portainer openen en configureren
Open de URL https://<yourserverIP>:9443
in je browser, en je krijgt het volgende scherm.
Je wordt gevraagd een nieuwe administrator gebruiker aan te maken. Voeg je gebruikersgegevens toe. Vink het vakje Allow collection of anonymous statistics uit als je privacy belangrijk vindt. Klik op de knop Create user om de installatie te starten en een nieuwe beheerdersaccount aan te maken.
Vervolgens kom je in het volgende dashboard scherm.
Na een paar seconden ververst het automatisch en toont je het volgende scherm.
Het toont je de lokale omgeving waarin Portainer draait. Klik op de lokale omgeving om aan de slag te gaan.
De meeste secties spreken voor zich. De sectie Stacks helpt bij het maken van containers met Docker compose files. Je kunt containers direct inzetten met de categorie Containers in de zijbalk. Je kunt de huidige docker omgeving configureren via de sectie Hosts. De sectie App Templates wordt geleverd met voorgeïnstalleerde Docker compose bestanden voor het installeren van de meest voorkomende applicaties. Je kunt ook aangepaste sjablonen maken.
In de sectie Settings kun je verschillende instellingen maken, zoals het toevoegen van aangepaste Docker registers, het toevoegen van meerdere hosts voor Docker zwerm, het configureren van gebruikerstoegang, het back-uppen van gegevens, en het aanpassen van Portainer.
Stap 5 – Zet Portainer achter een reverse proxy met Nginx Proxy Manager (NPM)
Laten we, voor we verder gaan, Portainer achter een omgekeerde proxy zetten met Nginx Proxy Manager. Nginx Proxy Manager is een Docker toepassing die een webbeheer UI biedt voor het instellen van Nginx als een reverse proxy host. Het kan ook gebruikt worden als redirect of als streaming host.
Installeer NPM
De eerste stap is om een netwerk aan te maken voor Nginx Proxy Manager (NPM). Open de sectie Netwerken en klik op de knop Netwerk toevoegen om een nieuw netwerk aan te maken.
Geef een naam aan het netwerk en laat alle instellingen ongewijzigd. Klik op de knop Creëer het netwerk om te eindigen.
Ga naar de Stacks en maak een nieuwe stack met de Add stack knop.
Geef de stack een naam als nginx-proxy-manager
en plak er de volgende code in.
version: "3.3" services: npm-app: image: 'jc21/nginx-proxy-manager:latest' container_name: npm-app restart: unless-stopped ports: - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP environment: DB_MYSQL_HOST: "npm-db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD} DB_MYSQL_NAME: "npm" # Uncomment the line below if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./npm-data:/data:Z - ./letsencrypt:/etc/letsencrypt:Z depends_on: - npm-db networks: - npm-network - npm-internal npm-db: image: 'mariadb:latest' container_name: npm-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD} volumes: - ./npm-data/mysql:/var/lib/mysql:Z networks: - npm-internal networks: npm-internal: npm-network: external: true
We hebben twee omgevingsvariabelen ingesteld om database en root MySQL wachtwoorden in te stellen. Portainer kan gebruikt worden om geheimen in te stellen met omgevingsvariabelen. Scroll naar beneden op de pagina en klik op de omgevingsvariabele knop Add om sterke wachtwoorden toe te voegen.
Klik op de knop Deploy the stack om de NPM container te maken en te starten.
Toegang tot NPM
Open de URL https://<yourserverIP>:81
in je browser, en je krijgt het volgende scherm. Voer de volgende standaard referenties in om in te loggen.
E-mailadres: [email protected]
Wachtwoord: changeme
Vervolgens wordt je meteen gevraagd een naam en een emailadres in te stellen. Klik op de Save knop, en je wordt gevraagd een nieuw wachtwoord te maken. Klik nogmaals op de Save knop om te beginnen.
Ga naar de Hosts >> Proxy Hosts en klik op de knop Proxy Host toevoegen.
Voer de domeinnaam in als portainer.example.com
. Kies het schema als https
. Voer de naam van de container in als Forward Hostname en 9443 als Forward port. Vink de opties Block Common Exploits en Websockets Support aan.
Ga naar het SSL tabblad en kiesRequest a new SSL Certificate uit het dropdown menu. Vink de optiesForce SSL en HTTP/2 Support aan om je SSL verbinding te beveiligen en te optimaliseren. Voer het emailadres in om verlengingsmeldingen te ontvangen en ga akkoord met de servicevoorwaarden. Klik op de knop Save om het instellen van de Proxy Host voor Portainer te voltooien.
Verbind Portainer met de NPM Container
We hebben de Proxy host ingesteld, maar de container is nog steeds niet verbonden met het NPM netwerk. Ga terug naar het Portainer dashboard, bezoek de sectie Containers, en selecteer de portainer container.
Kies npm-network
uit het dropdown menu onder de sectie Verbonden netwerken en klik op de knopJoin network om de Portainer container aan het netwerk van de proxy manager toe te voegen.
Je krijgt misschien een foutmelding, maar ververs de pagina, en je zou de container toegevoegd moeten zien aan het NPM netwerk.
Je zou Portainer moeten kunnen benaderen met de URL https://portainer.example.com
in je browser.
Je kunt een gelijkaardige procedure volgen om NPM achter een publiek toegankelijke URL te zetten zoals, https://npm.example.com
zoals besproken in onze Nginx Proxy Manager tutorial.
Nu je een openbare URL voor Portainer hebt ingesteld, kun je de blootliggende poort 9443 verwijderen. Om dat te doen ga je terug naar de Terminal en schakel je naar de portainer directory.
$ cd ~/portainer
Open het Docker compose bestand om te bewerken.
$ nano docker-compose.yaml
Verwijder de ports sectie door ze uit te becommentariëren, zoals hieronder.
version: "3.3" services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always privileged: true volumes: - ./data:/data:Z - /var/run/docker.sock:/var/run/docker.sock:Z #ports: # - 9443:9443 networks: - npm-network networks: npm-network: external: true
Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.
Hier hebben we de gegevens van het NPM netwerk toegevoegd omdat we de Portainer container opnieuw zullen moeten starten.
Stop de Portainer container.
$ docker-compose down --remove-orphans
Start de container opnieuw met de bijgewerkte configuratie.
$ docker-compose up -d
Stap 6 – Zet een container in met App Template
Portainer biedt verschillende voorgedefinieerde sjablonen om toepassingen direct te starten met minimale configuratie.
Ga naar de sectie App Templates en kies een willekeurig sjabloon. Geef het een naam, en selecteer het te gebruiken netwerk. Gebruik de sectie geavanceerde opties om aangepaste poorten, netwerken, en volume mounts in te zetten.
Klik op de knop Deploy the container om het uitrollen van je toepassing te voltooien. Hier zetten we de Redis container in.
Stap 7 – Containers beheren
Laten we een bestaande container beheren. Open de containers pagina, en je ziet alle draaiende containers.
Klik op de recent aangemaakte hw-redis
container om verder te gaan.
Bovenaan zie je een lijst van acties die je op een draaiende container kunt uitvoeren. Je kunt de container stoppen en doden. Recreate maakt de container helemaal opnieuw. Met de optieDuplicate/Edit kun je een andere identieke container maken, waarmee je instellingen kunt veranderen voordat je hem lanceert.
De Container status toont de draaitijd, het IP adres en andere details over de container.
De optie Logs toont de uitvoer van het docker logs
commando. Omdat de uitvoer van het commando niet in het cachegeheugen wordt opgeslagen, wordt het commando telkens als je de pagina vernieuwt van nul af aan uitgevoerd.
De Inspect optie voert het commando docker inspect
uit op de container en toont de uitvoer ervan.
De optie Stats toont je het gebruik van de container in real-time.
Je kunt de Container console starten met de optie Console. Je wordt gevraagd naar het commando en de systeemgebruiker om uit te voeren.
Druk op de knop Connect om de console te starten.
De optie Attach voert het docker attach
commando uit.
Er zijn nog andere opties op de Container details pagina. Je kunt een image maken met behulp van een bestaande container. Andere opties zijn het veranderen van het herstartbeleid van een container en het verbinden of ontkoppelen van een netwerk met een bestaande container.
Een externe container aan Portainer koppelen
Het aanmaken van een willekeurige container buiten Portainer zal er in verschijnen, zolang hij gemaakt is op hetzelfde systeem waarop Portainer draait. Dit is mogelijk omdat Portainer met Docker verbonden is via de websocket.
Laten we testen door de Hello World Docker container te draaien.
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Bekijk de containerlijst in de terminal. We gebruiken de -a
vlag om de lijst van alle containers te tonen, ook de gestopte. Je ziet de naam van de container als sad_williamson
.
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5fa46b85d594 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago sad_williamson .....
Bekijk nu de Portainer Containers pagina, en de hello world container verschijnt als gestopt in de lijst met dezelfde naam.
Conclusie
Dit beëindigt onze tutorial over het installeren en gebruiken van Portainer voor Docker beheer en Nginx Proxy Manager. We zullen het bouwen van docker images, het maken van aangepaste containers en het gebruik van Portainer met Docker zwerm verkennen in een komende tutorial. Als je vragen hebt, stel ze dan in de opmerkingen hieronder.