Kif tista' tifhem mill-artiklu preċedenti, ħdimt fuq proġetti differenti. L-ewwel jiem f'tim ġdid normalment imorru bl-istess mod: il-backender joqgħod miegħi u jwettaq azzjonijiet maġiċi biex jinstalla u juża l-applikazzjoni. Docker huwa indispensabbli għall-iżviluppaturi front-end għaliex... Il-backend spiss jinkiteb f'firxa wiesgħa ta 'munzelli PHP/Java/Python/C#, u l-faċċata m'għandhiex għalfejn tfixkel il-backend kull darba biex tinstalla u tiskjera kollox. F'post wieħed biss rajt kombinazzjoni Docker-Jenkins bi skjerament trasparenti, zkuk, u testijiet awtomatizzati.
Ħafna artikli dettaljati nkitbu dwar Docker. Dan l-artikolu se jitkellem dwar l-iskjerament ta 'Applikazzjoni ta' Paġna Unika bl-użu ta 'VueJS/Vue Router, il-parti tas-server hija fil-forma ta' API RESTful b'NodeJS, u MongoDB jintuża bħala database. Docker Compose jintuża biex jiddefinixxi u jmexxi applikazzjonijiet ta' kontenituri multipli.
Għaliex Docker huwa meħtieġ
Docker jippermettilek li awtomatizza l-proċess tal-iskjerament ta' applikazzjoni. L-iżviluppatur m'għadux jeħtieġ li jinstalla programmi waħdu jew jittratta l-inkompatibilità tal-verżjoni fuq il-magna tiegħu. Kull ma trid tagħmel hu li tinstalla Docker u ttajpja 1-2 kmandi fil-console. L-aktar mod konvenjenti biex tagħmel dan huwa fuq Linux.
Kif tibda
Installa
Struttura tal-folder
Noħolqu 2 folders għall-applikazzjonijiet tal-klijenti u tas-server. Fajl bl-estensjoni .yml huwa konfigurazzjoni Docker Ikteb, fejn il-kontenituri tal-applikazzjoni huma definiti u assoċjati.
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
Noħolqu 3 servizzi f'Docker: għal NodeJS, MongoDB u għal dawk statiċi f'Vue. Miżjud biex jgħaqqad il-klijent mas-server jiddependi fuq is-server. Biex tgħaqqad MongoDB mas-server API, uża links mongo. Server, klijent, mongo - ismijiet tas-servizzi.
Klijent VueJS
Fil-folder /klijent L-applikazzjoni hija bbażata fuq VueJS. L-applikazzjoni ġiet maħluqa bl-użu
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"]
Jekk jogħġbok innota li package.json huwa kkupjat u installat separatament mill-bqija tal-fajls tal-proġett. Dan isir għall-prestazzjoni, sabiex il-kontenut tal-folder /node_modules jiġi miżmum fil-cache meta jerġa' jinbena. Kull linja ta 'kmand hija cached separatament.
Fl-aħħarnett, meta jibda l-kontenitur, il-kmand jiġi esegwit npm run dev
. Dan il-kmand huwa deskritt f'package.json:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
Biex tmexxi fajls minn folder /dist, installat globalment http-server
, u fid-dev-dipendenzi il-pakkett spa-http-server
sabiex Vue Router jaħdem sew. Il-bandiera --push-state tidderieġi mill-ġdid lejn index.html. Il-bandiera -c b'valur ta' sekonda ġiet miżjuda magħha http-server ma cache skripts. Dan huwa eżempju tat-test fuq proġett reali huwa aħjar li tuża nginx.
Fil-maħżen Vuex noħolqu field apiHost: 'http://localhost:3000'
, fejn il-port NodeJS Api huwa rreġistrat. Il-parti tal-klijent hija lesta. Issa t-talbiet kollha mill-klijent għal wara jmorru għal din l-url.
NodeJS server API
Fil-folder /server
toħloq server.js u Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
В server.js indikat url għal database const url = 'mongodb://mongo:27017/';
. Tippermetti talbiet trans-dominju mill-klijent:
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));
});
Konklużjoni
Issa ejja mmorru fid-direttorju tal-proġett u mexxi docker-compose build
għall-bini ta’ stampi u docker-compose up
biex imexxu kontenituri. It-tim se jerfa' 3 kontenituri: server, klijent, mongo. Għal server NodeJS, tista' tikkonfigura hot-reload billi tgħaqqadha mal-folder tal-utent. U l-klijent taħt żvilupp għandu jiġi mniedi lokalment b'reload sħun, li jaħdem separatament servers и mongo. Biex tibda servizz separat, speċifika ismu docker-compose up client
. Tinsiex tagħmel dan kultant prune
u tħassar kontenituri, netwerks, u immaġini biex tillibera r-riżorsi.
Tista 'tara l-kodiċi sħiħ
Sors: www.habr.com