membuat custom image docker dengan commit & Dockerfile

0
1807

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