Portainer – Administrer dine Docker containere

Med Portainer kan du let administrere dine Docker containere.

Portainer er endnu en af de apps, der kan være godt at installere på din server, hvis du arbejder med Docker. Her får du nemlig et godt overblik over alle Docker containere på din server.

Installer Portainer uden docker composefil

For at installere den gør du således:

Først skal du oprette den volume hvor Portainer kan gemme sine data:

docker volume create portainer_data

Så skal du installere Portainer Community Edition med følgende kode:

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

Herefter kan du tilgå Portainer i din browser ved at indtaste IP-adressen efterfulgt af : og porten 9443. Husk HTTPS foran, og måske du bliver advaret om at den ikke er sikker (i hvert fald hvis du bruger Google Chrome), her fortsætter du bare.

Installer Portainer med Docker compose fil

Som alternativ kan du også installere med en Docker compose file. Du kan starte med at oprette en mappe der hedder portainer, hvor du vil installere portainer.

mkdir ~/portainer
cd ~/portainer

Så opretter du Docker compose filen her:

nano docker-compose.yml

I denne indsætter du følgende indhold. Bagefter gemmer du ved at trykke CTRL+X, så y for yes og så enter.

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

Nu kører du filen med følgende kode:

docker compose up -d

Og igen skulle det så være muligt for dig at tilgå portainer ved at skrive https://[IP-adresse]:9443. Det første du skal gøre bagefter er at gemme et password for administrator.

Forskellige muligheder i Portainer

Der er mange forskellige muligheder i Portainer. Portainer giver et godt overblik over alle de docker containere du har installeret og du kan nemt installere nye. Som Environment skal du vælge “Local”. Så trykker du på Containers til venstre og du får her et fint overblik over alle de containere du har installeret.

Der er mange flere muligheder i Portainer. For eksempel kan du under Stacks oprette containere ved hjælp af en Docker Composefil, hvor du under Containers gjorde det uden. Der er også mulighed for at få et overblik over de Docker netværk du har under Networks. Med App Templates finder du hyppigt anvendte Docker containere med præinstallerede Docker compose filer.

Tilknyt domæne til Portainer

I stedet for at indtaste https://[IP-adresse]:9443 hver gang du skal åbne Portainer, kan det være en god ide at tilknytte et domæne eller subdomæne, fx. portainer.server.dk. For at gøre det skal du installere Nginx Proxy Manager. Det kan du gøre direkte i Portainer.

Du skal starte med at oprette et netværk som skal bruges til de ting du installerer. Det gør du under Networks. Her trykker du på “Add Network” og giver et navn til dit netværk, fx. “npm-network”. Resten af indstillingerne lader du være, og du opretter så netværket ved at trykke på “Create the network”.

Nu skal vi så installere Nginx Proxy Manager, og det skal vi gøre med en Docker Compose fil, så her skal du gøre det under Stacks. Tryk på “Add stacks” og giv den navnet “nginx-proxy-manager”. I kodefeltet under Web editor indsætter du så følgende kode, der svarer til en Docker composefil.

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

Som du ser i koden er der to environment variabler, nemlig MYSQL_ROOT_PASSWORD og DB_MYSQL_PASSWORD. Hvis du går længere ned under Environment variabler, så kan du oprette disse hvor du indtaster variablernes navne under name og under value indtaster du så et sikkert password til din database. Du skal altså her oprette to variabler.

Så trykker du “Deploy the stack” og så går den igang med at installere Nginx Proxy Manager.

Nginx Proxy Manager kan du åbne på adressen http://[IP-adresse]:81. Her bruger du brugernavn admin@example.com og password changeme. Det første du bliver bedt om når du logger ind er at skifte e-mail og password.

Tryk nu på Hosts og så Proxy hosts, og så herefter på “Add Proxy host” knappen. Under Domain names indtaster du nu det domæne eller subdomæne du har valgt til Portainer, fx. portainer.server.dk. Husk at DNS-indstillingerne for domænet eller subdomænet skal pege på din servers IP adresse. Under Scheme vælger du “https”, under Forward hostname/IP vælger du “portainer” og under Forward port vælger du “9443”. Du sætter så kryds i både Block Common Exploits og Websockets Support.

Skift fane til SSL og vælg under SSL Certifikate “Request a new SSL Certifikate”. Sæt kryds i Force SSL og HTTP/2 Support og at du er inforstået med Terms of service. Tryk på knappen Save. Nu er der i Nginx Proxy Manager tilknyttet det domæne du skulle bruge.

Så skal du tilbage til Portainer og vælge Containers. Find nu Portainer selv og åbn den. Gå ned i bunden under Connected Networks og vælg “npm-network” og tryk på Join Network. Der vil nu udover det standardnetværk der blev brugt også være det netværk vi bruger til Nginx Proxy Manager.

Nu skulle det være muligt at tilgå Portainer fra adressen https://portainer.server.dk eller hvad du ellers har valgt som domæne eller subdomæne. Det gør det nemt at bruge Portainer fremover. Strengt taget kan du nu også gå tilbage i docker-compose.yml filen for Portainer og sætte # foran de to linjer hvor Ports er brugt, fordi nu styrer Nginx Proxy Manager det hele.

Få flere App Templates i Portainer

Når du går ind i App Templates, kan du her se en masse fine opsætninger til at kunne installere ting i Portainer. Men du har faktisk mulighed for at få flere muligheder. Det du gør er at gå ind i Settings og så under App Templates kan du skifte URL adressen ud, hvor App Templates skal hentes fra:

Du kan fx. skrive en af følgende URL adresse her (vælg kun en af adresserne ad gangen):

https://raw.githubusercontent.com/Qballjos/portainer_templates/master/Template/template.json
https://raw.githubusercontent.com/AndyYangUK/portainer_templates/master/templates-2.1.json

Når du klikker på gem, kan du gå til App Templates og se de mange nye muligheder. Desværre er der også nogle der mangler, fx. forsvinder WordPress her. For at få de gamle App templates tilbage igen, så skriver du følgende adresse:

https://raw.githubusercontent.com/portainer/templates/master/templates-2.0.json

Jeg håber dette gav dig en kort introduktion til hvordan du kan installere Portainer på din server. Jeg har stadig ikke meget erfaring med Portainer endnu, men så snart jeg får mere erfaring planlægger jeg at skrive nogle flere artikler om den.

5 1 vote
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x