KULGRAM #002 Docker Container DIMULAI

banner kulgram #002

Assalamualaikum, selamat malam temen-temen semua…

Bagaimana kabarnya malam Minggu ini?

Nah, kira-kira saya perlu perkenalan lagi gak nih? hehehe….

Perkenalkan (lagi), saya Samsul Ma’arif. Saya warga negara Indonesia asli Cilacap, Jawa Tengah yang sekarang tinggal di Turen, Kab. Malang, Jawa Timur bersama istri tercinta :-D.

Aktifitas saya sehari-hari adalah seorang A.J.I. Ada yang tau apa itu?

Ya, betul. Antar Jemput Istri. hehehehe…

Selain itu, saya juga seorang sysadmin di PuskoMedia Indonesia, sebuah perusahaan yang bergerak di bidang web hosting.

Sebelumnya saya ucapkan terima kasih untuk pak Septi (@kangsepti) founder grup ini telah memberikan kesempatan untuk saya sharing tentang Docker Container.

Baik temen-temen semua, seperti yang telah saya tuliskan di pengumuman kulgram kali ini.

Bahwa prasyarat mengikuti kulgram kali ini adalah telah membaca log kulgram sebelumnya.

Ini supaya apa yang saya sampaikan pada kulgram #001 tidak perlu saya ulangi lagi. :v Lagipula di grup ini pun masih dapat di baca kulgram sebelumnya… hehehe

Oiya, mungkin perlu saya sampaikan bahwa materi ini masih merupakan materi dasar untuk memahami docker.

Jadi belum sampai tahap implementasi. Karena terus terang saya sendiri baru belajar tentang docker ini.

Karena kata guru saya, cara belajar yang paling efektif adalah dengan cara mengajar. Kita sama-sama belajar di sini.

Kalo ada yang salah, mohon dikoreksi.

MATERI & PRAKTEK

Logo Docker

+ Lebih lanjut Perintah Docker

Kalau pada kulgram sebelumnya kita sudah belajar menggunakan sub-sub perintah pull, run, images, exec, dan search.

Kali ini kita akan belajar menggunakan beberapa perintah lain, rm, rmi, ps, port, inspect, commit, login, logout.

Namun sebelumnya, kita akan menggunakan perintah untuk menjalankan docker image yang sudah diunduh pada kulgram sebelumnya.

docker run -dti --name app1 ubuntu:14.04

Oke, setelah kita menjalankan image ubuntu. kita coba install beberapa aplikasi, atau modifikasi beberapa berkas.

Sekarang masuk ke container docker yang sedang running tersebut.

docker exec -ti app1 /bin/bash

Coba lakukan update, lalu install python.

tidak harus python ya…. bebas… yang penting pada praktek ini temen-temen paham…. bahwa proses ini kita sedang memodifikasi container yang sedang dijalankan…

root@bb565d4e6aae:/# apt update && apt install python

setelah berhasil, keluar dari container dengan perintah exit.

seperti kulgram sebelumnya, untuk memudahkan teman-teman memahami prosesnya, saya buatkan rekamannya dengan asciinema :

Setelah menginstall aplikasi yang dipilih atau memodifikasi konten dalam kontainer tersebut, kita dapat menyimpannya dengan sub-perintah commit sebagai berikut :

docker commit -a "Samsul Maarif" -m "Ini appku" app1 samsulmaarif/app1

Perintah tersebut digunakan untuk menyimpan container yang telah dimodifikasi dengan nama baru. Nama di sini terdiri dari nama repository (dalam hal ini saya menggunakan nama akun samsulmaarif sebagai repository lalu app1 sebagai nama image-nya).

Teman-teman juga dapat menggunakan format [repository]:[tag]. Tag biasanya berupa nomor versi aplikasinya. Kalau tanpa menggunakan tag, secara otomatis akan tersemat tag latest di belakangnya.

Nah, beberapa opsi yang saya gunakan adalah:

  • -a; untuk menentukan author (baca: pembuat image)
  • -m; ini mirip dengan commit message di git.
  • diikuti dengan nama container dan repository.

nama container di sini merupakan nama saat kita menjalankan docker run dengan opsi --name namacontainer.

Dalam hal ini nama container yang saya gunakan adalah app1

Jika teman-teman pernah menggunakan VCS (Version Control System) seperti Git, Subversion, Bazaar, dll, teman-teman akan cepat memahami konsep docker.

Untuk melihat container baru yang telah kita buat, jalankan perintah docker images.

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
samsulmaarif/app1   latest              5d16c781e77a        6 seconds ago       233MB
ubuntu              14.04               3aa18c7568fc        3 weeks ago         188MB

kalau kurang jelas dapat pula diintip di sini : http://tempel.blankon.in/5951237

Dari hasilnya dapat kita lihat, image asli berukuran 188MB sedangkan image yang telah kita modifikasi 233MB.

