Apa itu Docker? - Tutorial Cara Menggunakan Docker di Windows 10

April 25, 2020

Apa Itu Docker ?

Docker merupakan sebuah aplikasi open source yang biasa digunakan untuk menyatukan beberapa file dalam sebuah program software. File-file pendukung yang ada disebut juga image dan dikumpulkan menjadi satu dalam sebuah wadah yang dinamakan container. Container ini menjadi sebuah alat untuk penyimpanan file dan docker merupakan platform yang dibangun dengan teknologi container sebagai dasarnya.

Docker, bagi yang belum begitu mengenalnya, dalam dunia DevOps merupakan container yang kalau boleh dianalogikan sebagai sistem yang terpaket dalam menjalankan aplikasi. Jadi, segala kebutuhan/dependensi untuk menjalankan aplikasi di paket menjadi satu kontainer. Dengan begitu, kalau 1 paket dipindah ke tempat lain (dalam hal ini migrating/pindah server ataupun scaling/clustering) dapat dilakukan dengan lebih mudah.

Jadi setiap container dapat memiliki “sistem operasi mini” sendiri di dalamnya. Hampir mirip dengan VM (Virtual Machine) seperti VirtualBox, VMWare, OpenVZ atau KVM, tapi bukan VM. Ini harus jadi pemahaman dasar dulu, jangan salah kaprah. VM menggunakan 1 kesatuan sistem operasi, sedangkan container bisa sharing library sistem operasi induk.

Docker bukan VM

Sekali lagi Docker itu bukan VM ataupun virtualisasi server yang bisa untuk VPS/VDS sebagai PaaS (Platform as a Service) atau IaaS (Infrastructure as a Service). Tapi sebagai CaaS (Container as a Service). Meskipun pada kenyataannya, ide gila untuk menjadikannya sebagai mini-PaaS seperti Flynn dan Deis muncul. Menarik untuk tetap disimak, tapi Docker umumnya fokus kepada kegunaannya di software development.
Dengan menggunakan Docker, aplikasi tidak langsung serta merta aman terkendali karena sifatnya yang terisolasi.

Docker dipakai untuk pengembangan aplikasi yang sesuai dengan keadaan sebenarnya di server produksi. Jadi misalkan server menggunakan RHEL dengan Python 2.7 dan developer menggunakan Ubuntu dengan Python 2.6, developer tidak diharuskan untuk mengupgrade terlebih dahulu sistemnya satu persatu. Hanya dengan bekerja menggunakan kontainer ini yang sesuai dengan mesin produksi, tidak akan ada masalah perbedaan ketergantungan library sistem nantinya.

Misalnya pada mesin produksi berada dalam environment berikut:
Sistem Operasi : RedHat Enterprise Linux (RHEL) Edition 7.1
Platform Language : PHP 5.6.18, Node.js 4.3.1
Database Server : MariaDB 10.0.24
Web Server : Nginx 1.9.11

Sedangkan developer bekerja pada environment:
Sistem Operasi : Ubuntu 15.10
Platform Language : PHP 5.4.11
Database Server: MySQL 5.6
Web Server : Apache httpd 2.4.18

Sebaiknya masing-masing lingkungan development dibungkus dalam 1 kontainer. Dalam hal ini; PHP 5.6.18 dengan RHEL 7.1 dalam satu kontainer, Node.js 4.3.1 / RHEL 7.1 di satu kontainer, MariaDB 10.0.24 / RHEL 7.1 di satu kontainer lainya, dan Nginx 1.9.11 dengan RHEL 7.1 di satu kontainer terpisah juga. Dengan demikian, developer yang bersangkutan hanya menggunakan kontainer yang dibutuhkan saja. Begitu juga apabila ada developer baru yang bergabung, tidak akan memakan waktu lama untuk beradaptasi dan mulai bekerja kolaborasi.

Meski aplikasi yang dibangun tanpa menggunakan kontainer ada kemungkinan besar berhasil tanpa bug sama sekali, namun ini dapat diminimalisir dengan bekerja pada lingkungan yang sama dengan mesin produksi. Katakan saja, dari 100 developer yang masing-masing bisa memiliki mesin kerja yang berbeda-beda, proses identifikasi akan sulit dilakukan apabila terjadi kesalahan/bugs. Dan ini bisa berakibat fatal, seperti biasa yang ditemukan, unggah langsung ke server produksi, error, klien marah-marah.

Dengan agile development Build-Deploy-Test (BDT) yang diterapkan, proses CI/CD (Continuous Integration/Continuous Delivery) sebaiknya dilakukan otomatis dan meminimalisir proses manual. Dengan sistem kontainer Docker, proses ini dapat dilakukan dengan lebih mudah.

 

Perlu tidak menggunakan docker sekarang?

SDLC (Software Development Life Cycle) yang baik tentunya perlu. Dari awal sekali malah. Tapi docker ini sekali lagi hanya sebagai tools tambahan mengurangi sakit kepala manager atau product owner dalam pengembangan aplikasi yang rumit, atau aplikasi sudah memiliki klien/pelanggan dan tidak boleh ada bug apalagi sampai down, dan memiliki developer dalam jumlah tidak sedikit (≥ 5) yang bekerja secara kolaborasi dan terus menerus. Atau mungkin bekerja sebagai tenaga lepas (freelancer) yang bekerja sesuai lingkungan kerja klien yang sedang dihadapi.

Tapi sebelumnya perlu diperhatikan dulu proses/tahapan di atas.
  • Server produksi sudah fix, aman dan bebas bug untuk tahap yang sekarang
  • Code Repository tidak lagi menjadi masalah, semua developer bisa berkolaborasi dengan baik
  • Automated Test sudah dilakukan untuk setiap code baru
  • Product Owner sudah nyaman dengan BDT sekarang dan siap untuk proses pengembangan lebih lanjut atau pengembangan aplikasi baru pendukung barangkali
Continuous Test tujuan utamanya bukan untuk mencari kesalahan dan menambah sakit kepala developer. Tapi tes berkelanjutan ditujukan untuk menciptakan produk yang stabil dan bebas bug saat masuk mesin produksi. Dan otomatisasi proses ini akan sangat membantu dibanding apabila dilakukan oleh Tester ataupun Product Owner sebelum dideploy di mesin produksi.

Kalau masih ada yang mengganjal, terutama kesiapan dan kematangan di mesin produksi, menggunakan docker hanya akan menjadi permasalahan tambahan bagi developer dan product owner. Mengembangkan sesuatu yang belum fix, hanya akan menumpuk permasalahan sampah (bugs) yang belum diselesaikan.

 

Fungsi dan Manfaat Docker

Docker yang menggunakan teknologi dasar container melakukan tugasnya dengan memungkinkan para developer untuk mengisolasi kode ke dalam satu wadah yaitu docker. Hal ini bisa membuat developer lebih mudah untuk memodifikasi dan memperbarui program yang ada. Hal ini juga cocok untuk para perusahaan, seperti yang sudah ditunjukkan oleh docker bahwa untuk memecahkan proyek pengembangan besar diantara beberapa pengembangan yang lebih kecil maka tim Agile dapat menggunakan jenkins, program CI/CD open source untuk bisa mengotomatisasi pengiriman perangkat baru (software) yang baru ke dalam wadah.

Jay Lyman yang merupakan seorang analis senior di 451 research juga mengatakan bahwa organisasi dan perusahaan akan berusaha mencari dan terkadang juga berjuang dengan sulit untuk membuat aplikasi serta beban kerja lebih portabel dan simple. Sehingga dapat didistribusikan secara efektif, standar, dan juga efisien. Sama seperti GitHub yang juga membuat kolaborasi dan inovasi dengan cara membuat kode sumber yang dapat dibagikan.

Docker ini sudah dirancang sedemikian rupa dengan penuh pertimbangan sehingga dapat dimasukkan ke dalam sebagian besar aplikasi DevOps termasuk Puppet, Chef, Vagrant, serta Ansible, atau dapat digunakan sendiri juga untuk lingkungan pengembangan.

 

Enam fitur yang ada pada docker, yaitu:

  • Docker EngineNah, docker engine ini merupakan docker yang digunakan untuk membuat image dan container. Docker engine ini juga sebagai aplikasi client-server dengan komponen-komponen utamanya.
  • Docker HubDocker hub adalah sebuah registry yang berisi kumpulan image-image. Sehingga dengan fitur docker hub ini dapat mengumpulkan image, beda dengan docker engine yang hanya membuatimage saja.
  • Docker ComposeDocker compose juga menjadi salah satu fitur unggulan dari docker. Docker compose ini merupakan fitur yang digunakan untuk menjalankan multi-container sekaligus. Sehingga dapat menghemat waktu.
  • Docker yang digunakan pada MacKalau yang satu ini pasti sudah tau kan kalo terdapat fitur docker yang memungkinkan penggunanya untuk menjalankan container docker pada Mac OS.
  • Docker yang digunakan pada LinuxSama seperti docker yang dapat digunakan untuk Mac, terdapat juga fitur docker yang dapat dijalankan jika menggunakan OS Linux di PC mu.
  • Docker yang digunakan pada WindowsTerakhir, yang tentunya paling banyak digunakan yaitu docker untuk Windows. Docker ini memungkinkan penggunanya untuk bisa menjalankan container docker di Windows. Tentunya mayoritas akan menggunakan docker ini karena pengguna windows pasti sangat banyak.

Kelebihan Docker

Docker yang sudah diklaim memiliki banyak manfaat tentunya memiliki kelebihan yang utama. Kelebihan tersebut yaitu:

  • Konfigurasi sederhanaKonfigurasi yang diterapkan oleh docker cukup sederhana dan bisa disesuaikan dengan kebutuhan aplikasi yang sedang akan dikembangkan. Hanya dengan menentukan beberapa kode saja, docker akan membuat lingkungan sendiri yang dibedakan dengan lingkungan server utama.
  • Platform Multi-CloudDocker juga mempunyai keunggulan yang utama loh. Docker tidak hanya bisa berjalan pada satu platform cloud aja. Ternyata docker juga dapat dijalankan pada beberapa platform cloud sehingga membuat docker menjadi lebih fleksibel. Karena docker sangat fleksibel, perusahaan pun menjadi lebih tertarik untuk mengadopsinya. Dengan docker yang bisa dijalankan melalui beberapa platform, memungkinkan penggunanya untuk memporting aplikasi antar lingkungan secara mudah
  • Standarisasi lingkungan & kontrol versiBiasanya, untuk melakukan upgrade komponen seluruh lingkungan akan dipecah terlebih dahulu. Jika terjadi masalah pada proses tersebut, docker sudah siap sedia untuk melakukan rollback ke versi sebelumnya melalui image docker. Penggunaan docker ini tentunya bekerja lebih cepat jika dibandingkan dengan virtual machine.
  • Dapat Melakukan Pengujian dan Distribusi Aplikasi Secara Terus MenerusDi keunggulan sebelumnya mimin bilang bahwa docker ini sangat fleksibel. Nah, fleksibilitas dengan berjalan pada segala macam sistem operasi ini membuat aplikasi yang menggunakan docker dapat dilakukan pengujian dengan lebih mudah. Dengan begitu, tidak perlu mempersiapkan konfigurasi yang membutuhkan waktu sangat lama. Segala proses pengujian pun dapat dilakukan secara cepat
  • IsolasiResource yang ada pada setiap aplikasi sudah dipastikan terisolasi secara terpisah oleh docker. Sehingga para pengguna nya dapat menyesuaikan kebutuhan di setiap aplikasi tanpa perlu mempengaruhi konfigurasi pada aplikasi yang lain.
  • KeamananDocker tentunya memiliki tingkat keamanan yang bagus. Docker akan memastikan aplikasi yang sedang berjalan tidak bisa mempengaruhi container dan memberikan kontrol penuh atas manajemen dan arus traffic. Pengamanan yang dilakukan docker selain itu adalah dengan mengatur OS host mount point dengan read-only yang tidak akan mengubah konfigurasi apapun kecuali ada yang memiliki akses penuh.

Perintah-perintah yang ada di Docker

1. Melihat Images.
$ docker images
2. Download Images.
$ docker pull debian (latest)
$ docker pull debian:9.8 (certain version)
3. Melihat Docker Container yang sedang running.
$ docker cotainer ls

4. Melihat semua list Docker Container.
$ docker container ls -a

5. Membuat Docker Container.
$ docker container create --name mongodb1 mongo:4.0

6. Start Container.
$ docker container start mongodb1

7. Mencari Images.
$ docker search mysql

8. Stop Container.
$ docker container stop mongodb1

9. Menghapus Container.
$ docker container rm mongodb1

10. Membuat Container yang dapat diakses dari host. Dengan kata lain, membuka port pada Container sehingga service yang dijalankan dapat diakses dari luar.
$ docker container create --name mongodb2 -p 1234:27017 mongo

11. Menjalankan Images secara langsung. Sehingga, container akan otomatis terbentuk dari Image tersebut.
$ docker run -itd mongo

12. Menjalankan Image secara langsung dan otomatis membuat container. Dan juga membuka port untuk container tersebut. Contohnya pada Image mysql/mysql-server.
$ docker run -d --name mysqlserver1 -p 1234:3306 mysql/mysql-server

13. Masuk ke dalam Container.
$ docker exec -it mongodb2 bash
Nanti mungkin anda akan menemui beberapa sedikit masalah, seperti Image yang tidak bisa di start dengan perintah:
$ docker container start namacontainer
walaupun Container tersebut sudah dibuat sebelumnya. Tetapi Image tersebut akan jalan ketika langsung dijalankan dari Image-nya, contohnya seperti mysql atau mysql/mysql-server.
Jadi ada langkah tertentu untuk menjalankan Image tertentu. Seperti mysql/mysql-server, anda bisa melihat dokumentasi resminya. Container mysql dapat di jalankan dengan perintah:
$ docker run -itd --name mysqlserver1 -p 1234:3306 mysql/mysql-server
Ketika dilihat pada running Container, maka Container tersebut langsung berjalan.
$ docker ps atau $ docker container ls

Cara menggunakan Docker dan eksekusi perintah

Contoh 1 – Setup Container Mysql Server

Berikut ini versi docker yang digunakan. Docker bisa didownload di sini


1. Download image untuk mysql-server.
$ docker pull mysql/mysql-server

2. Periksa apakah image sudah ter-download.
$ docker images

3. Buat kontainer untuk mysql-server dan langsung jalankan.
$ docker run -d --name mysqlserver1 -p 5000:3306 mysql/mysql-server


4. Periksa apakah kontainer sudah jalan.
$ docker container ls
GUI-nya

5. Periksa log pada container mysql-server untuk melihat password yang di-generate.
$ docker logs mysqlserver1
 


6. Untuk masuk ke kontainer mysql dapat menggunakan perintah:
$ docker exec -it mysqlserver1 bash

7. Masuk ke mysql.
$ mysql -u root -p (gunakan password yang di generate)

8. Mengganti password mysql.
$ ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';

9. Membuat user baru mysql.
$ CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpass';


10. Memberikan akses pada user agar dapat diakses dari luar atau host.
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%' WITH GRANT OPTION;

Contoh 2 – Menggunakan docker-compose

-Buat folder baru bernama docker-ryan.
-Buat sub folder, /php yang di dalamnya terdapat file index.php:
<!-- ./php/index.php -->
<html>
 <head>
  <title>Hello World</title>
 </head>
  <body>
   <?php
    echo "Hello, World!";
   ?>
  </body>
</html>

-Lalu buat file docker-compose.yml dengan konfigurasi sebagai berikut:
# ./docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: my_secret_pw_shh
MYSQL_DATABASE: test_db
MYSQL_USER: devuser
MYSQL_PASSWORD: devpass
ports:
- "9906:3306"
web:
image: php:7.2.2-apache
container_name: php_web
depends_on:
- db
volumes:
- ./php/:/var/www/html/
ports:
- "8100:80"
stdin_open: true
tty: true

-Berikut isi foldernya

-Buka powershell lokasi di folder tersebut, pilih file->open windows powershell, lalu jalankan perintah docker-compose up -d di terminal dan buka http://localhost:8100/ di browser.

-Pastikan container sudah running.


-Maka akan muncul tampilan ini
  • -Contoh di atas menggunakan port-forwarding untuk terhubung ke dalam containers dari komputer lokal.
webserver: http://localhost:8100
db: mysql://devuser:devpass@localhost:9906/test_db
  • -Direktori lokal, ./php, dipasang ke dalam container web server, letaknya sebagai /var/www/html/
  • -File-file di dalam folder lokal tadi ditampilkan ketika mengakses situs web si container.


Segini aja dulu, tunggu tutorial lainnya di blog ini.
Semoga bermanfaat.













Referensi:
https://docs.docker.com