Bermain Dengan Docker Bagian 2: Membuat Docker Image

Wohoho…kembali lagi dengan saya di seri artikel Docker, setelah beberpa minggu saya vakum nulis tentang Docker. Eh padahal baru 2x nulis hehehehe. Pada artikel sebelumnya kita telah membuat sebuah Lab Docker dan mencoba Docker Store. Sesuai judulnya kita akan membuat sebuah image Docker yang sederhana, sesuai sumber Play With Docker saya akan mempraktekan 2 cara mebuat image untuk Docker yaitu membuat image dari container yang sudah ada dan ini paling mudah, untuk yang kedua itu membuat sebuah file dengan nama dockerfile. ketika file tersebut dijalankan akan membuat image sesuai file Dockerfile yang berisi aturan yang diinginkan.

Membuat Image dari Container

Coba jalankan perintah berikut:

docker container run -ti ubuntu  bash

Dapat kita ketahui, perintah tersebut akan mencari image dengan nama Ubuntu di folder lokal, jika tidak ada akan mendownload dari Docker Store. Saat pengunduhan selesai, akan menjalankan ubuntu dan bash dengan mode interaktif.

ubuntu bash

Selanjutnya coba install figlet dan menjalankannya dengan 3 perintah berikut:

apt-get update
apt-get install -y figlet
figlet "hello dunia docker"

Secara default kita menggunakan akun root saat memakai Docker, jadi berhati-hatilah saat sudah menggunakan Docker pada lingkungan kerja atau dengan cara lain yaitu membuat user baru :D. Ketiga perintah diatas dapat digabungkan dengan menambah &&, hasil perintah tadi akan menghasilkan seperti ini:

ubuntu bash 2

figletku

Keluar dari container, dan kita akan mulai membuat sebuah image. Tapi sebelu itu kita lihat dulu CONTAINER ID pada container yang barusan dibuat dengan perintahh:

docker container ls -a

container ls a

Selanjutnya coba jalankan perintah:

docker container diff CONTAINER_ID

diff container

Perintah diatas berfungsi untuk melihat sebuah daftar yang berisi perubahan pada container Docker. Docker selalu menyimpan semua informasi log pada container dan ini bisa disebut dengan layer. Untuk membuat image, kita perlu commit container yang akan dijadikan image dan dengan commit kita akan membuat image di komputer lokal, untuk melakukannya cukup jalan perintah:

docker container commit CONTAINER_ID

container commit

Lihat image yang telah dibuat dengan perintah:

docker image ls

Nanti akan terlihat seperti ini:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              a104f9ae9c37        46 seconds ago      160MB
ubuntu              latest              14f60031763d        4 days ago          120MB

Karena kelupaan screenshot jadi ambil dari web Play With Docker saja :D. Agar image yang kita buat bisa disayang eh salah bisa dikenali dengan mudah cukup lakukan perintah ini:

docker image tag <IMAGE_ID> figletku
docker image ls

docker figlet

Dan tara…image yang kita buat tadi sudah ada namanya :D, berikut penjelasan secara gambar dari proses ini.

membuat image

Sekarang, mari kita coba image yang telah kita buat tadi:

docker container run figletku figlet hello

figletku hello

Yeee…image kita bisa dijalankan, image yang kita buat tadi bisa kok kita upload ke Docker Community Hub, tapi sayang sekali saya belum ada niatan upload image yang saya buat diupload kesana jadi belum ada tutorialnya saat ini.

Membuat Image dari Dockerfile

Langkah selanjutnya, kita akan membuat image dari sebuah file dengan nama Dockerfile. Sebenarnya cara pembuatan dengan yang barusan tapi ini lebih simple, mudah dan powerfull. Sebelum membuat Dockerfile kita buat file dulu dengan nama index.js, isinya bisa mengikuti kode ini:

var os = require("os");
var hostname = os.hostname();
console.log("hello from" + hostname);

Kita akan menggunakan Ubuntu sebagai image dasarnya, menginstall Node.js dan menyalin file index.js yang telah dibuat tadi. Jadi, silahkan bikin dengan nama Dockerfile dan isi filenya seperti ini:

FROM ubuntu
RUN apt-get update && apt-get install -y nodejs
COPY . /app
WORKDIR /app
CMD ["node", "index.js"]

Selanjutnya, kita jalankan perintah berikut ini pada folder yang sama dimana file Dockerfile disimpan:

docker image build -t hello:v0.1 .

ls dockerfile

image build

image build 2

Kita lihat hasil image yang berhasil dibuat dengan Dockerfile:

docker image ls

image ls build

Dan sekarang kita coba menjalankan image yang sudah dibaut:

docker container run hello:v0.1

hello v01

Proses dari Dockerfile bisa dijelaskan seperti ini:

image Dockerfile

Image Layers

Ada sesuatu yang menarik saat kita build image dengan Docker. Ketika menjalannkan image akan menjalankan satu OS dan aplikasi. Tapi sebenarnya image tersebut dibangun dengan beberapa layer. Pertama kita akan menggunakan perintah history untuk melihat riwayat image kita:

docker image history <image ID>

docker history

Selanjutnya jalankan perintah berikut pada folder ynag berisi file index.js:

echo "console.log("this is v0.2");" >> index.js

Dan coba kita build image baru dengan file index.js baru juga dengan perintah:

docker image build -t hello:v.02 .

docker image 2

Kita lihat hasilnya dengan perintah:

docker image ls

docker image 3

Penjelasan Layer dan cache pada Docker lebih detailnya bisa lihat gambar berikut:

Image Layers

Manajemen layer pada Docker sangat berguna bagi tim IT saat memperbaiki sistem atau memperbarui kode pada aplikasi atau membuat perubahan konfigurasi untuk aplikasi. Dengan layer ini proses pembangunan image baru lebih efisien.

Image Inspection

Apa itu Image Isnpection? Image Inspection adalah suatu proses untuk mengetahui apa saja yang dilakukan dengan docker. Untuk melakukannya cukup jalankan perintah:

docker image inspect ubuntu

image inspection

Dari perintah tersebut kita mendapatkan beberapa informasi, untuk melakukan inspection kita butuh file JSON yang ada dalam image. Sekarang jalankan pwrintah:

docker image inspect --format "{{ json .RootFS.Layers }}" ubuntu

image inspection json

Dari screenshot tersebut dapat diketahui, bahwa kita punya empat layer dalam aplikasi kita. Dan akhirnya artikel ini selesai 😀 terima kasih sudah membaca, tapi sebelum itu saya sedikit cerita atau istilahnya behind the scene dalam artikel ini. Sebenarnya mau tak samain persis seperti webnya tapi hanya saja, saya mendapat beberapa error saat menggunakan alpine. Entah kenapa, hampir seharian gak nemu solusinya dan saya ganti alpine dan dengan ubnutu. Selain itu jika diperhatikan container id ada yang berubah hal ini karena efek mencoba-coba solusi yang ada dan berkahir menghapus semua dan mencoba dari awal lagi :D.

error alpine

Sumber: Play With Docker

Share This Post

Leave a Comment

Your email address will not be published. Required fields are marked *