Fel y gallwch ddeall o'r erthygl flaenorol, bûm yn gweithio ar wahanol brosiectau. Mae'r dyddiau cyntaf mewn tîm newydd fel arfer yn mynd yr un ffordd: mae'r backender yn eistedd i lawr gyda mi ac yn perfformio gweithredoedd hudolus i osod a defnyddio'r rhaglen. Mae Docker yn anhepgor i ddatblygwyr pen blaen oherwydd ... Mae'r backend yn aml yn cael ei ysgrifennu mewn ystod eang o staciau PHP/Java/Python/C#, ac nid oes rhaid i'r blaen dynnu sylw'r pen ôl bob tro i osod a defnyddio popeth. Dim ond mewn un lle y gwelais gyfuniad Docker-Jenkins gyda gosodiad tryloyw, logiau, a phrofion awtomataidd.
Mae llawer o erthyglau manwl wedi'u hysgrifennu am Docker. Bydd yr erthygl hon yn sôn am ddefnyddio Cais Tudalen Sengl gan ddefnyddio VueJS / Vue Router, mae rhan y gweinydd ar ffurf API RESTful gyda NodeJS, a defnyddir MongoDB fel cronfa ddata. Defnyddir Docker Compose i ddiffinio a rhedeg cymwysiadau cynhwysydd lluosog.
Pam mae angen Docker
Mae Docker yn caniatáu ichi awtomeiddio'r broses o ddefnyddio cais. Nid oes angen i'r datblygwr bellach osod rhaglenni ar ei ben ei hun na delio ag anghydnawsedd fersiwn ar ei beiriant. Y cyfan sy'n rhaid i chi ei wneud yw gosod Docker a theipio gorchmynion 1-2 i'r consol. Y ffordd fwyaf cyfleus o wneud hyn yw ar Linux.
Dechrau arni
Gosod
Strwythur ffolder
Rydym yn creu 2 ffolder ar gyfer cymwysiadau cleient a gweinydd. Mae ffeil gyda'r estyniad .yml yn config Cyfansoddwr Dociwr, lle mae cynwysyddion cais wedi'u diffinio ac yn gysylltiedig.
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
Rydym yn creu 3 gwasanaeth yn Docker: ar gyfer NodeJS, MongoDB ac ar gyfer rhai statig yn Vue. Ychwanegwyd i gysylltu cleient â gweinydd yn dibynnu ar y gweinydd. I gysylltu MongoDB â'r API gweinydd, defnyddiwch cysylltiadau mongo. Gweinydd, cleient, mongo - enwau gwasanaethau.
cleient VueJS
Yn y ffolder / cleient Mae'r cais yn seiliedig ar VueJS. Crëwyd y cais gan ddefnyddio
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"]
Sylwch fod pack.json yn cael ei gopïo a'i osod ar wahân i weddill ffeiliau'r prosiect. Gwneir hyn ar gyfer perfformiad, fel bod cynnwys y ffolder /node_modules yn cael ei storio wrth adeiladu eto. Mae pob llinell orchymyn yn cael ei storio ar wahân.
Yn olaf, pan fydd y cynhwysydd yn cychwyn, gweithredir y gorchymyn npm run dev
. Disgrifir y gorchymyn hwn yn package.json:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
I redeg ffeiliau o ffolder / pell, gosod yn fyd-eang http-server
, ac mewn dev-ddibyniaethau y pecyn spa-http-server
fel bod Vue Router yn gweithio'n gywir. Mae'r faner --push-state yn ailgyfeirio i index.html. Ychwanegwyd at y faner -c gwerth 1 eiliad http-gweinydd heb storio sgriptiau. Mae hon yn enghraifft brawf; ar brosiect go iawn mae'n well defnyddio nginx.
Yn siop Vuex rydym yn creu cae apiHost: 'http://localhost:3000'
, lle mae porthladd NodeJS Api wedi'i gofrestru. Mae rhan y cleient yn barod. Nawr mae pob cais gan y cleient i'r cefn yn mynd i'r url hwn.
API gweinydd NodeJS
Yn y ffolder /server
creu gweinydd.js a Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
В gweinydd.js wedi'i nodi url ar gyfer cronfa ddata const url = 'mongodb://mongo:27017/';
. Caniatáu ceisiadau traws-barth gan y cleient:
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));
});
Casgliad
Nawr, gadewch i ni fynd i'r cyfeiriadur prosiect a rhedeg docker-compose build
ar gyfer adeiladu delweddau a docker-compose up
i redeg cynwysyddion. Bydd y tîm yn codi 3 cynhwysydd: gweinydd, cleient, mongo. Ar gyfer gweinydd NodeJS, gallwch chi ffurfweddu ail-lwytho poeth trwy ei gysylltu â'r ffolder defnyddiwr. A dylai'r cleient sy'n cael ei ddatblygu gael ei lansio'n lleol gydag ail-lwytho poeth, yn rhedeg ar wahân gweinydd и mongo. I ddechrau gwasanaeth ar wahân, nodwch ei enw docker-compose up client
. Peidiwch ag anghofio ei wneud weithiau prune
a dileu cynwysyddion, rhwydweithiau a delweddau i ryddhau adnoddau.
Gallwch weld y cod llawn
Ffynhonnell: hab.com