avatar RicalDocs

The Daily Stack

  • HOME
  • CATEGORIES
  • TAGS
  • ARCHIVES
  • ABOUT
  • MUSIC
Home Cara Deploy NGINX di AWS EC2 Menggunakan Docker
Article

Cara Deploy NGINX di AWS EC2 Menggunakan Docker

Pelajari cara deploy NGINX dengan Docker di AWS EC2 secara lengkap. Panduan pemula ini mencakup konfigurasi EC2 instance, instalasi Docker, implementasi Docker volumes untuk data persistence, dan pembuatan custom Dockerfile.

Published Nov 15, 2024 Updated Nov 23, 2025
By Risnanda Pascal
6 min read
Cara Deploy NGINX di AWS EC2 Menggunakan Docker
Cara Deploy NGINX di AWS EC2 Menggunakan Docker

Pendahuluan

Docker telah merevolusi cara pengembangan dan deployment aplikasi dengan teknologi containerization yang memungkinkan pengemasan kode aplikasi beserta seluruh dependensinya dalam lingkungan yang terisolasi dan portabel. Kontainer Docker menjamin konsistensi operasional di berbagai lingkungan komputasi, dari development hingga production, sekaligus menyediakan efisiensi resource yang superior dibanding virtual machine tradisional.

Integrasi Docker dengan Amazon Web Services (AWS) menciptakan solusi yang powerful untuk deployment aplikasi yang skalabel, resilient, dan cost-effective. Meskipun AWS menyediakan layanan container orchestration seperti Amazon ECS (Elastic Container Service) dan EKS (Elastic Kubernetes Service), pemahaman fundamental tentang deployment Docker pada EC2 instance tetap menjadi keterampilan esensial bagi cloud engineer.

Prasyarat dan Persiapan

Sebelum memulai, pastikan Anda memiliki:

  • Akun AWS dengan akses ke layanan EC2
  • Basic understanding tentang command line interface
  • Pengetahuan dasar tentang konsep networking dan web server

Konfigurasi EC2 Instance yang Optimal

Pemilihan dan Inisialisasi Instance

  1. Akses AWS Management Console dan navigasi ke layanan EC2
  2. Pilih Launch Instance dari dashboard
  3. Pada bagian Application and OS Images, pilih Ubuntu Server sebagai AMI

Pemilihan AMI Ubuntu

  1. Instance Type Selection: Pilih t3.small (recommended) atau t2.small sebagai minimum requirement
    • 2 vCPU
    • 2 GiB RAM
    • Network performance yang memadai untuk workload container

Pemilihan Tipe Instans

Konfigurasi Security Group dan Network

Key Pair Management:

  • Buat new key pair atau gunakan existing key
  • Format .pem untuk OpenSSH clients
  • Format .ppk untuk PuTTY users

Pembuatan Key Pair

Security Group Configuration: Buka akses untuk port berikut:

  • Port 22 (SSH): Untuk remote administration
  • Port 80 (HTTP): Untuk web traffic
  • Port 443 (HTTPS): Untuk secure web connections (opsional untuk testing)

Pengaturan Jaringan

Untuk environment production, batasi source IP addresses yang dapat mengakses instance melalui security group rules.

Instalasi Docker Engine dengan Konfigurasi Optimal

Persiapan System dan Repository

Sumber: Install Docker Engine on Ubuntu

Update system packages dan install dependencies:

1
2
3
4
5
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Tambahkan Docker’s official GPG key dan repository:

1
2
3
4
5
6
7
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Installation dan Post-Configuration

Install Docker packages:

1
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Konfigurasi Docker untuk startup otomatis dan non-root user access:

1
sudo systemctl enable docker && sudo systemctl start docker && sudo usermod -aG docker $USER

Verifikasi instalasi:

1
2
docker --version
sudo docker run hello-world

Setelah menambahkan user ke docker group, logout dan login kembali untuk menerapkan perubahan permissions.

Implementasi NGINX Container dengan Best Practices

Basic Container Deployment

Pull official NGINX image dari Docker Hub:

1
docker pull nginx:latest

Buat dan jalankan container dengan port mapping:

1
docker run -d --name nginx-container -p 80:80 nginx:latest

Verifikasi container status:

1
2
docker ps
docker logs nginx-container

Custom Content Management

Buat project directory dan custom HTML content:

1
mkdir -p ~/docker-project/html && cd ~/docker-project/html