tentunya tergantung dari banyaknya aplikasi yang diinstall di sana….

Nah, apakah teman-teman sudah memiliki akun Docker ID (hub.docker.com) ? Yang sudah silakan balas chat ini dengan sudah.

baiklah, untuk teman-teman yang sudah memiliki akun, bisa mengikuti langkah selanjutnya. bagi yang belum silakan membuat akun, atau menyimak materi selanjutnya.

yang dipersiapkan: nama akun & password jangan lupa!!

Sekarang kita akan menggunakan sub-perintah login sebagai berikut :

docker login

Teman-teman akan diminta untuk memasukkan Username dan password Docker ID.

CATATAN: Password tidak akan nampak, jadi ketikkan saja passwordnya, lalu tekan Enter.

Jika teman-teman berhasil login, akan muncul pesan Login Succeeded. Kalau sudah seperti ini kita akan melangkan ke perintah selanjutnya.

Pastikan nama repository yang akan kita gunakan dengan mengetikkan ulang sub-perintah images

docker push samsulmaarif/app1

Ganti samsulmaarif/app1 dengan nama repository & nama aplikasi teman-teman sendiri.

Nah, teman-teman akan merasakan apa manfaatnya internet cepat.

Jadi kalo pak menteri tanya, internet cepat buat apa? teman-teman sudah punya jawabannya ya…. hehehehe….

Nah, ini rekaman push image saya :

Hasil dari image yang telah diunggah selanjutnya dapat diunduh oleh orang lain (kita sendiri, kalau itu private) dengan memanfaatkan sub-perintah pull.

Misal untuk image yang saya buat tadi, dapat diunduh dengan perintah :

docker pull samsulmaarif/app1

Image yang saya buat tersebut dapat dilihat di : https://hub.docker.com/r/samsulmaarif/app1/

Menjalankan Aplikasi Web dengan Docker

Oke, setelah kita dapat membuat image dengan cara modifikasi image lalu menyimpannya dengan sub-perintah commit.

Juga kita telah mencoba untuk mengunggah image tersebut ke Docker Hub.

Kali ini kita akan mencoba sesuatu yang (tidak cukup) baru (sebenarnya), tapi menarik untuk kita coba.

Nah, pada dasarnya bukan hanya image sistem operasi saja yang dapat kita unduh dari Docker Hub.

Namun image-image aplikasi yang siap pakai pun tersedia. Teman-teman dapat mengeksplorasi dengan memanfaatkan pencarian di hub.docker.com atau sub-perintah search di teriminal.

Pada praktek ini saya akan menggunakan image nginx yang resmi (Official build). http://tempel.blankon.in/5951239.txt

docker pull nginx

Setelah diunduh, jalankan dengan perintah :

docker run -dti --name web1 -p 8000:80 nginx:latest

Lalu coba akses menggunakan browser favirit Anda ke http://localhost:8000

Ganti localhost dengan alamat IP komputer di mana temen-temen menjalankan container nginx tadi.

unduh & run image nginx :

Teman-teman juga dapat mencoba aplikasi lain, misalnya wordpress.

Nah, untuk mengunduh dan menjalankan aplikasi wordpress ini teman-teman dapat membaca di https://hub.docker.com/_/wordpress/

wordpress : http://tempel.blankon.in/5951240.txt

docker pull wordpress

Unduh juga image mysql, dalam hal ini saya akan menggunakan tag (versi) 5.5

docker pull mysql:5.5

Kenapa kita mengunduh image mysql juga?

karena wordpress membutuhkan sebuah database server….

Jalankan container mysql terlebih dahulu sebelum menjalankan yang wordpress….

Gunakan perintah berikut untuk menjalankannya…

docker run -d -p 3306:3306 --name DB -e MYSQL_ROOT_PASSWORD=rahasia mysql:5.5

Membuat Image Docker dengan Dockerfile

Dockerfile merupakan sebuah berkas yang dapat digunakan untuk membangun sebuah image docker.

Dengan Dockerfile, kita dapat mengemas sebuah aplikasi lengkap dengan segala kebutuhannya. Tentunya dengan mendefinisikannya di dalam berkas tersebut.

Mari kita mulai dengan sebuah contoh. Oiya, agar tidak tercampur dengan berkas lain kita akan membuat sebuah direktori terlebih dulu.

Dalam hal ini folder yang saya maksud akan saya beri nama Nacita. Teman-teman bebas menggunakan nama apa pun.

Buat folder/direktorinya

mkdir Nacita
cd Nacita

Lalu buat berkas kosong Dockerfile

touch Dockerfile

Edit berkas tersebut, lalu isikan dengan : http://tempel.blankon.in/5951241.txt

Baik, akan saya bahas baris per baris konten dari berkas tersebut.

Format instruksinya adalah sebagai berikut:

# Komentar, semua yang diawali dengan tanda pagar (#) adalah komentar dan akan diabaikan oleh sistem

INSTRUKSI argumen

di mana instruksi seperti tertulis pada Dockerfile yang tadi saya buat terdiri dari FROM, MAINTAINER, RUN, ADD, EXPOSE, dan CMD.

instruksi lain akan dibahas jika waktunya cukup.

Yang pertama, FROM; baris ini menunjukkan image dasar yang akan digunakan.

MAINTAINER; seperti nama instruksinya berisi nama maintainer dari image yang sedang dibangun. Tentunya ini nama kita sendiri.

RUN; baris ini menunjukkan perintah yang dijalankan di dalam container saat proses build. satu berkas Dockerfile dapat berisi beberapa baris instruksi RUN, sesuai kebutuhan.

ADD; instruksi ini memiliki 2 argumen. argumen pertama adalah nama berkas/direktori di lokal diikuti dengan nama/lokasi berkas di dalam container.

EXPOSE; ini adalah port yang dibuka dalam sebuah container. Karena dalam contoh ini adalah web server, port default web adalah 80.

Lalu yang terakhir adalah CMD; instruksi ini umumnya berada di baris paling bawah. Menginstruksikan perintah yang dieksekusi saat sebuah container dijalankan.

baik, untuk keperluan ini saya mengubah berkas Dockerfile saya menjadi http://tempel.blankon.in/5951244

dengan penambahan baris 9, ADD app /app lalu buat file baru dengan nama 000-default.conf

isi berkas tersebut dengan ini : http://tempel.blankon.in/5951245

seperti terlihat di sana, saya mendefinisikan DocumentRoot ke /app

lalu saya buat sebuah direktori baru dengan nama app

mkdir app
cd app

lalu saya buat sebuah berkas baru bernama index.html lalu isi dengan : http://tempel.blankon.in/5951246

nah sekarang tampak seperti ini :

samsul@kulgram-docker:~/Nacita/app$ cd ..
samsul@kulgram-docker:~/Nacita$ ls
000-default.conf  app  Dockerfile

sampai di sini, kita telah menyiapkan sebuah aplikasi berupa file index.html, sebuah berkas konfigurasi 000-default.conf dan sebuah berkas Dockerfile

nah, ini saat yang menegangkan….

eh, gak tegang sih… cuma akan memakan kuota internet lagi… hahahah…

oke, temen-temen siap?

silakan jalankan perintah ini….

docker build -t aplikasiku .

argumen setelah -t terserah temen-temen mau kasih nama apa…

tunggu sampe proses ini selesai…

sampai di sini ada pertanyaan lagi?

bisa dipahami penjelasan-penjelasan saya?

iyes, karena repository defaultnya mengambil main server…. hahahaha

nanti saya upload asciinema-nya juga…

nah, ini hasilnya… :

proses ini saya tidak ada kendala build… jika temen-temen mendalami gagal build, baca lognya… pada saat build kan ketahuan salahnya di mana….

biasanya kesalahan ketik di Dockerfile, atau hal lain… koneksi internet misalnya…

nah, ibaratnya begini, kita mau membuat sebuah image docker untuk sebuah aplikasi.

kita pelajari dulu, aplikasi itu butuh apa saja…

lalu terjemahkan kebutuhan tersebut ke dalam berkas Dockerfile, lalu coba build…

kalau terjadi kesalahan, baca lognya, perbaiki kesalahannya, lalu coba build lagi… begitu seterusnya… heeehe….

satu baris perintah dijalankan dalam satu layer…

ketika gagal di baris perintah tertentu, lalu kita build ulang, akan dilanjutkan pada posisi build terakhir yang berhasil… nah, untuk selanjutnya temen-temen bisa membuild sebuah aplikasi tanpa menghabiskan kuota yang banyak…

bagaimana caranya?

pada hub.docker.com terdapat fasilitas build otomatis… itu terintegrasi dengan github.com

syaratnya apa?

syaratnya temen-temen harus paham menggunakan git,

git adalah sebuah version control system, github.com menggunakan git…

nah, saya pernah membuat sebuah docker image dari sebuah aplikasi bernama OpenSID

dapat diakses di sini : https://github.com/samsulmaarif/opensid-docker

oke, saya kira kulgram kali ini cukup…

apakah ada pertanyaan lagi teman-teman?

lebih kurang saya mohon maaf, jika ada yang kurang berkenan di hati sekali lagi saya mohon maaf…

mohon maaf jika ada penjelasan yang membingungkan, saya sendiri masih belajar…

semoga apa yang kita pelajari malam ini dapat bermanfaat bagi kita semua…

wassalamu’alaikum warohmatullohi wabarokattuh…

KULGRAM #002 Docker SELESAI