Cara Menginstal dan Menggunakan Docker pada Ubuntu 20.04

Pengantar

Docker adalah suatu aplikasi yang menyederhanakan proses pengelolaan proses aplikasi di dalam kontainer. Kontainer memungkinkan Anda menjalankan aplikasi di dalam proses yang terisolasi sumber daya. Kontainer mirip seperti mesin virtual, tetapi kontainer lebih portabel, lebih ramah sumber daya, dan lebih bergantung pada sistem operasi hos.

Untuk pengantar mendetail tentang beragam komponen berbeda dari kontainer Docker, silakan baca The Docker Ecosystem: An Introduction to Common Components.

Dalam tutorial ini, Anda akan menginstal dan menggunakan Docker Community Edition (CE) pada Ubuntu 20.04. Anda akan menginstal Docker sendiri, bekerja dengan kontainer dan citra, serta mendorong citra ke Repositori Docker.

Prasyarat

Untuk mengikuti tutorial ini, Anda membutuhkan hal berikut ini:

  • Satu server Ubuntu 20.04 yang disiapkan dengan mengikuti panduan penyiapan server awal Ubuntu 20.04 berikut ini, termasuk penggguna non-root sudo dan firewall.
  • Satu akun di Docker Hub jika Anda ingin menciptakan citra sendiri dan mendorongnya ke Docker Hub, seperti yang diperlihatkan dalam Langkah 7 dan 8.

Langkah 1 — Menginstal Docker

Paket instalasi Docker yang tersedia di repositori Ubuntu resmi mungkin bukan versi terbaru. Untuk memastikan kita mendapat versi terbaru, kita akan menginstal Docker dari repositori Docker resmi. Untuk melakukan itu, kita akan menambah satu sumber paket baru, menambah kunci GPG dari Docker untuk memastikan unduhannya valid, lalu menginstal paket itu.

Pertama, perbarui daftar paket Anda saat ini:

  1. sudo apt update

Selanjutnya, instal beberapa paket prasyarat yang memungkinkan apt menggunakan paket lewat HTTPS:

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

Lalu tambahkan kunci GPG untuk repositori Docker resmi ke sistem Anda:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add

Tambahkan repositori Docker ke sumber APT:

  1. sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable”

Selanjutnya, perbarui basis data paket dengan paket Docker dari repo yang baru ditambahkan:

  1. sudo apt update

Pastikan Anda akan menginstal dari repo Docker alih-alih repo Ubuntu asali:

  1. apt-cache policy docker-ce

Anda akan melihat keluaran seperti ini, meskipun nomor versi untuk Docker mungkin berbeda:

Output of apt-cache policy docker-ce
docker-ce:
  Installed: (none)
  Candidate: 5:19.03.9~3-0~ubuntu-focal
  Version table:
     5:19.03.9~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Perhatikan bahwa docker-ce belum terinstal, tetapi kandidat untuk instalasi adalah dari repositori Docker untuk Ubuntu 20.04 (focal).

Akhirnya, instal Docker:

  1. sudo apt install docker-ce

Docker kini seharusnya sudah terinstal, daemon dimulai, dan prosesnya kini dapat berjalan ketika memulai saat boot. Periksa bahwa ini berjalan:

  1. sudo systemctl status docker

Keluaran harus mirip dengan yang berikut ini, yang menunjukkan bahwa layanan sudah aktif dan berjalan:

Output
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 24321 (dockerd)
      Tasks: 8
     Memory: 46.4M
     CGroup: /system.slice/docker.service
             └─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Menginstal Docker kini tidak hanya memberi Anda layanan Docker (daemon) tetapi juga utilitas baris perintah docker, atau klien Docker. Kita akan menjelajahi cara menggunakan perintah docker di dalam tutorial ini nanti.

Langkah 2 — Mengeksekusi Perintah Docker Tanpa Sudo (Opsional)

Secara asali, perintah docker hanya dapat dijalankan pengguna root atau oleh pengguna di dalam grup docker yang tercipta secara otomatis selama proses instalasi Docker. Jika Anda mencoba menjalankan perintah docker tanpa mengawalinya dengan sudo atau tanpa berada di dalam grup docker, Anda akan mendapat keluaran seperti ini:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Jika Anda ingin menghindari untuk mengetik sudo setiap kali Anda menjalankan perintah docker, tambahkan nama pengguna Anda ke grup docker:

  1. sudo usermod -aG docker ${USER}

Untuk menerapkan keanggotaan grup baru, lakukan log keluar dari server dan masuk kembali, atau ketik yang berikut ini:

  1. su${USER}

Anda akan diminta untuk memasukkan kata sandi pengguna Anda untuk melanjutkan.

Konfirmasikan bahwa pengguna Anda kini sudah ditambahkan ke grup docker dengan mengetik:

  1. id -nG
Output
sammy sudo docker

Jika Anda perlu menambahkan seorang pengguna ke grup docker yang Anda sedang tidak sedang log masuk di dalamnya, deklarasikan nama pengguna secara eksplisit menggunakan:

  1. sudo usermod -aG docker username

Mulai dari sekarang, artikel ini mengasumsikan bahwa Anda menjalankan perintah docker sebagai pengguna di dalam grup docker. Jika Anda memilih untuk tidak melakukan itu, silakan sisipkan perintah dengan awalan sudo.

Mari kita jelajahi perintah docker berikutnya.

Langkah 3 — Menggunakan Perintah Docker

Menggunakan docker terdiri dari memberikannya serangkaian opsi dan perintah yang diikuti oleh argumen. Sintaksnya berbentuk seperti ini:

  1. docker [option] [command] [arguments]

Untuk melihat semua subperintah yang tersedia, ketik:

  1. docker

Mulai dari Docker 19, daftar lengkap subperintah yang tersedia termasuk:

Output
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Untuk melihat opsi yang tersedia untuk perintah spesifik, ketik:

  1. docker docker-subcommand –help

Untuk melihat informasi keseluruhan sistem tentang Docker, gunakan:

  1. docker info

Mari kita jelajahi beberapa dari perintah ini. Kita akan mulai dengan bekerja dengan citra.

Langkah 4 — Bekerja dengan Citra Docker

Kontainer Docker dibangun dari citra Docker. Secara asali, Docker menarik citra ini dari Docker Hub, suatu registri Docker yang dikelola oleh Docker, perusahaan di balik proyek Docker. Siapa pun dapat menjadi hos citra Docker miliknya di Docker Hub, sehingga sebagian besar aplikasi dan distro Linux yang Anda butuhkan akan memiliki citra yang ditempatkan di dalamnya.

Untuk memeriksa apakah Anda dapat mengakses dan mengunduh citra dari Docker Hub, ketik:

  1. docker run hello-world

Keluaran akan mengindikasikan bahwa Docker bekerja dengan benar:

Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

...

Docker pada awalnya tidak dapat menemukan citra hello-world secara lokal, sehingga Docker mengunduh citra dari Docker Hub, yang merupakan repositori asali. Setelah citra diunduh, Docker menciptakan suatu kontainer dari citra dan aplikasi di dalam kontainer yang dieksekusi, yang menampilkan pesan.

Anda dapat mencari citra yang tersedia di Docker Hub dengan menggunakan perintah docker dengan subperintah search. Sebagai contoh, untuk mencari citra Ubuntu, ketik:

  1. docker search ubuntu

Skrip ini akan mencari di Docker Hub dan memberi daftar semua citra yang namanya cocok dengan string pencarian. Dalam kasus ini, keluarannya akan mirip seperti ini:

Output
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   10908               [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   428                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   244                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   218                                     [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   108                 [OK]
ansible/ubuntu14.04-ansible                               Ubuntu 14.04 LTS with
...

Pada kolom OFFICIALOK menandakan citra yang dibuat dan didukung oleh perusahaan yang ada di balik proyek ini. Setelah Anda mengidentifikasi citra yang Anda ingin gunakan, Anda dapat mengunduhnya ke komputer Anda menggunakan subperintah pull.

Jalankan perintah berikut ini untuk mengunduh citra ubuntu resmi ke komputer Anda:

  1. docker pull ubuntu

Anda akan melihat keluaran berikut ini:

Output
Using default tag: latest
latest: Pulling from library/ubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Setelah suatu citra telah diunduh, Anda lalu dapat menjalankan suatu kontainer dengan menggunakan citra yang telah diunduh dengan subperintah run. Seperti yang Anda lihat dengan contoh hello-world, jika suatu citra belum diunduh saat docker dieksekusi dengan subperintah run, klien Docker akan mengunduh citra terlebih dahulu, lalu menjalankan kontainer dengan menggunakannya.

Untuk melihat citra yang telah diunduh ke komputer Anda, ketik:

  1. docker images

Keluaran akan terlihat mirip dengan yang berikut ini:

Output
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              1d622ef86b13        3 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

Seperti yang Anda nanti lihat di tutorial ini, citra yang Anda gunakan untuk menjalankan kontainer dapat dimodifikasi dan digunakan untuk menghasilkan citra baru, yang mungkin diunggah (didorong adalah istilah teknisnya) ke Docker Hub atau registri Docker lainnya.

Mari kita lihat cara menjalankan kontainer secara lebih mendetail.

Langkah 5 — Menjalankan Kontainer Docker

Kontainer hello-world yang Anda jalankan di langkah sebelumnya adalah contoh dari kontainer yang berjalan dan keluar setelah menampilkan suatu pesan teks. Kontainer dapat menjadi lebih bermanfaat daripada itu dan dapat menjadi interaktif. Bagaimanapun juga, kontainer mirip dengan mesin virtual, hanya saja lebih ramah sumber daya.

Sebagai contoh, mari kita jalankan kontainer dengan menggunakan citra terbaru dari Ubuntu. Kombinasi dari switch -i dan -t memberi Anda akses shell interaktif ke dalam kontainer:

  1. docker run -it ubuntu

Prompt perintah Anda harus berubah untuk mencerminkan fakta bahwa Anda kini bekerja di dalam kontainer dan harus berbentuk seperti ini:

Output
root@d9b100f2f636:/#

Perhatikan id kontainer di dalam prompt perintah. Pada contoh ini, id-nya adalah d9b100f2f636. Anda akan membutuhkan id kontainer itu untuk mengidentifikasi kontainer ketika Anda ingin menghapusnya.

Sekarang Anda dapat menjalankan perintah apa pun di dalam kontainer. Sebagai contoh, mari kita perbarui basis data paket di dalam kontainer. Anda tidak perlu mengawali perintah dengan sudo, karena Anda kini beroperasi di dalam kontainer sebagai pengguna root:

  1. apt update

Lalu, instal aplikasi apa pun di dalamnya. Mari kita instal Node.js:

  1. apt install nodejs

Ini menginstal Node.js di dalam kontainer dari repositori Ubuntu resmi. Saat instalasi selesai, pastikan bahwa Node.js sudah terinstal:

  1. node -v

Anda akan melihat nomor versi ditampilkan pada terminal Anda:

Output
v10.19.0

Segala perubahan yang Anda buat di dalam kontainer hanya berlaku pada kontainer itu.

Untuk keluar dari kontainer, ketik exit di prompt.

Selanjutnya, mari kita lihat tentang pengelolaan kontainer di sistem kita.

Langkah 6 — Mengelola Kontainer Docker

Setelah menggunakan Docker selama beberapa waktu, Anda akan memiliki banyak kontainer aktif (berjalan) dan tidak aktif di komputer Anda. Untuk melihat kontainer yang aktif, gunakan:

  1. docker ps

Anda akan melihat keluaran yang mirip dengan yang berikut ini:

Output
CONTAINER ID        IMAGE               COMMAND             CREATED             

Dalam tutorial ini, Anda memulai dua kontainer, satu dari citra hello-word dan yang lain dari citra ubuntu. Kedua kontainer tidak lagi berjalan, tetapi masih ada di sistem Anda.

Untuk melihat semua kontainer — aktif dan tidak aktif, jalankan docker ps dengan switch -a:

  1. docker ps -a

Anda akan melihat keluaran mirip dengan ini:

1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie

Untuk melihat kontainer terbaru yang Anda buat, teruskan ke switch -l:

  1. docker ps -l
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 1c08a7a0d0e4 ubuntu “/bin/bash” 2 minutes ago Exited (0) 40 seconds ago quizzical_mcnulty

Untuk memulai kontainer yang telah dihentikan, gunakan docker start, diikuti dengan id kontainer atau nama kontainer. Mari kita mulai kontainer berbasis Ubuntu dengan ID 1c08a7a0d0e4:

  1. docker start 1c08a7a0d0e4

Kontainer akan memulai, dan Anda dapat menggunakan docker ps untuk melihat statusnya:

Output
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1c08a7a0d0e4        ubuntu              "/bin/bash"         3 minutes ago       Up 5 seconds                            quizzical_mcnulty

Untuk menghentikan suatu kontainer yang sedang berjalan, gunakan docker stop, diikuti dengan ID atau nama kontainer. Kali ini, kita akan menggunakan nama yang diberikan Docker kepada kontainer, yaitu quizzical_mcnulty:

  1. docker stop quizzical_mcnulty

Setelah Anda memutuskan bahwa Anda tidak lagi membutuhkan suatu kontainer, hapus kontainer itu dengan perintah docker rm, dengan kembali menggunakan baik ID atau nama kontainer. Gunakan perintah docker ps -a untuk menemukan ID atau nama kontainer untuk kontainer yang terkait dengan citra hello-world dan hapus.

  1. docker rm youthful_curie

Anda dapat memulai suatu kontainer baru dan memberinya nama dengan menggunakan switch --name. Anda juga dapat menggunakan switch --rm untuk menciptakan suatu kontainer yang menghapus dirinya sendiri saat dihentikan. Lihat perintah docker run help untuk informasi lebih lanjut tentang opsi ini dan lainnya.

Kontainer dapat diubah menjadi citra yang Anda dapat gunakan untuk menciptakan kontainer baru. Mari kita lihat cara kerjanya.

Langkah 7 — Menerapkan Perubahan dalam Kontainer ke Citra Docker

Saat Anda memulai suatu citra Docker, Anda dapat menciptakan, memodifikasi, dan menghapus berkas seperti yang Anda dapat lakukan dengan mesin virtual. Perubahan yang Anda buat hanya akan berlaku untuk kontainer itu. Anda dapat memulai dan menghentikannya, tetapi setelah Anda menghancurkannya dengan perintah docker rm, perubahan akan hilang selamanya.

Bagian ini menunjukkan kepada Anda cara menyimpan kondisi suatu kontainer sebagai citra Docker baru.

Setelah menginstal Node.js di dalam kontainer Ubuntu, Anda kini memiliki suatu kontainer yang berjalan dari suatu citra, tetapi kontainer ini berbeda dari citra yang Anda gunakan sebelumnya untuk menciptakannya. Tetapi Anda mungkin ingin menggunakan kembali kontainer Node.js ini sebagai dasar untuk citra baru nantinya.

Lalu terapkan perubahan ke instans citra Docker baru dengan menggunakan perintah berikut.

  1. docker commit -m “What you did to the image” -a “Author Name” container_id repository/new_image_name

Switch -m adalah untuk pesan penerapan yang membantu Anda dan orang lain untuk mengetahui perubahan yang Anda buat, sedangkan -a digunakan untuk menentukan penulisnya. container_id adalah hal yang Anda catat sebelumnya dalam tutorial saat Anda memulai sesi Docker interaktif. Kecuali Anda menciptakan repositori tambahan pada Docker Hub, repository itu biasanya merupakan nama pengguna Docker Hub Anda.

Sebagai contoh, untuk pengguna bernama sammy, dengan ID kontainer d9b100f2f636, perintahnya adalah:

  1. docker commit -m “added Node.js” -a sammy d9b100f2f636 sammy/ubuntu-nodejs

Saat Anda melakukan commit pada suatu citra, citra baru itu disimpan secara lokal di komputer Anda. Dalam tutorial ini nantinya Anda akan belajar cara mendorong citra ke suatu registri Docker seperti Docker Hub sehingga orang lain dapat mengaksesnya.

Membuat daftar citra Docker kembali akan menampilkan citra baru dan lama yang menjadi rujukan bagi yang baru:

  1. docker images

Anda akan melihat keluaran seperti ini:

Output
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
...

Pada contoh ini, ubuntu-nodejs adalah citra baru, yang diturunkan dari citra ubuntu yang sudah ada sebelumnya dari Docker Hub. Perbedaan ukuran mencerminkan perubahan yang dibuat. Dan dalam contoh ini, perubahannya adalah bahwa NodeJS telah diinstal. Jadi, lain kali Anda perlu menjalankan suatu kontainer yang menggunakan Ubuntu dengan NodeJS yang telah diinstal sebelumnya, Anda dapat langsung menggunakan citra baru ini.

Anda juga dapat membangun citra dari suatu Dockerfile, yang memungkinkan Anda mengotomatiskan instalasi perangkat lunak dalam suatu citra baru. Namun, hal itu berada di luar cakupan tutorial ini.

Sekarang, mari kita berbagi citra baru dengan orang lain sehingga mereka dapat menciptakan kontainer dari citra itu.

Langkah 8 — Mendorong Citra Docker ke Repositori Docker

Langkah logis berikutnya setelah menciptakan citra baru dari citra yang sudah ada adalah membagikannya kepada beberapa teman yang Anda pilih, seluruh dunia di Docker Hub, atau registri Docker lain yang dapat Anda akses. Untuk mendorong suatu citra ke Docker Hub atau registri Docker lain, Anda harus memiliki akun di sana.

Bagian ini menunjukkan kepada Anda cara mendorong suatu citra Docker ke Docker Hub. Untuk mempelajari cara membuat registri Docker pribadi Anda sendiri, bacalah How To Set Up a Private Docker Registry on Ubuntu 14.04.

Langkah pertama untuk mendorong citra Anda adalah dengan melakukan log masuk ke Docker Hub.

  1. docker login -u docker-registry-username

Anda akan diminta melakukan autentikasi menggunakan kata sandi Docker Hub Anda. Jika Anda memberikan kata sandi yang benar, autentikasi pasti berhasil.

Catatan: Jika nama pengguna registri Docker Anda berbeda dari nama pengguna lokal yang Anda gunakan untuk menciptakan citra, Anda harus menandai citra Anda dengan nama pengguna registri. Untuk contoh yang diberikan pada langkah terakhir, Anda perlu mengetik:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Lalu, Anda dapat mendorong citra Anda sendiri menggunakan:

  1. docker push docker-registry-username/docker-image-name

Untuk mendorong citra ubuntu-nodejs ke repositori sammy, perintahnya adalah:

  1. docker push sammy/ubuntu-nodejs

Proses ini mungkin membutuhkan waktu beberapa saat untuk mengunggah citra hingga selesai, tetapi saat selesai, keluaran akan terlihat seperti ini:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Setelah mendorong citra ke registri, citra akan terdaftar pada dasbor akun Anda, seperti yang ditampilkan dalam gambar di bawah ini.

Daftar citra Docker baru pada Docker Hub

Jika upaya mendorong menghasilkan kesalahan seperti ini, ada kemungkinan Anda belum log masuk:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Lakukan log masuk dengan login docker dan ulangi upaya dorong. Lalu pastikan bahwa citra itu ada di halaman repositori Docker Hub.

Anda sekarang dapat menggunakan docker pull sammy/ubuntu-nodejs untuk menarik citra itu ke mesin baru dan menggunakannya untuk menjalankan suatu kontainer baru.

 

source : https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-id

Posted on: October 18, 2023, by :  | 59 views
https://serang.ut.ac.id/css/css/slot88/ https://tinjut.bagkeu.dikdasmen.kemdikbud.go.id/slot-maxwin/ https://dpm.polinema.ac.id/slot-gacor/ https://akademik.ft.unm.ac.id/slot-dana/ https://ppdb.probolinggokab.go.id/slot-5000/ https://bkad.sulselprov.go.id/assets/ https://ojs.balidwipa.ac.id/docs/slot-gacor/ http://korpri.pekalongankab.go.id/api/slot-gacor/ https://elang.umpp.ac.id/foto/farmasi/-/asset/ http://rsud-kelet.jatengprov.go.id/wp-content/-/asset/ https://kusdhianto-fe.staff.ugm.ac.id/slot88/ http://ppdb.probolinggokab.go.id/judi-bola/ https://bapenda.labuhanbatukab.go.id/racikan-sbobet/ http://rsud-kelet.jatengprov.go.id/wp-content/-/data/ https://agenda.riau.go.id/-/judi-bola/ https://balapan.padang.go.id/sbobet88/ http://jdih.wakatobikab.go.id/sbobet88/ http://kph.menlhk.go.id/sbobet88/ https://bkad.sulselprov.go.id/data/ https://dpm.polinema.ac.id/slot-gacor/ https://dinkes.jemberkab.go.id/storage/attachments/