Mencoba Docker Container
Sekilas Tentang Docker dan Container
Sebelum membahas lebih jauh tentang Docker Container, pernahkah kamu mengamati kontainer / peti kemas yang ada di pelabuhan? Ya, disana terdapat banyak sekali peti kemas, yang mana peti kemas tersebut diangkut kapal kargo. Dan diatas kapal terdapat banyak sekali peti kemas dan macamnya tidak hanya satu saja, ada peti kemas untuk makanan, pakaian, perkakas dan lain sebagainya. Dengan adanya peti kemas, kita tidak takut akan tercampur antar barang dan memudahkan memanajemen barang. Nah, hal itu juga berlaku pada dunia IT dimana ketika ingin membangun beberapa apliaksi yang berbeda dan memiliki pengaturan yang berbeda setiap aplikasinya, dengan adanya kontainer ini setiap aplikasi tidak tercampur dan terisolasi sesuai kebutuhan. Kontainer dunia IT dibagi menjadi 2 jenis:
-
Kontainer berbasis Sistem Operasi Dengan kontainer jenis ini, kita dapat mengisolasi pada level sistem operasi dan memanfaatkan kernel induk yang sama. Contoh kontainer level ini ada LXC, OpenVZ, Linux Vserver, BSD Jails, dan Solaris Zone.
-
Kontainer berbasis Aplikasi Pada kontainer berbasis aplikasi, kita hanya mengisolasi pada level aplikasi dan memanfaatkan beberapa komponen yang berada pada sistem operasi induk. Kontainer berbasis aplikasi akhir-akahir ini lagi booming, yaitu Docker. Selain Docker, ada beberapa kontainer berbasis aplikasi seperti Apache Mesos, Google Kubernetes Engine, Amazon Elastic Container Registry (ECR), dan Azure Kubernetes Service.
Kontainer ini hampir sama persis dengan VM yang sering kita hadapi atau pelajari di kampus, terus apa bedanya kontainer dengan VM? untuk perbedaan kontainer dan VM bisa membaca tulisan saya tentang Berkenalan dengan Docker. Dalam tulisan tersebut juga terdapat langkah-langkah untuk memasang Docker, sebelum memembaca kelanjutan tulisan ini Docker harus terpasanga terlenih dahulu.
Membuat Docker Container
Setelah Docker terpasang, kita jalankan perintah berikut:
docker image pull alpine
Perintah diatas akan mendownload image Alpine Linux dari Docker Hub dan hasil download tadi tersimpan pada sistem kita, untuk cek apakah image tersebut sudah ada sistem kita dapat menjalankan perintah:
docker image ls
Menjalankan Docker Container
Selanjutnya kita coba untuk menjalankan Docker Container yang telah kita buat tadi dengan menjalankan perintah:
docker container run alpine ls -l
total 56
drwxr-xr-x 2 root root 4096 May 29 14:20 bin
drwxr-xr-x 5 root root 340 Sep 7 14:56 dev
drwxr-xr-x 1 root root 4096 Sep 7 14:56 etc
drwxr-xr-x 2 root root 4096 May 29 14:20 home
..........
..........
Seperti yang kita tahu, perintah ls ini berfungsi untuk melihat daftar folder dan file apa saja yang terdapat pada sebuah direktori, kalau dijalankan pada Container Docker juga akan menghasilkan yang sama juga. Kita coba lagi dengan perintah:
docker container run alpine echo "hello from alpine"
Dan akan menghasilkan keluaran seperti ini:
hello from alpine
Coba jalankan perintah:
docker container run alpine /bin/sh
Apa yang didapat? Ya, tidak terjadi apa-apa seperti perintah sebelumnya, hal ini karena saat menjalankan perintah diatas tadi container hanya menjalankan /bin/sh lalu keluar. Jadi cuma membuka shell saja lalu keluar, sekarang coba kita rubah baris perintahnya menjadi:
docker container run -it alpine /bin/sh
Nah, jadi berbeda kan? sekarang container telah menjalankan shell pada Alpine Linux. Dan untuk keluar dari shell yang sedang berjalan cukup ketik exit saja. Setiap perintah yang telah kita jalankan adalah contoh dalam instance container atau container terpisah, untuk membuktikannya cukup jalankan perintah:
docker container ls -a
Ketika perintah dijalankan, akan menghasilkan sebuah keluaran seperti berikut:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5d2cc219d0e alpine "/bin/sh" 4 minutes ago Exited (0) 4 minutes ago sleepy_feistel
2cd570ac8027 alpine "/bin/sh" 1 hours ago Exited (0) 1 hours ago keen_torvalds
c938578ed8c1 alpine "echo 'hello from al…" 1 hours ago Exited (0) 1 hours ago friendly_feynman
cd936e986e38 alpine "ls -l" 1 hours ago Exited (0) 1 hours ago admiring_gates
Dengan perintah docker container ls -a , kita tahu ID dari container, Image yang digunakan, perintah apa yang sudah dijalankan, kapan dijalankan, kapan terakhir dijalankan beserta statusnya, port yang digunakan dan nama dari container. Untuk nama container ini acak diberikan oleh Docker.
Mengisolasi Docker Container
Walau dalam satu image Alpine yang sama, tetapi setiap perintah yang diberikan beda akan membuat container baru lagi dan terpisah. Hal inilah yang dimaksud isolasi, jadi setiap perintah tidak ada hubungannya sama sekali dan ini merupakan konsep keamanan yang ditawarkan oleh Docker. Sekarang coba jalankan perintah untuk membuat Container baru:
docker container run -it alpine /bin/ash
Dan jalankan perintah:
echo "hello world" > hello.txt
ls
exit
Perintah diatas akan membuat sebuah file baru dengan nama hello.txt dan berisi tulisan hello world lalu keluar dari Container yang berjalan. Lalu coba jalankan perinta:
docker container run alpine ls -l
Ya, file hello.txt yang kita buat tadi tidak ada. Dan inilah yang disebut dengan isolasi pada Docker, dengan adanya isolasi ini semisal bila ada kerusakan pada container yang pertama dapat kita kembalikan dengan menggunakan container yang sudah ada sebelum ada perubahan. Agar lebih meyakinkan lagi. Coba jalankan perintah docker container ls -a untuk melihat hasilnya. Tetapi bagaiamana caranya agar kita bisa menggunakan container yang sudah berjalan? caranya cukup mudah dengan perintah:
docker container start <container ID>
Sebagai contoh, kita ambil container dengan ID 224d4dcaa310, ambil 4 karakter pertama saja dan jalankan perintah docker container ls. Maka akan meghasilkan status:
224d4dcaa310 alpine "/bin/ash" 25 minutes ago Up 2 seconds jovial_germain
Dan untuk menghentikan container yang sedang berjalan cukup dengan perintah:
docker container stop <container ID>
Menjalankan ulang Container yang pernah dijalankan sudah, bagaimana jika kita ingin bermain-main pada container yang sedang berjalan saja? Cukup jalankan perintah:
docker container exec <container ID> <perintah>
sudo docker container exec 224d cp hello.txt hello2.txt
sudo docker container exec 224d ls
Bagaimana mudah bukan mencoba menjalankan Docker Container? Artikel ini adalah salah satu seri dalam Dunia DevOps dalam blog ini, tulisan saya tentang Mengenal DevOps Engineering dan Seputar Microservice dan Container. Maaf jika tidak ada gambar, mungkin untuk artikel selanjutnya akan saya kasih. Terima kasih
Sumber: