Manajemen Docker Container Menggunakan Portainer

Senin, 28 Desember 2020

Install Portainer untuk Manajemen Docker Container. Oke kali ini saya akan sharing sedikit mengenai bagaimana instalasi Portainer. Portainer adalah aplikasi yang ringan, cross-platform, dan open source untuk manajemen docker container.

Di tutorial ini saya menggunakan Ubuntu 18.04 sebagai host untuk memasang Portainer.



Dan berikut hal yang harus dipersiapkan sebelum menginstall Portainer.

  • Docker
  • Nginx
Docker harus terinstall di sistem karena kita akan memasang Portainer melalui Docker. Sementara Nginx diperlukan sebagai reverse proxy agar nantinya kita bisa mengakses Portainer melalui subdomain dan juga lewat SSL.

Disini kita akan menggunakan Docker Community Edition.
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $(whoami)
Install Nginx
Disini kita membutuhkan Nginx hanya sebagai reverse proxy saja jadi kita hanya perlu memasang Nginx tanpa pake LEMP Stack.
sudo apt update && sudo apt install nginx -y
Install Portainer
Yang akan kita pasang disini juga Portainer Community Edition.
Pertama, kita pull dulu image nya ke sistem.
docker pull portainer/portainer-ce
Lalu buat volume untuk menyimpan data Portainer.
docker volume create portainer_data
Lalu jalankan Portainer sebagai container.
docker run --name portainer -h portainer -d -p 8000:8000 -p 127.0.0.1:9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Port 8000 diperlukan untuk edge agent. Sementara port 9000 diperlukan untuk dashboard Portainer. Untuk dashboard, kita bind ke localhost karena kita akan mengekspos service nya menggunakan Nginx.

Oke setelah container berjalan, kita buat virtualhost baru di Nginx untuk mengekspos Portainer. Sebagai contoh disini saya ingin mengekspos Portainer di alamat portainer.linuxsec.org.
server {
       listen           80;
       server_name      portainer.linuxsec.org;
       server_tokens    off;
       return           301 https://$server_name$request_uri;
}

server {
  listen        443 ssl http2;
  listen        [::]:443 ssl http2;
  server_name   portainer.linuxsec.org;
  server_tokens off;

# HTTP Security Headers
  ssl_protocols TLSv1.2 TLSv1.3;          # TLS 1.3 requires nginx >= 1.13.0
  ssl_prefer_server_ciphers on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem; # openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
  ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
  ssl_ecdh_curve secp384r1;               # Requires nginx >= 1.1.0
  ssl_session_timeout  10m;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;                # Requires nginx >= 1.5.9
  ssl_stapling on;                        # Requires nginx >= 1.3.7
  ssl_stapling_verify on;                 # Requires nginx => 1.3.7
  ssl_early_data off;                     # 0-RTT, enable if desired - Requires nginx >= 1.15.4
  resolver 1.1.1.1 valid=300s;            # Replace with your local resolver
  resolver_timeout 5s;
  ssl_certificate /etc/letsencrypt/live/linuxsec.org/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/linuxsec.org/privkey.pem;
  root /var/www/ibmcloud-portainer/;
  access_log /var/log/nginx/portainer.log;
  index index.html;

#Portainer Nginx Proxy
location / {
    proxy_pass       http://localhost:9000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass_request_headers on;
    proxy_redirect off;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_intercept_errors on;
  }
}
Untuk SSL nya kalian bisa gunakan Let's Encrypt.

Oke, sekarang akses portainer.linuxsec.org.
Maka kalian akan disuruh membuat akun admin. Selanjutnya, untuk environment nya pilih lokal.

Dan berikut tampilan Dashboardnya.

Di Portainer ada banyak template aplikasi populer yang langsung bisa dipakai. Kalian bisa coba sendiri.

Upgrade Portainer
Untuk mengupgrade Portainer juga cukup mudah. Kita tinggal remove containernya lalu jalankan lagi dengan base image yang baru.
docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce
docker run --name portainer -h portainer -d -p 8000:8000 -p 127.0.0.1:9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Selama volume portainer_data tidak dihapus, data dan konfigurasi dari versi sebelumnya masih tetap ada.

Menggunakan Docker Compose
Jika kalian memutuskan menggunakan docker compose setelah proses instalasi diatas, kalian bisa gunakan konfigurasi docker-compose berikut:
version: '2'

services:
  portainer:
    image: portainer/portainer-ce
    container_name: portainer
    command: -H unix:///var/run/docker.sock
    restart: always
    ports:
      - 127.0.0.1:9000:9000
      - 8000:8000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:
    external: true
    name: portainer_data

Troubleshooting
Jika setelah mengkonfigurasi Nginx proxy Portainer nya malah errot 502 Bad Gateway, kemungkinan besar dikarenakan container milik Portainernya berhenti. Hal itu disebabkan karena alasan keamanan, service Portainer akan dimatikan setelah lima menit tidak ada konfigurasi yang ditambahkan.
Solusinya adalah dengan menjakankan kembali Portainer dengan perintah:
docker start portainer
Lalu cek lagi di portainer.linuxsec.org. Seharusnya sekarang kalian dibawa ke halaman awal Portainer.

Oke mungkin sekian tutorial kali ini, semoga bermanfaat.

Artikel Terkait Docker