GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menjalankan NGINX Inside Docker (untuk Penskalaan Otomatis yang Mudah)

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?


Docker
  1. Cara Menjalankan Nginx dalam Wadah Docker:Panduan Langkah demi Langkah

  2. Bagaimana Cara Menjalankan Program Di Dalam Wadah Docker?

  3. Cara Menjalankan Perintah di Running Docker Container

  1. Cara Menyebarkan Layanan Mikro dengan Docker

  2. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  3. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  1. Cara Menjalankan MySQL di Docker Container:Panduan Sederhana dan Mudah Diikuti

  2. Cara Menjalankan MySQL Dalam Wadah Docker

  3. Cara Menginstal, Menjalankan, dan Menghapus Aplikasi di Dalam Wadah Docker – Bagian 2