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
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
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
- linux
- windows
- mac os ga punya mac dong
paling disarankan untuk diinstall di linux karena docker mengambil os linux sebagai host nya, docker pada linux hanya membutuhkan ram kurang dari 2gb
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
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
jadi kesimpulanya docker desktop dan virtual box tidak dapat jalan bersamaan
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
- Melakukan update paket
- hapus versi seblemunya dari paket, ( untuk memastikan juga apa bila docker benar benar tidak ada di ubuntu kamu)
- Install docker inti
- jalankan docker
- gunakan perintah enable supaya saat boot pertama kali service docker langsung berjalan
- cek docker version
apt-get update
apt-get remove docker docker-engine docker.io
apt-get install -y docker-ce
systemctl start docker
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
docker --version
Docker version 19.03.5, build 633a0ea838
Docker pada virtual box
- Jalankan Linux
- Lakukan Penginstallan docker seperti biasa
- setting adapter menjadi bridge atau host only inti
- 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 dihttps://drive.google.com/open?id=16nMljzrQItMLr9uxLVnf6I3iuPpLEJEQ
Tahap - Tahap Installasi
- Sambungkan terlebih dahulu aws ec2 dengan ssh
- lakukan install docker seperti di ubuntu 18 seperti biasa
- atur security group pada aws untuk membuka port 80 inti
- 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
- otomatis pull image apabila images tidak tersedia, maka akan mendownload image nya terlebih dahulu
- docker run bukan untuk menjalankan docker run bukan untuk menjalankan container, melainkan membuat container
- docker apa bila tidak disertai argumen --name maka akan membuat nama container otomatis
- 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 inidocker container run --name halo1 hello-worldatau 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
- ketka enter maka docker mengecek apakah container sudah ada apa belum
- kalo ada, muncul pesan error sudah ada container dengan nama yang sama kalo tidak ada , maka docker akan pull image dari docker store / docker hub
- setelah image ter download, docker langsung menjalankan container
- 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 nginxdiatas 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 --namepenting apabila tidak menggunakan argumen -it maka container cuma sekali pakai / tidak bisa dipakai / distart lagi
- melihat isi direktori os alpine
- menjalankan perintah echo
- masuk direktori
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
docker container run alpine echo "halo saya hanung"
halo saya hanung
docker container run -it --name latihan-os alpine /bin/shkamu 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
- melihat container yang berjalan
- Meihat semua list container yang ada
- menjalankan container yang berhenti Syntax:
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
docker container ls --all
docker container start [nama / id container]contoh:
docker container start halo1
menjalankan perintah container | docker container exec
Syntax:
docker container start [id/nama container]
docker container exec [id/nama container] [perintah]untuk menjalankan perintah exec, container harus berjalan dulu menggunakan
docker container start [id/nama container]
- echo alpine os
- Melihat list folder alpine os
- Masuk bash
docker container exec latihan-os echo "halo saya hanung"
docker container exec latihan-os ls
docker container exec -it latihan-os bin/sh
Menghapus | rm
perintah rm bisa digunakan untuk menghapus image maupun container
syntax:
syntax:
docker [container/image] rm [nama container/image]
- menghapus container
- menghapus image
- menghapus semua container yang sedang berjalan
docker container rm halo1
docker image rm nginx
docker rm $(docker ps -a -q)
docker images | docker image
- download image alpine os
- Melihat list image
docker image pull alpine
docker image ls
praktik lanjutan
Membuat docker image pure simple
- membuat folder
- masuk folder
- membuat Dockerfile
- buat file html
- build image
- buat container
- cek di browser dengan port 3535
mkdir folderhanung
cd folderhanung
nano Dockerfilemasukan code dibawah ini
FROM nginx:alpine COPY . /usr/share/nginx/htmllalu save
nano index.htmlmasukan code html contoh:
<h1>nama saya hanung</h1>lalu save
docker build -t htmlpertama:v1
docker container -d -p 3535:80 --name htmlcontener htmlpertama:v1
Membuat docker image cloning dari container
- Mari mulai dengan membuat container shell ubuntu
- untuk sebagai contoh kita akan mencoba menginstall paket bernama figlet , masukan 2 perintah dibawah ini ke dalam bash shell ubuntu
- tes apakah paket sudah berjalan dengan baik dengan menjalankan perintah dibawah ini didalam bash shell ubuntu
- oke install paket selesai lalu kembali/keluar dari bash shell ubuntu dengan ketikkan exit
- untuk memulai praktik ini kamu membutuhkan id dari container yang tadi kamu buat, gunakan argumen -a atau --all supaya list container terlihat semua
- step ini tidak dilakukan tidak apa apa, kita hanya mengecek terhadap perubahan container yang kita buat
- sekarang, untuk membuat image kamu memerlukan commit ke container ini
- cek image apa benar sudah terbuat atau belum
- nah maka dari itu kita akan memberi nama pada image kita, supaya tidak none
- nah saat nya cek image yang kamu buat
docker container run -it ubuntu bashSekarang kamu berada dalam bash shell container yang kamu buat barusan, yaitu bash shell ubuntu
apt-get update
apt-get install -y figlet
figlet "halo 35"
_ _ _________ | |__ __ _| | ___ |___ / ___| | '_ \ / _` | |/ _ \ |_ \___ \ | | | | (_| | | (_) | ___) |__) | |_| |_|\__,_|_|\___/ |____/____/
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2bf5ed92052f ubuntu "bash" 16 minutes ago Up 2 minutes heuristic_gangulykamu cukup menggunkan 4 digit id dari depan, setiap id dari container yang kita buat akan berbeda beda
docker container diff [container ID]
docker container diff 2bf5maka akan tampil list perubahan pada container yang kita buat tadi
docker container commit [CONTAINER_ID]
docker container commit 2bf5dan siapp, kamu telah berhasil membuat image dari container yang kamu buat tadi
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
docker image tag [IMAGE_ID] [NAMA_YANG_AKAN_DIBERI]
docker image tag cfac figletsayaPenting yang kamu masukan adalah image id bukan image container, karena kita sedang memberi nama ke image yang kita buat
docker container run figletsaya figlet tes_image
_ _ | |_ ___ ___ (_)_ __ ___ __ _ __ _ ___ | __/ _ \/ __| | | '_ ` _ \ / _` |/ _` |/ _ \ | || __/\__ \ | | | | | | | (_| | (_| | __/ \__\___||___/___|_|_| |_| |_|\__,_|\__, |\___| |_____| |___/
- membuat container
- membuat image dari container yang sudah terinstall paket figlet
- memberi nama image
- 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
- membuat folder untuk pack image yang kita buat, dimana saja bisa
- Masuk ke folder nodejs
- membuat file index.js
- Membuat Dockerfile Docker file adalah doker file :v
- build image build image harus berada dalam folder yang tadi kamu buat
- buat dan jalankan container nya
mkdir nodejs
cd nodejs
nano index.jsnah 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);
nano Dockerfilelalu isikan dengan kode dibawah ini, terus save
FROM alpine
RUN apk update && apk add nodejs
COPY . /app
WORKDIR /app
CMD ["node","index.js"]
docker image build -t hello:v0.1 .
docker container run hello:v0.1
hello ini hostname id a7d5a1a06d91hasil output adalah acak
docker image | update menjadi v2
Ini masih lanjutan dengan yang diatas
- masih berada folder yang sama (ketikkan perintah dibawah ini)
- lalu build image
- sekarang coba buat container
echo "console.log(\"ini adalah versi v0.2\");" >> index.js
docker image build -t hello:v0.2 .
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
- cek image alpine os, apakah sudah ada dikita belum
- apibila belum ada maka kamu harus download imagenya dulu
- nah ini intinya coba ketikkan perintah dibawah ini
- kita juga bisa filter untuk melihat info yang kita lihat misal dibawah ini aku ingin mengetahui id image ku maka
docker image ls
docker image pull alpine
docker image inspect alpinemaka akan muncul banyak informasi dari image ini seperti:
1. layer image terdiri dari ...
2. waktu dibuatnya
3. Metadata dari image
dan banyak lainya
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:
- Microsoft Hyper-V
- Oracle VirtualBox
- 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