Halo sobat sekolahlinux pada tutorial kali ini saya akan memberikan sedikit tutorial tentang bagaimana cara membuat custom docker image, untuk membuat docker image bisa dengan 2 cara, yang pertama bisa dengan anda menjalan container lalu masuk kedalamnya lalu kemudian custom dan install macam-macam didalamnya setelah itu di commit, atau bisa juga dengan menggunakan Dockerfile, pada tutorial kali ini kita akan membahas keduanya, yaitu dengan menggunakan commit dan juga menggunakan Dockerfile, pertama kita akan membahas membuat custom docker image dengan metode commit
Cara Pertama Docker Commit
pada dasarnya untuk membuat custom image menggunakan metode commit adalah yang paling mudah, namun tidak terlalu banyak yang bisa kita lakukan, misalnya membuat entrypoint tidak bisa dilakukan dengan metode ini, tapi jika kalian hanya ingin membuat modifikasi pada beberapa config didalam image tersebut atau menginstall atau menambahkan beberapa tool didalam image tersebut bisa menggunakan metode commit ini, pastikan base image yang ingin dibuat custom sudah running containernya, karena kita membutuhkan id_container yg sedang berjalan
docker commit id_container new_image_name
contohnya seperti dibawah ini
docker commit b14169723951 ubuntu-sekolahlinux
dan dibawah ini perintah2 yang saya lakukan
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 2d696327ab2e 2 weeks ago 121.6 MB root@b14169723951:/# apt update -y Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] Get:4 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [49.7 kB] Get:5 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB] Get:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [456 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB] Get:8 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.8 kB] Get:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [212 kB] Get:10 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [2928 B] Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [220 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [823 kB] Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.5 kB] Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [689 kB] Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [17.5 kB] Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5176 B] Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [6354 B] Fetched 24.4 MB in 52s (464 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done All packages are up to date. root@b14169723951:/# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b14169723951 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes silly_gates [root@localhost ~]# docker commit b14169723951 ubuntu-sekolahlinux sha256:a6acd8c852ccc191614fbd1f8182e9f5274eebbe079503da188289e8cbd46c11 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-sekolahlinux latest a6acd8c852cc 9 seconds ago 160.7 MB docker.io/ubuntu latest 2d696327ab2e 2 weeks ago 121.6 MB
terlihat diatas size imagenya berubah lebih besar, karena tadi saya sempat menjalan update pada container dari image ubuntu
Cara Kedua Dockerfile
untuk cara kedua ini biasanya saya gunakan untuk membuat image custom untuk keperluan microservice yang nanti akan saya gunakan di kubernetes di pekerjaan, pertama kita beranggapan kita berada didalam direktori path “/home/sekolahlinux/” didalam folder tersebut ada file (hello-world.jar, Dockerfile)
masuk kedalam file Dockerfile
vim Dockerfile
selanjutnya isi dengan paramater dibawah didalam filenya
FROM openjdk MAINTAINER sekolahlinux RUN mkdir -p /home/sekolahlinux COPY ./hello-world.jar /home/sekolahlinux EXPOSE 8080 ENTRYPOINT exec java -jar /home/sekolahlinux/hello-world.jar
penjelasan dari paramater diatas
- FROM: digunakan untuk memilih base docker image mana yang akan digunakan untuk membuat docker image baru
- MAINTAINER: digunakan untuk set siapa author yang membuat custom image ini
- RUN: digunakan untuk menjalankan perintah didalam base docker image, misalkan membuat folder, install tool, ataupun update base docker image
- COPY: digunakan untuk mengcopy file yang ada di direktori lokal kedalam base docker image
- EXPOSE: digunakan untuk memberitahu docker port mana yang akan digunakan secara default protocol yang digunakan adalah TCP
- ENTRYPOINT: digunakan untuk menanamkan perintah ke base docker image, dan perintah itu akan eksekusi ketika custom docker image nantinya dijalakan, atau lebih mirip applikasi yang berjalan saat proses startup
- masih banyak paramater-paramaer yang bisa kalian gunakan, untuk detailnya kalian bisa berkunjung ke link berikut https://docs.docker.com/engine/reference/builder/
jika sudah jalankan perintah ini
cd /home/sekolahlinux docker build -t java-sekolahlinux .
maka akan keluar hasil seperti ini
[root@localhost sekolahlinux]# docker build -t java-sekolahlinux:latest . Sending build context to Docker daemon 2.56 kB Step 1 : FROM openjdk ---> 6077adce18ea Step 2 : MAINTAINER sekolahlinux ---> Running in 947c8811261f ---> 1c8bd2f8a71f Removing intermediate container 947c8811261f Step 3 : RUN mkdir -p /home/sekolahlinux ---> Running in 24ad9665d48f ---> 6ac2d1e0a299 Removing intermediate container 24ad9665d48f Step 4 : COPY ./hello-world.jar /home/sekolahlinux ---> f3a5fa1f14d3 Removing intermediate container 6b5e3ec6be03 Step 5 : EXPOSE 8080 ---> Running in ba9b4f0b4cb1 ---> 296f308ea363 Removing intermediate container ba9b4f0b4cb1 Step 6 : ENTRYPOINT exec java -jar /home/sekolahlinux/hello-world.jar ---> Running in 33056dc8dd7f ---> e94a5b7ce21a Removing intermediate container 33056dc8dd7f Successfully built e94a5b7ce21a
lalu coba kalian jalankan perintah “docker images”
[root@localhost sekolahlinux]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE java-sekolahlinux latest e94a5b7ce21a 14 seconds ago 739.8 MB docker.io/openjdk latest 6077adce18ea 2 weeks ago 739.8 MB [root@localhost sekolahlinux]#
yaps image baru telah terbuat 😀
sekian tutorial kali ini, pada article docker berikutnya kita akan membahas bagaimana cara push image docker baik itu ke private registry ataupun ke public registry, jika ada yang kurang paham silahkan ditanyakan di kolom komentar dibawah