Mengaktifkan Docker Engine API
Mengaktifkan Docker Engine API pada artikel ini menjelaskan cara mengaktifkan dan mengamankan Docker Engine API serta penjelasan tentang Docker Engine API.
Intro
Anda memiliki beberapa server yang menjalankan microservices dengan menggunakan docker. Lalu Anda ingin agar management microservices dapat dilakukan secara UI alias tidak melalui terminal dan dalam satu tool/dashboard, contoh menggunakan Portainer.
Anda dapat melakukan kontrol dan monitoring microservices menggunakan Portainer dengan menambahkan server-server tersebut kedalam Portainer. Untuk dapat menambahkan server kedalam Portainer, server harus membuka service port sebagai jalur komunikasi disebut Docker Engine API.
Docker API adalah antarmuka yang memungkinkan pengguna untuk berinteraksi dengan Docker Engine secara programatik. Dengan API ini, pengembang dapat mengotomatiskan manajemen kontainer, membuat, mengubah, dan menghapus kontainer dengan mudah melalui permintaan HTTP. Ini memberikan fleksibilitas dan skalabilitas dalam pengelolaan infrastruktur berbasis kontainer, memungkinkan integrasi yang mulus dengan alat dan platform lainnya.
Selain dapat diintegrasikan dengan Portainer, Docker API dapat diintegrasikan aplikasi program Anda, karena Docker API adalah antarmuka yang memungkinkan pengguna untuk berinteraksi dengan Docker Engine. Dengan API ini, pengembang dapat mengotomatiskan manajemen kontainer, membuat, mengubah, dan menghapus kontainer. Layaknya API pada umumnya Docker API dapat diakses menggunakan wget atau curl, yang juga berguna untuk kegiatan DevOps.
Docker Engine API berjalan diatas port 2375 dan 2376. Docker API yang berjalan diatas Port 2375, transaksi atau pertukaran data tidak dilakukan enkripsi (unsecure), sedangkan untuk port 2376 dilakukan enkripsi (secure) dalam setiap pertukaran datanya. Dalam artikel ini akan membahas cara mengaktifkan Docker Engine API tanpa enkripsi dan cara mengamankan Docker Engine API dengan enkripsi.
Tambahan, sebagai saran sebaiknya akses Docker Engine API dibatasi hanya dapat diakses dijaringan internal atau private network (VPN).
Prasyarat Mengaktifkan Docker Engine API
- Pastikan komputer atau server telah ter-install Docker. Jika belum Anda dapat mengikuti langkah install Docker pada Ubuntu atau Centos.
- Pastikan Anda telah memiliki sertifikat SSL. Jika belum Anda dapat membuatnya secara gratis dengan mengikuti langkah Membuat Sertifikat SSL Gratis dengan Let’s Encrypt.
Mengaktifkan Docker Engine API
Pada tahap ini kita akan mengaktifkan Docker API dan belum melakukan proses pengamanan transaksi/pertukaran data. Service Docker API akan berjalan diatas port 2375. Berikut tahapannya:
1. Buat folder dengan nama docker.service.d pada path /etc/systemd/system.
mkdir -p /etc/systemd/system/docker.service.d
2. Akses folder docker.service.d yang telah dibuat.
cd /etc/systemd/system/docker.service.d
3. Buat file dengan nama options.conf.
nano options.conf
Lalu isikan file tersebut dengan konfigurasi berikut.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
4. Kemudian jalankan beberapa perintah yaitu reload konfigurasi systemd unit, restart service docker, dan cek status service docker.
- Reload systemd unit
sudo systemctl daemon-reload
- Restart docker service
sudo systemctl restart docker
- Status docker service
sudo systemctl status docker
Jika service docker active dan tampil service port 2375 maka konfigurasi berhasil.
5. Cek menggunakan perintah netstat apakah port sudah open
sudo netstat -lnpt
Jika tampil port :::2375 maka port tersebut telah berbuka (open) dan siap diakses.
6. Lakukan pengujian call/akses Docker API. Berikut contoh pengujian yang dapat dilakukan.
- Menampilkan list image yang tersedia.
curl http://localhost:2375/images/json
- Menampilkan list container yang tersedia.
curl http://localhost:2375/containers/json?all=1
Mengamankan Docker Engine API
Pada tahap ini kita akan melakukan pengamanan transaksi data dengan memasangkan sertifikat SSL sehingga pertukaran data Docker API yang dilakukan akan terenkripsi. Service Docker API akan berjalan diatas port 2376. Pastikan Anda telah menyiapkan Sertifikat SSL, jika belum Anda dapat membuatnya secara gratis dengan mengikuti langkah-langkah berikut.
Misal Anda telah memiliki Sertifikat SSL yang berada di path /etc/ssl/ dan tersimpan file Sertifikat, Private Key, dan CA.
1. Buka kembali file konfigurasi /etc/systemd/system/docker.service.d/options.conf dan lakukan penyesuaian konfigurasi.
nano /etc/systemd/system/docker.service.d/options.conf
Sesuaikan konfigurasi file tersebut seperti sebagai berikut.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/ssl/ca.pem --tlscert=/etc/ssl/sertifikat.pem --tlskey=/etc/ssl/private-key.pem
Jika file Sertifikat sudah fullchain (alias isi file CA sudah ditambahkan pada file Sertifikat), maka pada konfigurasi file tidak perlu ditambahkan option –tlscacert. Berikut konfigurasinya
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 --tlsverify --tlscert=/etc/ssl/sertifikat.pem --tlskey=/etc/ssl/private-key.pem
2. Kemudian jalankan beberapa perintah yaitu reload konfigurasi systemd unit, restart service docker, dan cek status service docker.
- Reload systemd unit
sudo systemctl daemon-reload
- Restart docker service
sudo systemctl restart docker
- Status docker service
sudo systemctl status docker
Jika service docker active dan tampil service port 2376 maka konfigurasi berhasil.
3. Cek menggunakan perintah netstat apakah port sudah open
sudo netstat -lnpt
Jika tampil port :::2376 maka port tersebut telah berbuka (open) dan siap diakses.
4. Lakukan pengujian call/akses Docker API. Berikut contoh pengujian yang dapat dilakukan.
- Menampilkan list image yang tersedia.
curl http://localhost:2376/images/json
- Menampilkan list container yang tersedia.
curl http://localhost:2376/containers/json?all=1
Konklusi
Docker Engine API adalah jembatan penting bagi pengelola infrastruktur kontainer. Dengan mengizinkan interaksi programatik, Docker API memungkinkan otomatisasi yang kuat dalam manajemen kontainer. Pengguna dapat memanfaatkannya tidak hanya untuk integrasi dengan alat manajemen seperti Portainer, tetapi juga untuk pengembangan aplikasi DevOps. Namun, penting untuk diingat bahwa pengamanan adalah kunci. Dengan memasang sertifikat SSL, pertukaran data melalui API dapat dilindungi secara efektif, meningkatkan keamanan infrastruktur kontainer. Melalui langkah-langkah yang diuraikan dengan jelas dalam artikel ini, pengguna dapat mengoptimalkan penggunaan Docker Engine API dalam lingkungan mereka, sambil menjaga keamanan yang diperlukan.