Containerisasi Dengan Docker


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