Salah satu beban kerja Docker yang paling umum adalah menggunakannya untuk menampung server web seperti NGINX dan Apache untuk menjalankan armada pengiriman konten berkinerja tinggi yang dapat dengan mudah diskalakan dan dikelola secara otomatis. Kami akan menunjukkan cara menyiapkannya dengan NGINX.
Menyiapkan NGINX Di Dalam Docker
Docker adalah platform containerization, yang digunakan untuk mengemas aplikasi Anda dan semua kodenya menjadi satu image container yang mudah dikelola. Proses melakukan ini sangat mirip dengan cara Anda menyiapkan server baru—wadahnya adalah batu tulis kosong, jadi Anda harus menginstal dependensi, membuat kode, menyalin artefak build, dan menyalinnya. konfigurasi apapun. Untungnya, Anda tidak perlu terlalu mengotomatisasi. NGINX sudah memiliki wadah Docker yang tersedia untuk umum, yang dapat Anda gunakan sebagai titik awal untuk aplikasi Anda.
Tentu saja, tergantung pada aplikasi yang Anda kemas, ini bisa sedikit lebih terlibat. Jika Anda menggunakan CMS seperti WordPress, Anda mungkin perlu memiliki database eksternal, karena container tidak dirancang untuk bertahan. Tempat yang baik untuk memulai WordPress, khususnya, adalah wadah Docker WordPress.
Untuk tujuan memiliki sesuatu yang sedikit lebih terlibat daripada halaman web Hello World sederhana, kami akan membuat direktori proyek baru dan menginisialisasi aplikasi dasar Vue.js. Konfigurasi Anda akan berbeda bergantung pada konten yang Anda sajikan, tetapi gagasan umumnya sama.
Di root proyek Anda, buat file baru dengan nama Dockerfile
tanpa ekstensi. Ini akan bertindak sebagai konfigurasi build. Secara default, wadah kosong, dan hanya menyertakan aplikasi dan dependensi yang disertakan dengan gambar dasar. Anda perlu menyalin kode aplikasi Anda; jika Anda hanya menyajikan konten statis, ini mudah, tetapi jika Anda bekerja dengan aplikasi sisi server seperti WordPress, Anda mungkin perlu menginstal dependensi tambahan.
Konfigurasi berikut ini cukup mendasar. Karena ini adalah aplikasi node, kita perlu menjalankan npm run build
untuk mendapatkan build siap distribusi. Kita dapat menangani ini semua di Dockerfile, dengan menyiapkan build container dua bagian:
FROM node:latest as build-stage WORKDIR /src COPY package*.json ./ RUN npm install COPY ./ . RUN npm run build FROM nginx as production-stage RUN mkdir /src COPY --from=build-stage /src/dist /src COPY nginx.conf /etc/nginx/nginx.conf
Baris pertama FROM
perintah menarik node
container dari Docker Hub dan membuat container baru bernama build-stage
. cd
berikutnya ke direktori itu, dan salin ke package.json
. Kemudian, menjalankan npm install
, lalu menyalin kode aplikasi dan memulai proses pembuatan. Jika aplikasi Anda perlu dibuat dari sumber, Anda dapat melakukan sesuatu yang mirip dengan ini.
Status berikutnya menarik nginx
container untuk dijadikan sebagai tempat produksi. Itu membuat src
direktori dan kemudian menyalin, dari build-stage
wadah, /src/dist/
folder yang berisi artefak build, ke /src
folder wadah produksi. Kemudian menyalin melalui file konfigurasi NGINX.
Anda juga ingin membuat file baru bernama .dockerignore
, untuk menyuruhnya mengabaikan node_modules
serta artefak bangunan apa pun dari bangunan lokal.
**/node_modules **/dist
Dockerfile mereferensikan sebuah nginx.conf
, yang juga harus Anda buat. Jika Anda menjalankan konfigurasi yang lebih kompleks dengan beberapa konfigurasi di /sites-available
, Anda mungkin ingin membuat folder baru untuk konfigurasi NGINX Anda, dan menyalinnya.
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root /src; index index.html; try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }
Ini hanya server web HTTP. Cara paling sederhana untuk menyiapkan HTTPS adalah dengan menjalankan certbot LetsEncrypt secara lokal, dan menyalin sertifikat dari /etc/letsencrypt/live/example.com/fullchain.pem
ke dalam wadah produksi. Sertifikat ini berlaku selama 90 hari, jadi Anda harus memperbaruinya secara berkala. Anda dapat mengotomatiskan ini sebagai bagian dari proses pembuatan container.
Setelah semuanya beres, Anda dapat menjalankan build Docker:
docker build . -t my-app
Ini akan membangun wadah sebagai my-app
, setelah itu Anda bebas memberi tag dan mengirimkannya ke ECS atau registri penampung untuk penerapan akhirnya. Anda harus, tentu saja, mengujinya secara lokal terlebih dahulu dengan docker run
mengikat localhost:8080
ke port 80 dari instance NGINX:
docker run -d -p 8080:80 my-app
Setelah Anda memiliki gambar bawaan, menerapkannya dalam produksi cukup sederhana. Anda dapat membaca panduan kami untuk menyiapkan penerapan container penskalaan otomatis di AWS ECS untuk mempelajari lebih lanjut, atau baca panduan kami tentang menyiapkan pipeline CI/CD dengan container untuk menangani build dan penerapan otomatis.
TERKAIT: Apa itu File PEM dan Bagaimana Cara Menggunakannya?