Featured image of post Docker Untuk Pemula

Docker Untuk Pemula

Sebenarnya saya telat ya menulis artikel ini, karena saya malah sudah membahas container orchestration wkwkwk. Jadi saya menulis ini dikarenakan ada seseorang yang meminta saya untuk dijelaskan tentang Docker, dia seorang programmer yang baru saja mendapat pekerjaan dan perusahaannya (mungkin) menuntut dia agar bisa menguasai Docker. Sekarang yang jadi pertanyaan, “Kenapa seorang programmer harus memahami Docker?”, jawabannya adalah (menurut saya) dikarenakan konsep Microservices yang kian populer kontainerisasi menjadi sesuatu yang penting didalam suatu instansi/perusahaan, sebenarnya ada seorang DevOps yang akan mengurus tentang kontainerisasi, namun programmer pun akan dipaksa bekerja dalam environment kontainer tersebut yang menghasilkan statement bahwa programmer pun juga harus mengenal atau menguasai kontainerisasi dalam konteks artikel ini yaitu Docker. Atau dalam kasus lain, dikantornya mungkin dia adalah Programmer Superman.

Apa itu Docker dan Apa perbedaannya dengan VM

Seperti yang sudah saya singgung sebelumnya tentang kontainerisasi, Docker merupakan sebuah tempat yang menampung program beserta library, file konfigurasi, dll. Kontainer ini berbeda dengan virtual machine yang mana perbedaanya terdapat pada penggunnan sistem operasi pada masing-masing nodenya. Virtualisasi berjalan diatas hypervisor dan guest OS, docker dapat menjalankan aplikasi langsung tanpa kedua hal tersebut. Lebih jelasnya perhatikan bagan berikut :

Docker vs VM

Kenapa Pakai Docker?

  • Ya… seperti yang sudah anda baca diatas, daripada kita menggunakan VM untuk aplikasi berbasis microservices, yang harus melakukan installasi OS, Aplikasi, library, dll. Lebih baik menggunakan container.
  • VM juga saya rasa terlalu boros dalam hal resources terutama storage. Jadi kehadiran docker sangat membantu kita.
  • Untuk Docker sendiri menurut saya penggunaannya simpel dan perintah-perintahnya mudah dipahami (namun docsnya lumayan sampah).
  • Docker bersifat Open source dibawah lisensi Apache Versi 2.0 yang bisa dipergunakan secara gratis.

Komponen Docker

Terdapat beberapa komponen pada Docker yang saling membutuhkan satu sama lain. Diantaranya adalah :

  • Docker Image : merupakan sebuah template yang bersifat read-only, di dalamnya akan terdapat sistem operasi beserta aplikasi. Image dasar dapat dibuat sendiri dengan menambahkan aplikasi yang dibutuhkan ke dalam Dockerfile dan hasilnya dapat kita simpan ke Registry.
  • Docker Container : merupakan runtime instance dari Docker image. Container mengandung seluruh kebutuhan untuk aplikasi sehingga aplikasi dapat berjalan dengan cara yang terisolasi.
  • Docker Registry : merupakan komponen penyimpanan untuk Docker image. Berupa repository yang dapat diatur public maupun private, untuk kepentingan kolaborasi bersama orang lain. Docker Hub merupakan repository cloud yang disediakan oleh Docker secara gratis. Docker Hub sendiri adalah repository yang bersifat public. Jika ingin private, mungkin kalian dapat mencoba Gitlab, Bitbucket, dll.
  • Dockerfile : berupa file yang mengandung serangkaian instruksi tentang bagaimana membangun Docker Image. Docker image tersebut mengandung setiap kode dengan dependensinya. Contoh Dockerfile yang sederhana dengan image node.js versi 10.
1
2
3
4
5
FROM node:10
WORKDIR /usr/app
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]

Pelajari Dulu Basic Commandnya

Basic Command ini sebenarnya, perintah-perintah Docker yang sering digunakan saja, untuk perintah-perintah yang lain silahkan kalian explore sendiri ya. Saya sengaja menuliskannya berurutan, agar kalian mudah untuk mempelajarinya terutama step-by-stepnya. Langsung saja, berikut adalah listnya :

Mengunduh Docker Image

Kita bisa mengunduh Docker image dari registry dengan perintah Docker Pull. Commandnya sangat sederhana, sebagai contoh saya ingin mengunduh image nginx dengan tag latest.

1
docker pull nginx:latest

Melihat daftar image yang dimiliki

1
2
3
docker images
# Atau
docker image ls

Mengganti nama/tag image

Ini biasanya berfungsi saat kita ingin mengunggah image ke registry docker hub. Dalam docker hub, image yang diunggah harus berformat <username>/<nama_image>. Berikut contoh perintahnya.

1
2
3
docker tag <nama_image>:<tag> <username>/<nama_image>:<tag>
# Contoh
docker tag nginx:latest leon0408/nginx:10.0

Menghapus Image

1
2
3
4
# Delete 1 image
docker image rm nginx:latest
# Delete semua image yang tidak terpakai
docker image prune -a

Membuat Docker Image

Untuk langkah ini, sebenarnya kita harus punya Dockerfile terlebih dahulu. Anyway… Berikut perintahnya.

1
2
3
docker build -t <nama_image> <direktori_dockerfile>
# Contoh
docker build -t aplikasi_kasir .

Membuat Container

1
2
3
docker container create --name <nama_container> -p <port_yang_dikeluarkan>:<port_container> <nama_image>
# Contoh
docker container create --name server-nginx -p 80:80 nginx

Menjalankan Container

1
2
3
docker start <nama_container>
# Contoh
docker start server-nginx

Membuat sekaligus Menjalankan Container

Sebenarnya ada cara untuk membuat container sekaligus menjalankannya, yaitu dengan menggunakan perintah docker run. Jika kalian lihat perintah dibawah terdapat -d, itu berfungsi agar container berjalan di backgroud. Karena defaultnya, dengan perintah ini container akan berjalan dengan menampilkan log.

1
2
3
docker run -d -p <port_yang_dikeluarkan>:<port_container> --name <nama_container> <nama_image>
# Contoh
docker run -d -p 81:80 --name server-nginx-2 nginx

Lalu bisa kalian cek dengan membuka browser, lalu memasukkan URL http://localhost:81.

Tampilan awal Nginx

Melihat Container

1
2
3
4
5
6
7
# Melihat Container yang berjalan
docker ps
# Melihat semua Container
docker ps -a
# Output
dd8749428a66   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:81->80/tcp   server-nginx-2
54a5c626a82b   nginx     "/docker-entrypoint.…"   4 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   server-nginx

Stop & Restart Container

1
2
3
4
# Stop
docker stop <nama_container>
# Restart
docker restart <nama_container>

Menghapus Container

Untuk menghapus kontainer, posisi kontainer harus dalam keadaan mati/stopped. Jika ingin menghapus kontainer yang sedang berjalan secara paksa, kalian bisa menambahkan flag -f.

1
2
3
docker container rm <nama_container>
# Atau
docker rm <nama_container>

Login Registry

Sebagai contoh, disini saya login ke registry docker hub, dengan akun saya sendiri.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Command
docker login
# Login Prompt
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: leon0408
Password: 
WARNING! Your password will be stored unencrypted in /home/dark/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Push Image ke Registry

Jika kalian bingung kenapa imagenya tidak bisa diunggah karena tadi bacanya di skip-skip. Mending kalian baca lagi perintah untuk mengganti nama image.

1
2
3
docker push <nama_image>:<tag>
# Contoh
docker push leon0408/nginx:10.0

Penutup

Menurut saya sampai disitu saja penjelasan dari saya. Jika ada tambahan atau pertanyaan, silahkan tampung pada kolom komentar. Sekian dan terimakasih…

Referensi

comments powered by Disqus
Writen with ❤️ by Leon
Built with Hugo
Theme Stack designed by Jimmy