Dasar dasar menggunakan Docker

Dokumentasi Docker

by. Dimar Hanung P. | XII TKJ 1 | 35
apabila menemui kata asing bisa scroll ke paling bawah sebelum daftar pustaka, ada glosarium
kotak berwarna hitam berisi perintah yang bisa dijalankan, kotak putih berisi output maupun syntax

Pengenalan

Docker?
Docker merupakan salah satu platfrom dari banyak container platfrom di internet
untuk melihat contoh platfrom container yang lain bisa lihat di :
https://www.g2.com/categories/container-management
docker-io docker-engine dan docker-ce
docker-io dan docker-engine dilayani oleh debian/ubuntu di official repistory nya,
docker-ce dilayani oleh docker.com langsung
illustrasi 1 perbedaan vm dan container (docker)
illustrasi 2 perbedaan vm dan container (docker)
bedanya vm dan container

Supaya mudah kita bandingkan saja dengan vm software seperti virtual box,

virtual machine docker
Berat Ringan
Performa terbatas karena sudah menjalankan host os performa sesuai atau murni hardware karena menjalankan dari host os
tidak bisa menjalankan 2 aplikasi sama atau lebih sperti ftp dan webserver bisa menjalankan 2 aplikasi sama atau lebih sperti ftp dan webserver
Memiliki Os nya sendiri Semua container berbagi dengan host os
hardware-level virtualization OS vitualization
Startup dalam hitungan menit Startup dalam hitungan detik
membutuhkan alokasi memory membutuhkan memory yang lebih kecil
lebih aman karena terisolasi penuh bisa jadi kurang aman karena isolasi hanya batas proses
Docker dapat di Os apa saja?

Docker tersedia di linux, windows, mac os

  1. linux
  2. paling disarankan untuk diinstall di linux karena docker mengambil os linux sebagai host nya, docker pada linux hanya membutuhkan ram kurang dari 2gb

  3. windows
  4. untuk menggunakan docker yang host linux di windows harus memiliki ram setidak nya melebihi 4 gb, karena secara tidak langsung sebenarnya saat di windows docker menjalankan linux virtual untuk digunakan sebagai host os

    docker juga memiliki windows container (windows sebagai host os), namun masih belum versi stabil jadi tidak disarankan

  5. mac os
  6. ga punya mac dong
Info Host OS maksudnya , OS yang digunakan docker untuk menjalankan container

Installasi

Installasi Docker pada windows
untuk cara install nya mudah, bisa lihat di dokumentasinya langsung di :
https://docs.docker.com/docker-for-windows/install/
buat akun docker nya dulu ya :D

Penting
Saat Install Docker Desktop, maka virtual box yang di desktop akan mengalami crash, dikarenakan hyper-v menyala, tapi jangan panik bisa diatasi dengan melihat link berikut: https://fredrikaverpil.github.io/2018/03/15/switching-between-docker-and-virtualbox-on-windows-10/
jadi kesimpulanya docker desktop dan virtual box tidak dapat jalan bersamaan
Installasi Docker pada ubuntu 18
A. Menggunakan Apt
  1. Melakukan update paket
  2. apt-get update
  3. hapus versi seblemunya dari paket, ( untuk memastikan juga apa bila docker benar benar tidak ada di ubuntu kamu)
  4. apt-get remove docker docker-engine docker.io
  5. Install docker inti
  6. apt-get install -y docker-ce
  7. jalankan docker
  8. systemctl start docker
  9. gunakan perintah enable supaya saat boot pertama kali service docker langsung berjalan
  10. systemctl enable docker
    Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable docker
  11. cek docker version
  12. docker --version
    Docker version 19.03.5, build 633a0ea838
Docker pada virtual box
  1. Jalankan Linux
  2. Lakukan Penginstallan docker seperti biasa
  3. setting adapter menjadi bridge atau host only inti
  4. coba jalankan nginx dan panggil sesuai ip di browser
Docker pada Aws (ubuntu - ec2)

untuk apa docker di aws? ya biar bisa public dong

untuk membuat instance di ec2 bisa lihat di
https://drive.google.com/open?id=16nMljzrQItMLr9uxLVnf6I3iuPpLEJEQ
Tahap - Tahap Installasi
  1. Sambungkan terlebih dahulu aws ec2 dengan ssh
  2. lakukan install docker seperti di ubuntu 18 seperti biasa
  3. atur security group pada aws untuk membuka port 80 inti
  4. selesai, untuk port 80 bisa test dengan memanggil dns aws di google

Praktik Dasar

