1. darbība. Izveidojiet vienkāršu lietojumprogrammu
2. darbība. Izveidojiet Docker konteinerus
3. darbība: konfigurējiet Nginx
4. darbība. Izvietojiet lietojumprogrammu
Palaižot tīmekļa lietojumprogrammu, jūs parasti vēlaties maksimāli izmantot savus resursus, nepārvēršot programmatūru, lai izmantotu vairākpavedienu vai sarežģītas notikumu cilpas. Tomēr Docker nodrošina vienkāršu veidu, kā iekšēji līdzsvarot lietojumprogrammu, lai maksimāli izmantotu servera resursus. Šajā rakstā tiks parādīts, kā izmantot Nginx, lai līdzsvarotu tīmekļa lietojumprogrammu, izmantojot Docker uz CentOS.
1. darbība. Izveidojiet vienkāršu lietojumprogrammu
Lai izveidotu šo vienkāršo lietojumprogrammu, mēs izmantosim rūsu. Pieņemot, ka ir instalēta rūsa, palaidiet cargo new webapp –bin
. Veiksmes gadījumā jūs redzēsit direktoriju ar nosaukumu webapp
. Iekšpusē webapp
jūs redzēsit failu ar nosaukumu Cargo.toml
. Pievienojiet tam šādas rindas:
[dependencies.iron]
version = "*"
Pēc tam src/main.rs
failā noņemiet visu un aizpildiet to ar šādu informāciju:
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();
}
Piezīme: nemainiet IP lietojumprogrammā. Tas ir konfigurēts tā, lai Docker varētu klausīties jūsu lietojumprogrammu.
Kad esat pabeidzis, apkopojiet lietojumprogrammu, izpildot cargo build –release
. Atkarībā no jūsu servera tas var ilgt dažas minūtes. Ja kļūdu nav, pārbaudiet lietojumprogrammu, veicot šādas darbības:
- Skrien
target/release/webapp
.
http://0.0.0.0:3000/
Pārlūkprogrammā dodieties uz . Aizstāt 0.0.0.0
ar sava servera IP adresi.
Ja viss darbojās pareizi, lapā redzēsiet "Sveiks Vultr :)".
2. darbība. Izveidojiet Docker konteinerus
Izveidojiet Dockerfile
un aizpildiet to ar šādu:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Saglabājiet failu. Pēc tam izveidojiet failu ar nosaukumu deploy.sh
un aizpildiet to ar šādu:
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
Palaižot šo skriptu, tas izveidos attēlu un izvietos konteineru, pamatojoties uz jūsu iestatīto summu (noklusējuma vērtība ir 5). Ja konteiners pastāv, tas iznīcinās un noņems to no reģistra, pirms tas tiks atkārtoti izvietots.
Tagad izveidojiet Nginx konfigurācijas failu un aizpildiet to ar šo:
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;
}
}
Aizstāt 0.0.0.0
ar sava servera IP adresi.
Restartējiet Nginx, veicot systemctl restart nginx
. Atrisiniet visas kļūdas, pēc tam pārejiet pie nākamās darbības.
4. darbība. Izvietojiet lietojumprogrammu
Izvietojiet lietojumprogrammu, palaižot bash ./deploy.sh
.
Jūs varat pārbaudīt savas lietojumprogrammas statusu, izmantojotdocker ps
— tiks izveidoti 5 attēli, kas sākas ar webapp
. Tagad http://0.0.0.0:3000/
pārlūkprogrammā dodieties uz vietni, un jūs atkal redzēsit ziņojumu "Sveiki, Vultr :)".
Tātad, kāda ir atšķirība tieši?
Ja veicat slodzes līdzsvara konfigurācijas etalonpārbaudi, jūs pamanīsit, ka tiek izmantots vairāk jūsu servera resursu, un tas ir tas, ko jūs vēlaties, it īpaši, ja jūsu lietojumprogramma ir veidota tādās valodās kā Node, kur tā parasti būtu viena pavediena. Ja jums kādreiz ir jājaunina lietojumprogramma, varat to izdarīt un atkārtoti palaist lietojumprogrammu, deploy.sh
lai atjaunotu attēlu un izvietotu konteinerus.