Docker merupakan layanan yang berguna untuk membuat dan menjalankan container. Container tersebut berfungsi untuk mengemas dan menjalankan aplikasi secara terisolasi. Dengan docker, kita bisa menjalankan banyak container yang didalamnya terdapat aplikasi yang berbeda-beda di dalam satu host server.
Antara satu container dengan yang lainnya tidak saling menginterupsi jika terjadi kesalahan atau error. Hal tersebut dikarenakan container menjalankan proses aplikasi di dalamnya secara terisolasi. Jaringan yang digunakan container pada docker secara default juga hanya dapat diakses oleh host server tersebut. Karenanya container juga tidak menginterupsi jaringan yang terhubung ke host server.
Instalasi Docker
Update packages dan instal service yang dibutuhkan:
apt-get update
apt-get install ca-certificates curl gnupg
Setelah itu tambahkan Docker official GPG key dan tambahkan repository docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
#setup repo:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Kembudian update package kembali:
apt update
Setelah itu, instal docker engine dan plugin pendukung lainnya:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Setelah berhasil diinstal, periksa status docker:
systemctl status docker
Docker Command (CLI)
Untuk mendownload image dari registry:
docker pull namaimages:versi
#contoh:
docker pull ubuntu
Untuk menampilkan list image container pada docker. Registry cloud dan registry cloud manager:
docker images
Untuk menjalankan container dengan image ubuntu serta langsung masuk ke interactive TTY untuk meremote container ubuntu:
docker run -it namaimage
#contoh:
docker run -it ubuntu
Tambahkan –name jika ingin container ingin diatur namanya sesuai keinginan:
docker run -it --name namacontainer namaimage
Untuk menampilkan list container:
docker ps
Untuk mengaktifkan container mati yang telah dibuat:
docker start namacontainer
Untuk mengganti nama container:
docker rename namacontainer namacontainerbaru
Untuk masuk ke dalam terminal container:
docker exec -it namacontainer /bin/bash
Kemudian, sebagai percobaan, instal service nginx di dalam container tersebut:
Karena container tidak terdapat systemd di dalamnya, maka jalankan nginx dengan perintah:
Kemudian untuk memeriksa apakah webnya sudah dapat diakses, buka terminal ssh kedua untuk melakukan pengecekan:
Untuk memudahkan dalam membuat container sejenis, kita dapat melakukan backup container tersebut menjadi sebuah image. Image yang sudah di backup nantinya dapat digunakan untuk menjalankan container baru. Untuk melakukan backup container menjadi image jalankan perintah:
docker commit -p namacontainer namaimagebaru
Setelah berhasil membuat image, kita bisa menggunakan image tersebut untuk membuat container baru yang sejenis dengan container yang telah diinstal nginx didalamnya. Secara default, container memiliki IP private tersendiri yang hanya bisa diakses oleh host. Untuk melakukan akses dari luar, kita bisa membuat sebuah container dengan fitur port forwarding:
docker run -dit -p porthost:portcontainer namacontainer image
Argumen -d digunakan agar container berjalan di belakang layar. Dan argumen -it digunakan agar container dapat diakses terminalnya:
Setelah berhasil dibuat, jalankan nginx yang ada di dalam container dengan perintah:
docker exec -it ct-ub-nginx nginx -g 'daemon off;' &
Tambahan argumen & digunakan agar proses nginx berjalan di latar belakang.
Kemudian coba akses IP server host tempat docker engine berjalan dengan port yang telah diatur ketika menjalankan perintah docker run
:
Kemudian coba edit konten dari web nginx yang ada di dalam container:
Coba akses kembali menggunakan web browser:
Docker juga memiliki perintah untuk menyalin file atau directory dari host ke dalam container:
docker cp directory/ namacontainer:/directory
#contoh untuk copy directory host ke directory container:
docker cp app/ ct-nginx:/var/www/html
Perintah di atas digunakan untuk menyalin folder dari sebuah aplikasi web ke dalam directory html container nginx agar bisa ditampilkan di web milik container. Pada contoh ini kita akan clone sebuah konten game dari github:
git clone https://github.com/bazigan/hextris.git
Kemudian kita copy folder aplikasi tersebut ke dalam directory html container:
docker cp docker cp hextris/ ct-ub-nginx:/var/www/html/
Setelah itu coba akses menggunakan web browser:
http://10.23.2.248:8000/hextris/
Perintah Lainnya
Untuk melihat status penggunaan resource container:
docker stats
Untuk melihat catatan log container:
docker logs namacontainer
docker logs -f namacontainer
Docker File
Buat file dengan nama Dockerfile dan isi dengan perintah-perintah berikut:
vim Dockerfile
======================================
FROM ubuntu:20.04
RUN apt update && apt install nginx -y
ADD ./hextris /var/www/html
EXPOSE 80
CMD nginx -g "daemon off;"
- FROM untuk mengambil image dari registry
- RUN digunakan untuk menjalankan perintah dan hasilnya dimasukkan di dalam image ketika pembuatan
- ADD digunakan untuk menambahkan directory dari host ke dalam directory image container
- EXPOSE digunakan untuk mendefiniskan port yang digunakan oleh service di dalam image
- CMD digunakan untuk menentukan perintah yang tertanam di dalam image
Setelah itu jalankan perintah untuk membuat image:
docker build -t namaimage .
#contoh:
docker build -t ubuntu-game .
Setelah berhasil membuat image dengan docker file, periksa daftar image:
Setelah image berhasil dibuat, coba buat container baru menggunakan image tersebut:
docker run -dit -p 8001:80 --name ubuntu-game-1 ubnt-hextrisgame
Kemudian coba akses menggunakan web browser:
http://10.23.2.248:8001/
Sampai tahap ini kita telah berhasil membuat image dan juga container baru dengan docker file. Untuk menggunakan docker file dengan perintah lebih lanjut dapat melihat referensi berikut: https://docs.docker.com/engine/reference/builder/
Push Image ke Docker Hub
Image yang telah dibuat dapat diupload ke registry cloud agar nantinya dapat dibagikan ke komputer atau server lainnya. Untuk mengupload image ke dalam registry cloud, silakan buat akun di https://hub.docker.com/ :
Setelah membuat akun, gunakan perintah docker login:
docker login
Kemudian masukkan username dan password akun docker hub yang telah dibuat:
Setelah berhasil login, kita bisa mengupload atau push image yang dibuat ke dalam registry cloud tersebut. Pertama-tama ubah tag terlebih dahulu:
docker tag namaimage username/namaimagediregistry
Kemudian push image yang telah diganti tag nya dengan perintah:
docker push bazigan/ubnt-hextris
Docker volume
Docker volume berguna untuk mengatur penyimpanan mana yang digunakan untuk menyimpan data conatiner pada Directory/hard disk atau File system (NFS)/Bind mount (Sharing Folder).
docker volume create namavolume
docker volume ls
docker inspect namavolume
Untuk menjalankan kembali container dengan volume:
docker run -dit -p porthost:portcontainer -v namavolume/directory:path --name namacontainer image
Docker Network
Secara default, jaringan yang digunakan container pada docker adalah bridge dengan IP lokal 172.17.0.x/22. Terdapat pilihan jaringan lain untuk container, yaitu host dan none (loopback). Jika jaringan docker diatur untuk menggunakan tipe jaringan server host 10.23.0.0/22, docker juga bisa menggunakan jaringan yang sama dengan server. Untuk membuat jaringan pada docker jalankan perintah:
docker network create --subnet x.x.x.x/xx --gateway x.x.x.x namanetwork
docker network ls
ip a
Kemudian buat kembali container dengan network yang telah dibuat:
docker run -dit -p porthost:portcontainer -v namavolume/directory:path --network namanetwork --name namacontainer image
Docker Compose
Sebelumnya terdapat Docker file yang dapat digunakan untuk membuat sebuah image. Docker compose berguna untuk membuat banyak container dengan file yml (yaml). Siapkan project yang hendak dibuat menjadi image dan berjalan sebagai container. Pada contoh ini menggunakan project html sederhana yang akan menampilkan teks “Selamat Datang di App Amar”.
mkdir amar-app
cd amar-app
echo 'Selamat Datang di App Amar' > index.html
Pertama-tama buat docker file yang berguna untuk membuat image web server:
vim Dockerfile
======================================
FROM nginx:alpine
ADD index.html /usr/share/nginx/html
EXPOSE 80
Untuk menggunakan docker compose, pertama-tama buat file docker-compose.yml dan isi seperti di bawah ini:
services:
backend:
build: .
restart: always
ports:
- "3000:80"
volumes:
- app-data:/usr/share/nginx/html
volumes:
app-data:
Kemudian jalankan perintah:
docker compose up -d
Periksa hasil compose:
docker compose ps
Kemudian akses browser:
pdate data di volume:
docker volume inspect amar-app_app-data
Masuk ke dalam directory:
cd /var/lib/docker/volumes/amar-app_app-data/_data
Edit file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>App Amar</title>
</head>
<body>
<h1>Selamat Datang di App Amar</h1>
</body>
</html>
Akses kembali menggunakan browser:
Untuk upload ke registry:
docker login
docker tag amar-app-backend:latest bazigan/amar-app-backend
docker images
Edit file compose:
Jalankan perintah untuk push ke registry:
docker compose push
Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya.
Penulis : Bazigan Tsamara Sukamto