Membuat Container | docker run
Penting Sebelumnya pahami dulu sifat perintah docker run ini
  1. otomatis pull image
  2. apabila images tidak tersedia, maka akan mendownload image nya terlebih dahulu
  3. docker run bukan untuk menjalankan
  4. docker run bukan untuk menjalankan container, melainkan membuat container
  5. docker apa bila tidak disertai argumen --name maka akan membuat nama container otomatis
  6. akan terjadi error apabila nama container sudah dibuat sebelumnya
Syntax:

docker container run --name [nama container yg akan dibuat] [nama image/paket aplikasi]

A. Menjalankan Hello World
Jalankan Perintah dibawah ini
docker container run --name halo1 hello-world
atau bisa disingkat menjadi:
docker run --name halo1 hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

    Dalam 1 perintah diatas sebenarnya ada proses yang terjadi
  1. ketka enter maka docker mengecek apakah container sudah ada apa belum
  2. kalo ada, muncul pesan error sudah ada container dengan nama yang sama
  3. kalo tidak ada , maka docker akan pull image dari docker store / docker hub
  4. setelah image ter download, docker langsung menjalankan container
  5. ada container yang setelah dijalankan langsung berhenti, ada yang setelah dijalankan tetap berjalan tergantung dari container nya

B. Menjalankan nginx (testing port 80)

Syntax:

docker run -d -p [port forward ke]:80 --name [nama container] [nama paket images]:[versi spesifik]
jalankan perintah berikut :
docker run -d -p 35:80 --name webserver1 nginx
diatas tidak menggunakan tag / versi spesifik, maka otomatis mendownload versi latest
cek di web apakah sudah bisa di panggil, contoh dibawah ini
C. Menjalankan Alpine OS
penting ingat kembali sifat docker run bagian argumen --name
penting apabila tidak menggunakan argumen -it maka container cuma sekali pakai / tidak bisa dipakai / distart lagi
  1. melihat isi direktori os alpine
  2. docker container run alpine ls -l
    total 56
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 bin
    drwxr-xr-x    5 root     root           340 Jan 30 13:27 dev
    drwxr-xr-x    1 root     root          4096 Jan 30 13:27 etc
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 home
    drwxr-xr-x    5 root     root          4096 Jan 16 21:52 lib
    drwxr-xr-x    5 root     root          4096 Jan 16 21:52 media
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 mnt
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 opt
    dr-xr-xr-x   96 root     root             0 Jan 30 13:27 proc
    drwx------    2 root     root          4096 Jan 16 21:52 root
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 run
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 sbin
    drwxr-xr-x    2 root     root          4096 Jan 16 21:52 srv
    dr-xr-xr-x   13 root     root             0 Jan 30 13:27 sys
    drwxrwxrwt    2 root     root          4096 Jan 16 21:52 tmp
    drwxr-xr-x    7 root     root          4096 Jan 16 21:52 usr
    drwxr-xr-x   12 root     root          4096 Jan 16 21:52 var
    
  3. menjalankan perintah echo
  4. docker container run alpine echo "halo saya hanung"
    halo saya hanung
  5. masuk direktori
  6. docker container run -it --name latihan-os alpine /bin/sh
    kamu sekarang berada dalam linux shell alpine, kamu bisa menjalankan perintah dari os alpine sekarang, kamu bisa mencoba ls -l, uname -a, dan perintah linux alpine lainya, untuk masuk shell harus menggunakan argunmen -it, apabila tidak maka akan exit otomatis, gunakan perintah exit untuk keluar dari shell
melihat list container | docker container ls
  1. melihat container yang berjalan
  2. docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
    db351ab12d47        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:35->80/tcp     webserver2
    9ae179958589        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   webserver1
    
  3. Meihat semua list container yang ada
  4. docker container ls --all
  5. menjalankan container yang berhenti
  6. Syntax:
    docker container start [nama / id container]
    contoh:
    docker container start halo1
menjalankan perintah container | docker container exec
Syntax:
docker container exec [id/nama container] [perintah]
untuk menjalankan perintah exec, container harus berjalan dulu menggunakan
docker container start [id/nama container]
  1. echo alpine os
  2. docker container exec latihan-os echo "halo saya hanung"
  3. Melihat list folder alpine os
  4. docker container exec latihan-os ls
  5. Masuk bash
  6. docker container exec -it latihan-os bin/sh
Menghapus | rm
perintah rm bisa digunakan untuk menghapus image maupun container
syntax:
docker [container/image] rm [nama container/image]
  1. menghapus container
  2. docker container rm halo1
  3. menghapus image
  4. docker image rm nginx
  5. menghapus semua container yang sedang berjalan
  6. docker rm $(docker ps -a -q)
docker images | docker image
  1. download image alpine os
  2. docker image pull alpine
  3. Melihat list image
  4. docker image ls

praktik lanjutan