Buat custom index.html:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome to Docker on AWS</title>
    <style>
        body { 
            font-family: Arial, sans-serif; 
            max-width: 800px; 
            margin: 0 auto; 
            padding: 20px; 
            background-color: #f5f5f5;
        }
        .container { 
            background: white; 
            padding: 30px; 
            border-radius: 8px; 
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 { color: #333; }
        .status { color: #28a745; font-weight: bold; }
    </style>
</head>
<body>
    <div class="container">
        <h1>🚀 Successfully Deployed!</h1>
        <p>NGINX is running inside a Docker container on AWS EC2</p>
        <p class="status">Status: <span id="status">Active</span></p>
        <p><strong>Environment:</strong> Docker on AWS EC2</p>
        <p><strong>Container Name:</strong> nginx-container</p>
        <p><strong>Timestamp:</strong> <span id="timestamp"></span></p>
    </div>
    <script>
        document.getElementById('timestamp').textContent = new Date().toLocaleString();
    </script>
</body>
</html>

Copy file ke running container:

1
docker cp index.html nginx-container:/usr/share/nginx/html/

alt text

Implementasi Docker Volumes untuk Data Persistence

Persistent Storage Configuration

Hentikan dan hapus existing container:

1
2
docker stop nginx-container
docker rm nginx-container

Buat directory structure dan content:

1
2
mkdir -p ~/docker-project/web-content
cd ~/docker-project/web-content

Buat updated HTML file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Docker Volume Demo</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .volume-demo { color: #dc3545; font-weight: bold; }
    </style>
</head>
<body>
    <h1>🔗 Docker Volume Implementation</h1>
    <p>This content is served via <span class="volume-demo">Docker Volume</span> mounted to the container</p>
    <p>Real-time file synchronization is active!</p>
</body>
</html>

Jalankan container dengan volume mounting:

1
2
3
4
docker run -d --name nginx-volume \
  -p 80:80 \
  -v /home/ubuntu/docker-project/web-content:/usr/share/nginx/html \
  nginx:latest

alt text

Perubahan pada host directory langsung terefleksi dalam container tanpa perlu rebuild atau restart container.

Otomasi Deployment dengan Dockerfile

Custom Image Creation

Buat Dockerfile untuk automated build:

1
2
cd ~/docker-project
nano Dockerfile

Konten Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
FROM nginx:latest

LABEL maintainer="your-email@example.com"
LABEL description="Custom NGINX image for AWS deployment"

COPY web-content/ /usr/share/nginx/html/

EXPOSE 80

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost/ || exit 1

Build custom Docker image:

1
docker build -t custom-nginx-aws .

Jalankan container dari custom image:

1
docker run -d --name nginx-custom -p 80:80 custom-nginx-aws

Verifikasi deployment:

1
2
3
docker images
docker ps
curl http://localhost

Monitoring dan Maintenance

Basic Container Management Commands

Monitor container performance:

1
2
3
4
5
docker stats nginx-custom

docker logs nginx-custom

docker inspect nginx-custom

Management operations:

1
2
3
4
5
6
7
docker stop nginx-custom

docker start nginx-custom

docker restart nginx-custom

docker rm nginx-custom

Cleanup Operations

Hapus unused resources:

1
2
3
4
5
docker container prune

docker image prune

docker system prune

Best Practices dan Security Considerations

Security Hardening

  1. Regular Updates:
    1
    2
    
    sudo apt update && sudo apt upgrade -y
    docker system prune -a
    
  2. Non-Root User:
    1
    
    docker run --user 1000:1000 nginx:latest
    
  3. Resource Limits:
    1
    
    docker run -d --memory="512m" --cpus="1.0" nginx:latest
    

Production Recommendations

  • Gunakan Amazon ECR untuk managed container registry
  • Implementasikan Application Load Balancer untuk traffic distribution
  • Configure CloudWatch untuk monitoring dan logging
  • Gunakan IAM roles untuk secure credential management

Troubleshooting Common Issues

Connection Problems

1
2
3
4
5
6
docker ps

docker port nginx-custom

docker network ls
docker network inspect bridge

Permission Issues

1
2
3
sudo chown -R $USER:$USER ~/docker-project

docker exec nginx-custom whoami

Kesimpulan

Implementasi NGINX dalam container Docker pada AWS EC2 memberikan fondasi yang solid untuk deployment aplikasi web yang scalable dan maintainable. Eksperimen ini mendemonstrasikan:

  1. Isolation dan Portability: Containerization memastikan konsistensi environment across different stages
  2. Resource Efficiency: Docker containers menggunakan resources lebih efisien dibanding traditional virtualization
  3. Rapid Deployment: Docker images memungkinkan quick provisioning dan scaling
  4. DevOps Integration: Dockerfile memfasilitasi CI/CD pipeline implementation

Untuk project production, pertimbangkan menggunakan Amazon ECS atau EKS untuk container orchestration yang lebih robust, serta implementasi security best practices yang komprehensif.

Dengan menguasai fundamental Docker pada AWS EC2 ini, Anda telah membangun foundation yang kuat untuk mengeksplorasi advanced container technologies dan cloud-native application development.

Pranala Menarik

  • Docker Compose
  • Docker Command Reference

Referensi

  • Docker Official Documentation
  • AWS EC2 User Guide
Cloud Computing, AWS
cloud computing
This content is licensed under CC BY 4.0 by the author.
Share
External Links
  • RicalNet

Table of Contents

Related Articles

Sep 21, 2025

Panduan Implementasi Application Load Balancer AWS dan Integrasi Auto Scaling

Pelajari cara implementasi Application Load Balancer (ALB) AWS secara step-by-step. Panduan komprehensif mencakup konfigurasi EC2, setup Target Group, monitoring health check, hingga integrasi Auto...

Sep 21, 2025

Amazon S3

Panduan langkah demi langkah untuk memulai menggunakan Amazon Simple Storage Service (S3).

Sep 20, 2025

Security Group dalam Cloud Computing

Pelajari cara mengonfigurasi Security Group di AWS EC2 sebagai firewall virtual untuk mengontrol lalu lintas masuk dan keluar instance.

DynamicArchive

Bypass Xiaomi Bootloader Restrictions

RicalNet © Some rights reserved

Last updated on November 30, 2025

Loading...

Privacy Policy • Source code

Trending Tags

cloud computing linux privacy docker self-hosted cryptography telecommunications android cisco packet tracer tools

An updated version of this content is available