Vaihe 1: Luo yksinkertainen sovellus
Vaihe 2: Luo Docker-säiliöt
Vaihe 3: Määritä Nginx
Vaihe 4: Ota sovellus käyttöön
Kun käytät verkkosovellusta, haluat yleensä saada kaiken irti resursseistasi ilman, että sinun tarvitsee muuntaa ohjelmistoasi monisäikeisten tai monimutkaisten tapahtumasilmukoiden käyttöön. Docker tarjoaa kuitenkin yksinkertaisen tavan tasapainottaa sovelluksesi sisäisesti, jotta saat parhaan hyödyn palvelinresursseista. Tämä artikkeli näyttää, kuinka Nginxiä käytetään verkkosovelluksesi kuormituksen tasapainottamiseen käyttämällä Dockeria CentOS:ssä.
Vaihe 1: Luo yksinkertainen sovellus
Käytämme ruostetta rakentaaksemme tämän yksinkertaisen sovelluksen. Olettaen, että ruoste on asennettu, suorita cargo new webapp –bin
. Onnistuessasi näet hakemiston nimeltä webapp
. Sisällä webapp
, näet tiedoston nimeltä Cargo.toml
. Liitä siihen seuraavat rivit:
[dependencies.iron]
version = "*"
src/main.rs
Poista seuraavaksi tiedoston sisältä kaikki ja täytä se seuraavilla:
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();
}
Huomautus: Älä muuta IP-osoitetta sovelluksen sisällä. Tämä on määritetty niin, että Docker voi kuunnella sovellustasi.
Kun olet valmis, käännä sovellus suorittamalla cargo build –release
. Palvelimestasi riippuen se voi kestää muutaman minuutin. Jos virheitä ei ole, testaa sovellus seuraavasti:
- Juokse
target/release/webapp
.
- Siirry
http://0.0.0.0:3000/
selaimessasi kohtaan. Korvaa 0.0.0.0
palvelimesi IP-osoite.
Jos kaikki toimi oikein, näet sivulla "Hei Vultr :)".
Vaihe 2: Luo Docker-säiliöt
Luo Dockerfile
ja täytä se seuraavilla:
FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp
Tallenna tiedosto. Luo sitten tiedosto nimeltä deploy.sh
ja täytä se seuraavalla:
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
Kun suoritat tämän skriptin, se rakentaa kuvan ja ottaa käyttöön säilön määrittämäsi määrän perusteella (oletus on 5). Jos säilö on olemassa, se tappaa ja poistaa sen rekisteristä ennen kuin se otetaan uudelleen käyttöön.
Luo nyt Nginx-määritystiedosto ja täytä se seuraavilla:
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;
}
}
Korvaa 0.0.0.0
palvelimesi IP-osoite.
Käynnistä Nginx uudelleen tekemällä systemctl restart nginx
. Korjaa mahdolliset virheet ja siirry sitten seuraavaan vaiheeseen.
Vaihe 4: Ota sovellus käyttöön
Ota sovellus käyttöön suorittamalla bash ./deploy.sh
.
Voit tarkistaa sovelluksesi tilan painamalla docker ps
- luodaan 5 kuvaa, jotka alkavat webapp
. Nyt siirtymällä http://0.0.0.0:3000/
selaimessasi, näet "Hei, Vultr :)" viesti uudelleen.
Eli mitä eroa tällä tarkalleen ottaen on?
Jos suoritat benchmark-testin kuormituksen tasapainottimen kokoonpanoa vastaan, huomaat, että enemmän palvelinresurssejasi käytetään, mikä on mitä haluat, varsinkin jos sovelluksesi on rakennettu kielille, kuten Node, jossa se tavallisesti olisi yksisäikeinen. Jos joudut joskus päivittämään sovelluksesi, voit tehdä sen ja suorittaa deploy.sh
sen uudelleen rakentaaksesi kuvan uudelleen ja ottaaksesi säilösi käyttöön.