Aurreko artikuluan ikusten denez, proiektu ezberdinekin lan egin nuen. Talde berri batean lehenengo egunak bide beretik joan ohi dira: backennder-a nire aurrean esertzen da eta aplikazioa instalatzeko eta zabaltzeko urrats magikoak egiten ditu. Docker ezinbestekoa da front-end garatzaileentzat, zeren. Backend-a askotan PHP/Java/Python/C# pila ugaritan idazten da eta aurrealdeak ez du atzealdea desbideratu beharrik dena instalatzeko eta zabaltzeko. Leku batean bakarrik ikusi nuen Docker-Jenkins mordoa hedapen garden batekin, erregistroekin, autotestekin izorratuta.
Artikulu zehatz asko idatzi dira dockerri buruz. Artikulu hau VueJS / Vue Router erabiliz orrialde bakarreko aplikazio bat zabaltzen zentratuko da, zerbitzariaren zatia NodeJS-ekin RESTful API moduan eta MongoDB datu-base gisa erabiltzen da. Docker Compose hainbat edukiontzi aplikazio deskribatzeko eta exekutatzeko erabiltzen da.
Zergatik behar duzu Docker
Docker-ek aplikazio bat zabaltzeko prozesua automatizatzeko aukera ematen du. Garatzaileak jada ez du bere kabuz programak instalatu behar, bere makinan bertsio bateraezintasunari aurre egin behar. Nahikoa da Docker instalatzea eta kontsolan 1-2 komandoak idaztea. Erosoena Linux-en egitea da.
Nola hasi
Ezarri
Karpeta egitura
Bezero eta zerbitzari aplikazioetarako 2 karpeta sortzen ditugu. .yml luzapena duen fitxategia konfigurazio bat da Docker Composebertan aplikazioen edukiontziak definitu eta lotzen diren.
docker-compose.yml:
version: "3"
services:
mongo:
container_name: mongo
hostname: mongo
image: mongo
ports:
- "27017:27017"
server:
build: server/
#command: node ./server.js #Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ CMD ΠΈΠ· Dockerfile Π² /server
ports:
- "3000:3000"
links:
- mongo
client:
build: client/
#command: http-server ./dist #Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ CMD ΠΈΠ· Dockerfile Π² /client
network_mode: host
ports:
- "8089:8089"
depends_on:
- server
Docker-en 3 zerbitzu sortzen ditugu: NodeJS, MongoDB eta Vue-n estatikorako. Gehitu da bezeroa zerbitzariarekin konektatzeko zerbitzariaren araberakoa da. MongoDB zerbitzariaren APIarekin lotzeko, erabili estekak mongo. Zerbitzaria, bezeroa, mongo dira zerbitzuen izenak.
VueJS bezeroa
Karpetan /bezeroa aplikazioa VueJS-en dago. Sortutako aplikazioa
FROM node:10
WORKDIR /client
COPY ./package*.json ./
RUN npm install
RUN npm install -g http-server
COPY . .
RUN npm run build
EXPOSE 8081
CMD ["npm", "test:dev"]
Kontuan izan package.json proiektuko gainerako fitxategietatik bereizita kopiatzen eta instalatzen dela. Hau errendimendurako egiten da, /node_modules karpetaren edukia berreraikitzean cachean gordetzeko. Komando-lerro bakoitza bereizita gordetzen da.
Amaieran, edukiontzia abiarazten denean, komandoa exekutatzen da npm run dev
. Komando hau package.json-en deskribatzen da:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
Karpeta batetik fitxategiak exekutatzeko / dist, globalki ezarrita http-server
, eta dev-dependencies paketean spa-http-server
Vue Router-ek behar bezala funtziona dezan. --push-state banderak index.html-ra birbideratzen du. 1 segundoko balioa duen -c bandera gehitu zaio http-zerbitzaria ez zituen script-ak cacheatu. Hau proba adibide bat da, benetako proiektu batean hobe da nginx erabiltzea.
Sortu eremu bat Vuex dendan apiHost: 'http://localhost:3000'
, non NodeJS Api ataka idazten den. Bezeroaren zatia prest dago. Orain bezeroaren backend-era egindako eskaera guztiak url honetara doaz.
NodeJS zerbitzariaren APIa
Karpetan /server
sortu zerbitzaria.js eta Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Π zerbitzaria.js adierazi url datu-baserako const url = 'mongodb://mongo:27017/';
. Bezeroaren domeinuen arteko eskaerak onartzen ditugu:
const clientUrl = 'http://localhost:8081';
const corsOptions = {
origin: clientUrl,
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
};
app.use(cors());
app.all('/*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', clientUrl);
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});
app.get('/getProducts', cors(corsOptions), (req, res) => {
products.getContent
.then(data => res.json(data), err => res.json(err));
});
app.get('/getUsers', cors(corsOptions), (req, res) => {
db.getUsers()
.then(data => res.json(data), err => res.json(err));
});
Ondorioa
Orain joan proiektuaren direktoriora eta exekutatu docker-compose build
irudigintzarako eta docker-compose up
edukiontziak martxan jartzeko. Komandoak 3 edukiontzi altxatuko ditu: zerbitzari, bezero, mongo. NodeJS zerbitzari baterako, bero-berrekarga konfigura dezakezu erabiltzailearen karpetara lotuz. Eta bezeroa garatzen ari da lokalean exekutatzeko, birkarga beroarekin, bereizita zerbitzaria ΠΈ mongo. Aparteko zerbitzu bat hasteko, bere izena zehaztu besterik ez dago docker-compose up client
. Ez ahaztu batzuetan egitea prune
eta edukiontziak (edukiontziak), sareak (sareak) eta irudiak (irudiak) kentzea baliabideak askatzeko.
Kode osoa ikus dezakezu
Iturria: www.habr.com