Docker Basic
Docker Architecture

- Docker Client : interface interaksi pengguna dengan docker. interface ini dapat berupa docker CLI atau docker desktop (GUI)
- Docker Daemon (Docker Engine) : komponen inti yang mengelola container docker di host. Docker Daemon bertanggung jawab untuk membangun, menjalankan, dan memantau kontainer berdasarkan perintah yang diterima dari Docker Client. Docker Daemon juga berinteraksi dengan Docker Registries untuk mengunduh dan mengunggah Docker Images.
- Docker Image : template statis (read-only) yang berisi paket aplikasi dan semua dependensinya yg sudah terinstall di dalamnya dan siap dijalankan (ex: nginx, mongodb, mysql, or custom app). Docker image ini digunakan sebagai basis untuk menciptakan kontainer.
- Docker Container : instance runtime dari Docker Images atau instance yg dijalankan berdasarkan blueprint docker images. Kontainer menjalankan aplikasi dalam lingkungan terisolasi yang memastikan konsistensi di berbagai lingkungan, mulai dari pengembangan hingga produksi. Kontainer dapat dijalankan, dihentikan, dipindahkan, dan dihapus sesuai kebutuhan tanpa mempengaruhi sistem host atau kontainer lainnya.
- Docker Registry : Docker Registries adalah repositori tempat Docker Images disimpan dan dikelola. Docker Hub adalah registry publik yang paling umum digunakan, tetapi Anda juga dapat menggunakan registry privat seperti Docker Registry atau layanan registry dari penyedia cloud seperti AWS ECR, Google Container Registry, dan lainnya. Registries memungkinkan pengembang untuk mengunduh image yang sudah ada atau mengunggah image mereka sendiri untuk dibagikan.
- Docker Compose : Docker Compose adalah alat yang digunakan untuk mendefinisikan dan menjalankan aplikasi multi-kontainer Docker. Dengan Docker Compose, Anda dapat mengatur berbagai layanan yang diperlukan oleh aplikasi Anda dalam sebuah file konfigurasi YAML (docker-compose.yml). Ini memudahkan pengelolaan dan orkestrasi berbagai kontainer yang saling berinteraksi.
- Docker Volume : Digunakan untuk menyimpan data yang persisten dan dapat dibagikan antar kontainer. Volume memungkinkan data tetap ada meskipun kontainer dihentikan atau dihapus.
- Docker Networking : Mengatur komunikasi antar kontainer dan antara kontainer dengan jaringan eksternal. Docker menyediakan berbagai opsi jaringan seperti bridge, host, overlay, dan lainnya untuk memenuhi kebutuhan komunikasi aplikasi Anda.
Docker Command
docker pull
Perintah untuk mengunduh Docker image dari registry seperti Docker Hub (hub.docker.com).
docker pull <image_name>
docker pull nginxDocker Hub adalah layanan registry publik yang menyimpan berbagai jenis Docker image. Di sini, Anda bisa menemukan image resmi dari berbagai aplikasi dan layanan, serta image dari komunitas. Anda juga bisa membuat akun Anda sendiri untuk menyimpan dan membagikan Docker image.
Tidak hanya Docker Hub, ada juga registry pribadi yang bisa Anda gunakan dalam organisasi atau untuk keperluan pribadi. Registry ini berguna jika Anda ingin menyimpan Docker image dalam lingkungan yang lebih terkontrol.
untuk mencari image yang diinginkan di docker hub, cukup masukkan nama aplikasinya di kotak pencarian, kemudian akan muncul beberapa list image, pilih yang officiall (resmi).

ketika dilihat detailnya akan diberikan juga cara unduh dan pemakainnya

docker run
Perintah untuk membuat dan menjalankan kontainer dari sebuah Docker Image.
docker run --name <nama_container> -d -p <port_ext>:<port_int> <image_name>
docker run --name my_nginx -d -p 8000:80 nginx
#keterangan
-d : berjalan dibackground, jika tanpa ini maka berjalan di foreground dan lognya akan muncul di terminal
-p 8000:80 : port 8000 (dari luar/local computer) akan diakrahkan ke port 80 (di dalam container) setelah menjalankan code diatas maka docker container dengan layanan nginx berhasil dibuat, jika dicek

docker ps
Perintah untuk melihat daftar kontainer yang sedang berjalan.

untuk melihat semua container baik yang aktif maupun yang tidak aktif tambahkan -a
docker exec
Perintah untuk masuk ke dalam container terminal
docker exec -it <container name or id> bash
docker exec -it fast-api bashdocker images
Perintah docker images digunakan untuk menampilkan daftar semua Docker images yang ada di sistem lokal Anda. Perintah ini memberikan informasi detail tentang setiap image, termasuk nama, tag, ukuran, dan waktu pembuatan.

docker stop
Perintah untuk menghentikan (tidak aktif) kontainer yang sedang berjalan.
docker stop <CONTAINER_ID or container_name>
docker stop my_nginxdocker rm
perintah untuk menghapus docker container
docker rm <CONTAINER_ID or container_name>
docker rm my_nginxdocker system df
perintah yang disediakan oleh Docker untuk membantu pengguna memantau dan mengelola penggunaan ruang disk yang digunakan oleh berbagai objek Docker di sistem Anda. df dalam konteks ini merupakan singkatan dari “disk filesystem”, yang mirip dengan perintah df di sistem UNIX yang menampilkan penggunaan disk.

docker builder prune
Perintah docker builder prune digunakan untuk menghapus cache build Docker yang tidak lagi digunakan. Cache build adalah file sementara yang dihasilkan selama proses membangun Docker images, seperti intermediate layers. Cache ini dapat menghabiskan ruang disk jika tidak dikelola dengan baik.
docker rmi
perintah untuk menghapus docker image.
- pastikan container yang mengacu ke docker image sudah benar-benar terhapus
docker rmi <IMAGE_NAME:tag or IMAGE_ID>
docker rmi nginx:latest
docker rmi bbc3f2ef2a7cmenghapus semua images
docker rmi $(docker images -q)menghapus “Dangling Images” (Image Tanpa Nama/Tag)

docker image prunedocker tag
Perintah docker tag digunakan untuk memberi nama atau tag pada sebuah Docker image. Tag ini berfungsi untuk mengidentifikasi image secara unik, terutama saat Anda bekerja dengan beberapa versi image atau saat mengunggahnya ke Docker Registry (seperti Docker Hub).
Mengapa Tag Penting?
- Versi Image: Tag membantu membedakan versi yang berbeda dari image, misalnya
v1.0,v1.1, ataulatest. - Pengelolaan Image di Registry: Sebelum mengunggah (push) image ke registry, Anda harus memberikan nama dan tag yang sesuai dengan struktur registry.
- Kemudahan Penggunaan: Tag mempermudah untuk merujuk ke image tertentu saat menjalankan kontainer
rename tag
docker tag nginx:latest nginx:v1.0.0
rename docker image name
docker tag nginx:latest nginx_123:v1.0.0
note:
- jika tidak ada perubahan di docker layer nya, maka image id nya tetap dan tidak akan membebani penyimpanan meskipun ada banyak versi atau name yg berbeda dari base docker image tersebut dalam kasus ini docker nginx