1 veiksmas: sukurkite paprastą programą
2 veiksmas: sukurkite „Docker“ konteinerius
3 veiksmas: sukonfigūruokite „Nginx“.
4 veiksmas: įdiekite programą
Kai naudojate žiniatinklio programą, paprastai norite maksimaliai išnaudoti savo išteklius, nereikės konvertuoti programinės įrangos į kelių gijų arba sudėtingas įvykių kilpas. Tačiau „Docker“ suteikia paprastą būdą subalansuoti programos apkrovą viduje, kad maksimaliai išnaudotumėte serverio išteklius. Šiame straipsnyje bus parodyta, kaip naudoti „Nginx“ žiniatinklio programos apkrovos balansui naudojant „Docker“ sistemoje „CentOS“.
1 veiksmas: sukurkite paprastą programą
Kurdami šią paprastą programą naudosime rūdis. Darant prielaidą, kad įdiegta rūdžių, paleiskite cargo new webapp –bin
. Kai pasiseks, pamatysite katalogą pavadinimu webapp
. Viduje webapp
pamatysite failą pavadinimu Cargo.toml
. Prie jo pridėkite šias eilutes:
[dependencies.iron]
version = "*"
Tada src/main.rs
failo viduje pašalinkite viską ir užpildykite jį taip:
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();
}
Pastaba: nekeiskite IP programoje. Tai sukonfigūruota taip, kad „Docker“ galėtų klausytis jūsų programos.
Baigę sukompiliuokite programą vykdydami cargo build –release
. Priklausomai nuo jūsų serverio, tai gali užtrukti kelias minutes. Jei klaidų nėra, išbandykite programą atlikdami šiuos veiksmus:
- Paleisti
target/release/webapp
.
http://0.0.0.0:3000/
Naršyklėje eikite į . Pakeiskite 0.0.0.0
savo serverio IP adresu.
Jei viskas veikė tinkamai, puslapyje pamatysite "Labas Vultr :)".
2 veiksmas: sukurkite „Docker“ konteinerius
Sukurkite Dockerfile
ir užpildykite jį šiais elementais:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Išsaugokite failą. Tada sukurkite failą, pavadintą deploy.sh
ir užpildykite jį taip:
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
Kai paleisite šį scenarijų, jis sukurs vaizdą ir įdiegs konteinerį pagal jūsų nustatytą kiekį (numatytasis yra 5). Jei konteineris yra, jis bus nužudytas ir pašalintas iš registro prieš vėl įdiegiant.
Dabar sukurkite Nginx konfigūracijos failą ir užpildykite jį taip:
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;
}
}
Pakeiskite 0.0.0.0
savo serverio IP adresu.
Iš naujo paleiskite Nginx atlikdami systemctl restart nginx
. Išspręskite visas klaidas, tada pereikite prie kito veiksmo.
4 veiksmas: įdiekite programą
Įdiekite programą paleisdami bash ./deploy.sh
.
Savo programos būseną galite patikrinti naudodami docker ps
– bus sukurti 5 vaizdai, kurie prasideda webapp
. Dabar http://0.0.0.0:3000/
naršyklėje eikite į ir vėl pamatysite pranešimą „Sveiki, Vultr :)“.
Taigi, koks tiksliai skirtumas?
Jei atliksite apkrovos balansavimo priemonės konfigūracijos lyginamąjį testą, pastebėtumėte, kad naudojama daugiau jūsų serverio išteklių, o to ir norėtumėte, ypač jei jūsų programa sukurta tokiomis kalbomis kaip Node, kur paprastai ji būtų vienos gijos. Jei kada nors reikės atnaujinti programą, galite tai padaryti ir paleisti iš naujo, deploy.sh
kad atkurtumėte vaizdą ir įdiegtumėte konteinerius.