Bahagian 2: Docker - Pengurusan Lanjutan



Bahagian 2 banyak melibatkan perkara berkaitan pemasangan beberapa perisian/services, menghubungkan dan konfigurasi database dan web, penetapan variable, penetapan berkaitan network, pembangunan aplikasi dari node.js dan publish imej docker pada Docker hub.

Topik Hari Ini:

  1. Jadikan Web Server Dari Beberapa Folder (Nginx).
  2. Memahami Environment Variable dan Penggunaannya.
  3. Memasang dan Menghubungkan Container Dengan Alamat IP.
  4. Memasang dan Menghubungkan Container Dengan Hostname.
  5. Penggunaan Dockerfile untuk Bina Container.
  6. Terbitkan (Publish) Imej ke Docker Hub.
  7. Bina Aplikasi node.js, kompil dan Publish.
  8. Konsep Microservices.

JADIKAN WEB SERVER DARI BEBERAPA FOLDER (NGINX)

docker run --name websaya -d \

 -v ~/containers/website1:/usr/share/nginx/html/website1:ro \ 
 -v ~/containers/website2:/usr/share/nginx/html/website2:ro \
 -p 8080:80 -d nginx


MEMAHAMI ENVIRONMENT VARIABLE DAN PENGGUNAANNYA

Environment Variable menyimpan maklumat tertentu seperti lokasi folder, fail, tetapan penggunaan bahasa pada OS dan sebagainya. Maklumat tersebut telah ditetapkan pada nama variable tertentu. Arahan yang digunakan pada Linux ialah "env".

Contoh:

kamil@ubuntu-12:~/$ env

SHELL=/bin/bash
PWD=/home/kamil/
LOGNAME=kamil
HOME=/home/kamil
LANG=C.UTF-8
. . .

Contoh penggunaan untuk penetapan environment variable kata laluan :

docker run -d -e MYSQL_ROOT_PASSWORD=K@taL4luAn mysql

Menambah Environment Variable Pada Container Tertentu:

docker exec <container name> env


MEMASANG DAN MENGHUBUNGKAN CONTAINER DENGAN ALAMAT IP

Memasang dan Menghubungkan Container Wordpress, PhpMyAdmin dan MySQL:

docker run -p 8080:80 -d wordpress
docker pull phpmyadmin
docker run mysql

Menjalankan phpmyadmin dengan Port Forwarding:

docker run -p 8084:80 -d phpmyadmin

NOTA: Gunakan nombor port lain kerana port 8080 sudah digunakan pada "wordpress".

docker run -p 8084:80 -d -e PMA_HOST=<alamat IP MySQL> phpmyadmin

Dapatkan Alamat IP Bagi Docker Container Untuk MySQL

docker ps
docker inspect <docker id MySQL>

Lihat Nilai Pada "IPAddress":
...
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
...

docker run -p 8084:80 -d -e PMA_HOST=172.17.0.3 phpmyadmin

NOTA: Setelah alamat IP MySQL diperolehi, barulah phpmyadmin boleh menggunakan database dari IP tersebut.

Menentukan Nama Container dan Hosname Sendiri

docker run -it --name busybox001 -h busybox-host001 busybox
docker run -it --name busybox002 -h busybox-host002 busybox

NOTA: Pada ketika ini, tak boleh ping guna hostname. Hanya guna alamat IP sahaja yang boleh.


Memaparkan Penetapan Network Bridge

docker network inspect bridge


Penetapan Segmen Network Sendiri

docker network create abc_network (buat satu nama segmen baru)

docker network ls (periksa senarai semua nama segmen)

docker network inspect abc_network (periksa nama segment baru yang telah dibuat)

docker run -it --network abc_network busybox (menjalankan busybox menggunakan network segmen baru)

Contoh:

docker run -it --name busybox003 -h busybox-host003 --network abc_network busybox

docker run -it --name busybox004 -h busybox-host004 --network abc_network busybox


MEMASANG DAN MENGHUBUNGKAN CONTAINER DENGAN HOSTNAME

Untuk Membuat Segmen Rangkaian Sendiri:

docker network create abc_network

Untuk Membuat Container MySQL:

docker run \
 --network abc_network \
 -e MYSQL_ROOT_PASSWORD=K@taL4luAn \
 --name mysql_name \
 -h mysql_host
 -d mysql

Untuk Membuat Container PhpMyAdmin:

docker run \
 --name phpmyadmin_name
 --network abc_network \
 -p 8080:80 \
 -e PMA_HOST=mysql_host \
 -d phpmyadmin


  image
|------------------------|
|                        |
|                        |
|------------------------|
| run commands
|------------------------|
| dependencies           |
|------------------------|
| source code            |
|------------------------|
| Base image             |
|------------------------|


Penggunaan Dockerfile Untuk Bina Container

1. Buat satu fail dengan nama "Dockerfile".

2. Masukkan maklumat berikut dan simpan:

FROM nginx:1.27.2-alpine
COPY index.html /usr/share/nginx/html

3. Masuk ke dalam folder bagi lokasi fail "index.html".

4. Taip arahan berikut untuk bina pakej:

docker build -t catsy .

5. Uji dengan arahan berikut untuk menjalankan docker pakej yang telah dibina:

docker run -d -p 8082:80 catsy


Terbitkan (Publish) Imej ke Docker Hub:

1. Lawat laman web berikut dan daftar masuk: https://hub.docker.com

2. Pergi ke Settings > Personal access tokens >  New access token

3. Tekan Generate new token

4. Salin dan tampal arahan yang diberi:

docker login -u <docker hub username>

5. Jika ia meminta kata laluan, masukkan kata laluan baru yamg telah disediakan. Contoh:

dckr_pat_fhVQ5Cm1QheEB2SBJQyqdLMJR4U

NOTA: Digalakkan untuk membina sesuatu imej dengan versi yang spesifik.

6. Tetapkan tag sebagai label kepada imej tersebut:

docker tag catsy <docker hub username>/catsy:v1.0

7. Muat naik pakej imej tersebut ke docker hub:

docker push <docker hub username>/catsy:v1.0

8. Periksa samada imej baru sudah tersedia:

docker images

9. Buang imej baru tersebut untuk diperiksa semula:

docker rmi catsy

10. Sekarang muat turun imej baru:

docker pull <docker hub username>/catsy:v1.0

11. Uji imej baru tersebut samada boleh dijalankan atau tidak:

docker run -p 9000:80 <docker hub username>/catsy:v1.0

NOTA: Tukar nombor port 9000 kepada nombor lain mengikut kesesuaian.

NOTA: "Chuck Docker" on Youtube.


Bina Aplikasi node.js, Kompil dan Publish:

Cipta fail-fail berikut dan salin isi kod yang diperlukan (rujuk Gist):

  • index.html - https://gist.github.com/alternat0r/054b12927c5a9ebf8706ae4e251f1b8b
  • Dockerfile - https://gist.github.com/alternat0r/0274517685ab7bbbbff2fd9353184842
  • package.json -https://gist.github.com/alternat0r/0e2e6d2043da9eca2b08cfb5eeff5ebb
  • package-lock.json -https://gist.github.com/alternat0r/424b36593014919c83c15896a83e20c8

Bina Pakej Imej dan Uji

docker build -t mywebsite .
docker images
docker run --name mywebsite -p 4000:4000 -d mywebsite 

Cuba layar alamat IP tersebut dengan nombor 4000 untuk pengesahan.


KONSEP MICROSERVICES

Terdapat 2 jenis konsep yang diguna pakai:

1. Monolithic

2. Microservices


Monolithic


|------------------------------------------|
| ---------------------------------------- |
| | Frontend | Database | Business Logic | |
| ---------------------------------------- |
|------------------------------------------|

|------------------------------------------|
| ---------------------------------------- |
| | Frontend | Database | Business Logic | |
| ---------------------------------------- |
|------------------------------------------|

  • Dibangunkan setiap servis dan aplikasi dalam satu server tunggal.
  • Perlu clone keseluruhan imej/server setiap kali untuk menambah prestasi.
  • Perlu menjalankan keseluruhan eko-sistem setiap kali terdapat penambahan beban kerja. Sangat tidak efisien.


Microservices


[ app ]--->  [ database ]
   \ \---->  [ database ]
    \----->  [ database ]

  • Teknik ini ialah dengan mengasingkan fungsi setiap servis. Hanya satu fungsi kerja sahaja diperlukan untuk setiap container.
  • Setiap servis boleh dipasang secara bebas dan berasingan.
  • Setiap servis yang berlainan boleh bergandingan.
  • Membolehkan pembangunan secara autonomi dari pelbagai kumpulan dan jenis pelantar.
  • Boleh diurus/bangun/ditulis oleh kumpulan kerja yamg kecil.

NOTE: Guna ClickHouse SQL untuk membolehkan database dibaca secara kolum. Ia sangat pantas dan efisien. Tidak seperti MySQL yang akan baca database mengikut baris (row).


Microservices - Kelebihan

  • Mengurangkan pengasingan sesuatu masalah.
  • Menghapuskan kebergantungan pada vendor dan teknologi yang spesifik.
  • Mudah untuk difahami.

Microservices - Kelemahan
  • Lebih banyak masalah, bertambah rumit untuk diselesaikan.
  • Adakah kumpulan kerja sudah dilatih, bersedia dan sudah melakukan ujian?
  • Jangan mula gunakan pada infrastruktur yang lebih kompleks.
  • Ketika melakukan ujian ia kelihatan mudah tetapi betul ke? Seseorang yang mahir perlu mengesahkannya.
  • Sukar untuk dilakukan dalam kumpulan yang pelbagai.
  • Satu kemaskini pada microservice boleh jadi akan memberi impak pada microservice yang lain. Contoh:
    • Pangkalan data yang pelbagai?
    • Masalah latensi.
    • Ralat yang bersifat sementara dan sukar dijangka.

Arahan Lain Yang Boleh digunakan:

docker info
docker version
docker login

docker run --memory="256m" nginx (max memory)
docker run --cpus=".5" nginx (max CPU)














0 comments:

Post a Comment

My Instagram