Membuat docker image pure simple
  1. membuat folder
  2. mkdir folderhanung
  3. masuk folder
  4. cd folderhanung
  5. membuat Dockerfile
  6. nano Dockerfile
    masukan code dibawah ini
    FROM nginx:alpine
    COPY . /usr/share/nginx/html
    lalu save
  7. buat file html
  8. nano index.html
    masukan code html contoh:
    <h1>nama saya hanung</h1>
    lalu save
  9. build image
  10. docker build -t htmlpertama:v1 
  11. buat container
  12. docker container -d -p 3535:80 --name htmlcontener htmlpertama:v1
  13. cek di browser dengan port 3535
Membuat docker image cloning dari container
  1. Mari mulai dengan membuat container shell ubuntu
  2. docker container run -it ubuntu bash
    Sekarang kamu berada dalam bash shell container yang kamu buat barusan, yaitu bash shell ubuntu
  3. untuk sebagai contoh kita akan mencoba menginstall paket bernama figlet , masukan 2 perintah dibawah ini ke dalam bash shell ubuntu
  4. apt-get update
    apt-get install -y figlet
  5. tes apakah paket sudah berjalan dengan baik dengan menjalankan perintah dibawah ini didalam bash shell ubuntu
  6. figlet "halo 35"
     _           _         _________
    | |__   __ _| | ___   |___ / ___|
    | '_ \ / _` | |/ _ \    |_ \___ \
    | | | | (_| | | (_) |  ___) |__) |
    |_| |_|\__,_|_|\___/  |____/____/
    
    
  7. oke install paket selesai lalu kembali/keluar dari bash shell ubuntu dengan ketikkan exit
  8. untuk memulai praktik ini kamu membutuhkan id dari container yang tadi kamu buat, gunakan argumen -a atau --all supaya list container terlihat semua
  9. docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                           NAMES
    2bf5ed92052f        ubuntu              "bash"              16 minutes ago      Up 2 minutes                                        heuristic_ganguly
    
    kamu cukup menggunkan 4 digit id dari depan, setiap id dari container yang kita buat akan berbeda beda
  10. step ini tidak dilakukan tidak apa apa, kita hanya mengecek terhadap perubahan container yang kita buat
  11. docker container diff [container ID]
    docker container diff 2bf5
    maka akan tampil list perubahan pada container yang kita buat tadi
  12. sekarang, untuk membuat image kamu memerlukan commit ke container ini
  13. docker container commit [CONTAINER_ID]
    docker container commit 2bf5
    dan siapp, kamu telah berhasil membuat image dari container yang kamu buat tadi
  14. cek image apa benar sudah terbuat atau belum
  15. docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              cfacd9a21cdb        6 seconds ago       93.6MB
    htmltest            v1                  8b3c5a00f77a        3 days ago          21.8MB
    nginx               alpine              48c8a7c47625        10 days ago         21.8MB
    nginx               latest              5ad3bd0e67a9        12 days ago         127MB
    alpine              latest              e7d92cdc71fe        2 weeks ago         5.59MB
    ubuntu              latest              ccc6e87d482b        2 weeks ago         64.2MB
    hello-world         latest              fce289e99eb9        13 months ago       1.84kB
    
    perhatikan output diatas, yang paling atas dan REPOSITORY dan TAG nya none , maka itulah image yang kamu buat lagi
  16. nah maka dari itu kita akan memberi nama pada image kita, supaya tidak none
  17. docker image tag [IMAGE_ID] [NAMA_YANG_AKAN_DIBERI]
    docker image tag cfac figletsaya
    Penting yang kamu masukan adalah image id bukan image container, karena kita sedang memberi nama ke image yang kita buat
  18. nah saat nya cek image yang kamu buat
  19. docker container run figletsaya figlet tes_image
     _                _
    | |_ ___  ___    (_)_ __ ___   __ _  __ _  ___
    | __/ _ \/ __|   | | '_ ` _ \ / _` |/ _` |/ _ \
    | ||  __/\__ \   | | | | | | | (_| | (_| |  __/
     \__\___||___/___|_|_| |_| |_|\__,_|\__, |\___|
                |_____|                 |___/
    
Ringkasan proses dalam praktik ini
  1. membuat container
  2. membuat image dari container yang sudah terinstall paket figlet
  3. memberi nama image
  4. menjalankan container dari image yang kita buat
