Krok 1: Vytvorte jednoduchú aplikáciu
Krok 2: Vytvorte kontajnery Docker
Krok 3: Nakonfigurujte Nginx
Krok 4: Nasaďte aplikáciu
Pri spustení webovej aplikácie zvyčajne chcete vyťažiť maximum zo svojich zdrojov bez toho, aby ste museli konvertovať softvér na používanie viacerých vlákien alebo zložitých cyklov udalostí. Docker však poskytuje jednoduchý spôsob, ako interne vyvážiť zaťaženie vašej aplikácie, aby ste čo najlepšie využili prostriedky servera. Tento článok vám ukáže, ako používať Nginx na vyrovnávanie zaťaženia vašej webovej aplikácie pomocou Docker na CentOS.
Krok 1: Vytvorte jednoduchú aplikáciu
Na vytvorenie tejto jednoduchej aplikácie použijeme hrdzu. Za predpokladu, že máte nainštalovanú hrdzu, spustite cargo new webapp –bin
. Po úspechu uvidíte adresár s názvom webapp
. Vo vnútri webapp
uvidíte súbor s názvom Cargo.toml
. Pripojte k nemu nasledujúce riadky:
[dependencies.iron]
version = "*"
Ďalej v src/main.rs
súbore odstráňte všetko a naplňte ho nasledujúcim:
extern crate iron;
use iron::prelude::*;
use iron::status;
fn main() {
Iron::new(|_: &mut Request| {
Ok(Response::with((status::Ok, "Hello Vultr :)")))
}).http("0.0.0.0:3000").unwrap();
}
Poznámka: Nemeňte IP v rámci aplikácie. Toto je nakonfigurované tak, aby Docker mohol počúvať vašu aplikáciu.
Po dokončení skompilujte aplikáciu spustením cargo build –release
. V závislosti od vášho servera to môže trvať niekoľko minút. Ak sa nevyskytnú žiadne chyby, otestujte aplikáciu podľa týchto krokov:
- Bežať
target/release/webapp
.
http://0.0.0.0:3000/
Vo svojom prehliadači prejdite na . Nahraďte 0.0.0.0
adresu IP vášho servera.
Ak všetko fungovalo správne, na stránke uvidíte „Ahoj Vultr :)“.
Krok 2: Vytvorte kontajnery Docker
Vytvorte a Dockerfile
a naplňte ho nasledujúcim:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Uložte súbor. Potom vytvorte súbor s názvom deploy.sh
a naplňte ho nasledujúcim:
DEFAULT_PORT=45710
APP_PORT=3000
DEPLOY=5
NAME="webapp"
docker build -t webapp:example .
for ((i=0; i<DEPLOY; i++)); do
docker kill $NAME$i ; docker rm $NAME$i
docker run --name $NAME$i -p 127.0.0.1:$(((i * 1000) + DEFAULT_PORT)):$APP_PORT -d webapp:example
done
Keď spustíte tento skript, vytvorí obrázok a nasadí kontajner na základe množstva, ktoré ste nastavili (predvolená hodnota je 5). Ak kontajner existuje, pred opätovným nasadením ho zabije a odstráni z registra.
Teraz vytvorte konfiguračný súbor Nginx a naplňte ho nasledujúcim:
upstream application {
server localhost:45710;
server localhost:46710;
server localhost:47710;
server localhost:48710;
server localhost:49710;
}
server {
listen 0.0.0.0:80;
location / {
expires 1w;
proxy_pass http://application;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
Nahraďte 0.0.0.0
adresu IP vášho servera.
Reštartujte Nginx vykonaním systemctl restart nginx
. Vyriešte všetky chyby a potom pokračujte ďalším krokom.
Krok 4: Nasaďte aplikáciu
Nasaďte aplikáciu spustením bash ./deploy.sh
.
Stav svojej aplikácie môžete skontrolovať pomocou docker ps
– vytvorí sa 5 obrázkov, ktoré začínajú na webapp
. Teraz prejdite na http://0.0.0.0:3000/
vo svojom prehliadači a znova sa vám zobrazí správa „Ahoj, Vultr :)“.
Takže, aký je v tom presne rozdiel?
Ak spustíte benchmarkový test s konfiguráciou nástroja na vyrovnávanie zaťaženia, všimli by ste si, že sa používa viac zdrojov vášho servera, čo by ste chceli, najmä ak je vaša aplikácia postavená v jazykoch, ako je Node, kde by bola normálne jednovláknová. Ak budete niekedy potrebovať inovovať svoju aplikáciu, môžete to urobiť a znova spustiť, deploy.sh
aby ste znova vytvorili obraz a nasadili svoje kontajnery.