Panduan Docker¶
11.4.1 Apa itu Docker?¶
Docker adalah platform open-source yang memungkinkan kita untuk membuat, mendistribusikan, dan menjalankan aplikasi di dalam container. Container adalah semacam "mini komputer virtual" yang berisi semua yang dibutuhkan untuk menjalankan aplikasi, seperti kode, library, dependensi, dan sistem operasi ringan.
11.4.1.1 Kenapa Harus Docker?¶
- Portabilitas: Aplikasi yang berjalan di Docker akan bekerja di mana saja selama Docker terinstall, tanpa harus memikirkan perbedaan sistem operasi.
- Isolasi Lingkungan: Setiap aplikasi berjalan di dalam container terpisah, sehingga konflik antara versi library atau dependensi tidak terjadi.
- Efisiensi: Container lebih ringan dibandingkan dengan Virtual Machine (VM), karena berbagi kernel sistem operasi dengan host.
- Otomatisasi: Docker mempermudah pengaturan lingkungan pengembangan, testing, dan produksi dengan file konfigurasi seperti
Dockerfile
dandocker-compose.yml
.
11.4.2 Cara Install Docker¶
11.4.2.1 Install Docker di Windows¶
- Prasyarat:
- Windows 10/11 Pro, Enterprise, atau Education (mendukung WSL2).
-
Aktifkan Windows Subsystem for Linux 2 (WSL2).
-
Langkah-langkah:
- Download Docker Desktop dari situs resmi Docker.
- Instal Docker Desktop.
- Selama instalasi, pilih opsi untuk mengaktifkan WSL2.
- Setelah instalasi selesai, buka Docker Desktop dan pastikan Docker berjalan.
11.4.2.2 Install Docker di Linux VM¶
- Langkah-langkah:
- Update paket:
- Install dependensi:
- Tambahkan repository Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Install Docker:
- Tambahkan user ke grup Docker (opsional):
- Jalankan Docker:
11.4.3 Apa itu Dockerfile dan docker-compose.yml?¶
11.4.3.1 Apa itu Dockerfile?¶
Dockerfile adalah file konfigurasi untuk membuat image Docker. File ini berisi instruksi step-by-step tentang bagaimana image Docker harus dibuat.
11.4.3.2 Apa itu docker-compose.yml?¶
docker-compose.yml
adalah file konfigurasi yang digunakan untuk mendefinisikan dan menjalankan aplikasi multi-container. Dengan file ini, kita bisa mendefinisikan beberapa container sekaligus, seperti aplikasi utama dan database.
11.4.4 Struktur Project dengan Docker¶
Berikut adalah struktur project yang disarankan:
project-root/
├── app/ # Folder untuk source code aplikasi
│ ├── index.php # Contoh file aplikasi PHP
│ └── ...
├── apache/ # Folder untuk konfigurasi Apache
│ └── default.conf # File konfigurasi Apache
├── nginx/ # Folder untuk konfigurasi Nginx
│ └── default.conf # File konfigurasi Nginx
├── Dockerfile # File konfigurasi Docker untuk aplikasi ini
├── docker-compose.yml # File docker-compose untuk konfigurasi container
└── README.md # Dokumentasi project
- Dockerfile: Diletakkan di root direktori project (
project-root/Dockerfile
). - docker-compose.yml: Juga diletakkan di root direktori project (
project-root/docker-compose.yml
). - Source Code: Dimasukkan ke dalam folder
app/
. - Konfigurasi Apache: Diletakkan di
apache/default.conf
. - Konfigurasi Nginx: Diletakkan di
nginx/default.conf
.
11.4.5 Contoh Dockerfile dan Docker-Compose¶
11.4.5.1 Dockerfile untuk PHP 5.6 (CodeIgniter 3)¶
Dockerfile:
FROM php:5.6-apache
# Install dependensi
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd mysqli
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy project ke dalam container
COPY ./app /var/www/html
COPY ./apache/default.conf /etc/apache2/sites-available/000-default.conf
# Aktifkan modul Apache
RUN a2enmod rewrite
# Set permission
RUN chown -R www-data:www-data /var/www/html
docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
volumes:
- ./app:/var/www/html
- ./apache/default.conf:/etc/apache2/sites-available/000-default.conf
networks:
- app-network
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: codeigniter_db
MYSQL_USER: ci_user
MYSQL_PASSWORD: ci_password
ports:
- "3306:3306"
networks:
- app-network
networks:
app-network:
Konfigurasi Apache:
# apache/default.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
11.4.5.2 Dockerfile untuk PHP 8 (CodeIgniter 3.13)¶
Dockerfile:
FROM php:8.0-apache
# Install dependensi
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd mysqli
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy project ke dalam container
COPY ./app /var/www/html
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
# Aktifkan modul Apache
RUN a2enmod rewrite
# Set permission
RUN chown -R www-data:www-data /var/www/html
docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8090:80"
volumes:
- ./app:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: codeigniter_db
MYSQL_USER: ci_user
MYSQL_PASSWORD: ci_password
ports:
- "3307:3306"
networks:
- app-network
networks:
app-network:
Konfigurasi Nginx:
# nginx/default.conf
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi.conf;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
11.4.6 Cara Build dan Push Image ke Harbor¶
11.4.6.1 Build Image¶
- Pastikan Anda berada di direktori root project.
- Jalankan perintah berikut untuk membangun image Docker:
11.4.6.2 Push Image ke Harbor¶
- Login ke registry Docker:
- Push image ke registry:
11.4.6.3 Tagging Image¶
- Untuk menandai image dengan versi tertentu:
- Push image dengan tag baru:
11.4.7 Cara Menjalankan Docker di Windows dan Linux¶
11.4.7.1 Jalankan Docker Desktop di Windows atau Pastikan Docker Aktif di Linux¶
- Clone atau siapkan project:
-
Letakkan
Dockerfile
dandocker-compose.yml
di direktori root masing-masing project. -
Bangun dan jalankan container:
- Untuk PHP 5.6:
-
Untuk PHP 8:
-
Akses aplikasi:
- PHP 5.6: http://localhost:8080
-
PHP 8: http://localhost:8090
-
Cek log jika ada masalah:
-
Database dapat diakses pada port 3306 (PHP 5.6) dan 3307 (PHP 8).