Kesimpulan dari praktik ini adalah, kita bisa membuat image dari container yang sudah dimodifikasi dengan melakukan commit
Terus Kenapa? ya misal saja kita mau membuat lebih dari satu webserver, misal kita membutuhkan 4 webserver, tentu saja kita membutuhkan 4 container ubuntu bash, dengan melakukan ini kita cukup melakukan install apache, dan paket lain yang dibutuhkan sebanyak 1 kali saja, lalu kita buat imagenya, jadi tidak perlu install apache 4 kali
docker image menggunakan docker file, nodejs
yang akan kita buat disini pada dasarnya adalah JavaScript, namun javascript secara murni tidak dapat berjalan di terminal, maka dari itu kita membutuhkan salah satu framework dari javascript yang bernama node js
  1. membuat folder untuk pack image yang kita buat, dimana saja bisa
  2. mkdir nodejs
  3. Masuk ke folder nodejs
  4. cd nodejs
  5. membuat file index.js
  6. nano index.js
    nah isikan index js dengan code dibawah ini, setelah itu save
    var os = require("os");
    var hostname = os.hostname();
    console.log("hello ini hostname id " + hostname);
  7. Membuat Dockerfile
  8. Docker file adalah doker file :v
    nano Dockerfile
    lalu isikan dengan kode dibawah ini, terus save
    FROM alpine
    RUN apk update && apk add nodejs
    COPY . /app
    WORKDIR /app
    CMD ["node","index.js"]
  9. build image
  10. build image harus berada dalam folder yang tadi kamu buat
    docker image build -t hello:v0.1 .
  11. buat dan jalankan container nya
  12. docker container run hello:v0.1
    hello ini hostname id a7d5a1a06d91
    hasil output adalah acak
docker image | update menjadi v2
Ini masih lanjutan dengan yang diatas
  1. masih berada folder yang sama (ketikkan perintah dibawah ini)
  2. echo "console.log(\"ini adalah versi v0.2\");" >> index.js
  3. lalu build image
  4. docker image build -t hello:v0.2 .
  5. sekarang coba buat container
  6. docker container run hello:v0.2
    hello ini hostname id 80bcdcd834fa
    ini adalah versi v0.2
    
Men inspeksi image | inspect
jadi apa fungsi inspeksi ini? adalah untuk mengetahui sebenarnya ada apa aja sih di dalam image itu.. sebagai contoh kita ingin inspeksi alpine os
  1. cek image alpine os, apakah sudah ada dikita belum
  2. docker image ls
  3. apibila belum ada maka kamu harus download imagenya dulu
  4. docker image pull alpine
  5. nah ini intinya coba ketikkan perintah dibawah ini
  6. docker image inspect alpine
    maka akan muncul banyak informasi dari image ini seperti:
    1. layer image terdiri dari ...
    2. waktu dibuatnya
    3. Metadata dari image
    dan banyak lainya
  7. kita juga bisa filter untuk melihat info yang kita lihat misal dibawah ini aku ingin mengetahui id image ku maka
  8. docker image inspect --format "{{ json .Id }}" alpine
    "sha256:e7d92cdc71feacf90708cb59182d0df1b911f8ae022d29e8e95d75ca6a99776a"
    Info hasil output dari inspect adalah dalam format JSON
    Info sha256 biasa digunakan untuk kevalidan suatu file / string dll
    contoh lain
    docker image inspect --format "{{ json .ContainerConfig.Hostname }}" alpine
    "3e0860fab68a"
    

Penutup

Glosarium
Hypervisor - platfrom / aplikasi untuk menjalankan sebuah virtualisasi , contoh:
  1. Microsoft Hyper-V
  2. Oracle VirtualBox
  3. VMware Workstation Player
apt - Advanced Package Tool, untuk install install paket linux yang base nya debian
alpine OS - adalah os linux yang berdiri sendiri , bukan dari debian , arch, redhat atau yang lain
nginx - adalah webserver seperti apache
echo - perintah dasar kebanyakan bahasa pemrograman untuk print suatu string / interger
images - sebuah container membutuhkan image untuk berjalan, image adalah paket bundle aplikasi
container - container adalah aplikasi yang dijalankan dari images, dalam satu image bisa untuk menjalankan lebih dari 1 container
Shell - Shell adalah sebuah program yang memfasilitasi interaksi antara user dan OS (karnel). Ada banyak Shell yang tersedia, seperti : sh, bash, csh, zsh...etc
Node js - Salah satu framework javascript
Daftar Pustaka
https://www.backblaze.com/blog/vm-vs-containers/
https://readwindow.blogspot.com/2015/03/pengertian-hypervisor.html
https://phoenixnap.com/kb/how-to-install-docker-on-ubuntu-18-04
https://opensourceforu.com/2019/04/the-top-open-source-hypervisor-technologies/
https://mjaglan.github.io/docs/why-containerize-apps.html
https://training.play-with-docker.com/ops-s1-hello/
https://www.adminschoice.com/containers-vs-vms-top-5-differences-you-must-know/
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
https://stackoverflow.com/questions/45023363/what-is-docker-io-in-relation-to-docker-ce-and-docker-ee

0 Response to "Dasar dasar menggunakan Docker"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel