Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ǰ¶Ë¸ß¼¶½ø½×£ºÊ¹Óà docker ¸ßЧ²¿ÊðÄãµÄǰ¶ËÓ¦ÓÃ
 
×÷Õߣº shanyue
  4785  次浏览      28
 2020-6-23  
 
±à¼­ÍƼö:
ÎÄÕÂÖ÷Òª½éÉÜÁË ÀûÓþµÏñ»º´æ¡¢CI »·¾³ÏµÄÓÅ»¯¡¢¶à½×¶Î¹¹½¨¡¢Ê¹ÓöÔÏó´æ´¢·þÎñ (OSS)µÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ¾ò½ð£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Docker ±äµÃÔ½À´Ô½Á÷ÐУ¬Ëü¿ÉÒÔÇá±ãÁé»îµØ¸ôÀë»·¾³£¬½øÐÐÀ©ÈÝ£¬ÔËά¹ÜÀí¡£¶ÔÓÚÒµÎñ¿ª·¢Õß¶øÑÔ£¬Ëæ×ųÖÐø¼¯³ÉµÄ·¢Õ¹£¬¶Ô´úÂëÖÊÁ¿¼°¿ìËÙµü´úµÄÒªÇóÒ²Ô½À´Ô½¸ß¡£

¶ÔÓÚǰ¶Ë¶øÑÔ£¬ÔÚ CI »·¾³ÖÐʹÓÃÒ²¸üÈÝÒ×¼¯³É¿ª·¢£¬²âÊÔÓ벿Êð¡£±ÈÈç¿ÉÒÔΪÁ÷Ë®Ïß(Pipeline)ÉèÖà Lint/Test/Security/Audit/Deploy/Artifact µÈÈÎÎñ£¬¸üºÃµØ°Ñ¿ØÏîÄ¿ÖÊÁ¿¡£

ÏÖÔÚÎÞÂÛÊÇǰ¶Ë£¬ºó¶Ë»¹ÊÇÔËά£¬¶¼ºÜÇ¿µ÷ devops µÄÀíÄ½ÓÏÂÀ´ÎÒ½«»áдһϵÁйØÓÚ devops ÔÚǰ¶ËÖÐÓ¦ÓõÄÎÄÕ¡£Äã¿ÉÒÔÔÚÎҵIJ©¿Í¶©Ôĸü¶àÎÄÕ¡£

ÕâÀォ½éÉÜÈçºÎʹÓà Docker ²¿Êðǰ¶ËÓ¦Óã¬Ç§ÀïÖ®ÐУ¬Ê¼ÓÚ×ãÏ¡£Ê¼ÓÚ×ãϵÄÒâ˼¾ÍÊÇ£¬ÏÈÈÃËüÄܹ»ÅÜÆðÀ´¡£

ÏÈÈÃËüÅÜÆðÀ´

1.Ê×ÏÈ£¬¼òµ¥½éÉÜÒ»ÏÂÒ»¸öµäÐ͵Äǰ¶ËÓ¦Óò¿ÊðÁ÷³Ì

2.npm install, °²×°ÒÀÀµ

3.npm run build£¬±àÒ룬´ò°ü£¬Éú³É¾²Ì¬×ÊÔ´

·þÎñ»¯¾²Ì¬×ÊÔ´£¬Èç nginx

½éÉÜÍ겿ÊðÁ÷³Ìºó£¬¼òµ¥Ð´Ò»¸ö Dockerfile

FROM node:10-alpine
# ´ú±íÉú²ú»·¾³
ENV PROJECT_ENV production
# Ðí¶à package »á¸ù¾Ý´Ë»·¾³±äÁ¿£¬×ö³ö²»Í¬µÄÐÐΪ
# ÁíÍ⣬ÔÚ webpack Öдò°üÒ²»á¸ù¾Ý´Ë»·¾³±äÁ¿×ö³öÓÅ»¯£¬µ«ÊÇ create-react-app ÔÚ´ò°üʱ»áдËÀ¸Ã»·¾³±äÁ¿
ENV NODE_ENV production
WORKDIR /code
ADD . /code
RUN npm install && npm run build && npm install -g http-server
EXPOSE 80
CMD http-server ./public -p 80

 

ÏÖÔÚÕâ¸öǰ¶Ë·þÎñÒѾ­ÅÜÆðÀ´ÁË£¬½ÓÏÂÀ´Äã¿ÉÒÔÍê³É²¿ÊðµÄÆäËü½×¶ÎÁË¡£

Ò»°ãÇé¿öÏ£¬ÒÔϾͳÉÁËÔËάµÄ¹¤×÷ÁË£¬²»¹ý£¬ÍØÕ¹×Ô¼ºµÄ֪ʶ±ß½ç×ÜÊÇû´íµÄ¡£ÆäËü½×¶Î½éÉÜÈçÏÂ

ʹÓà nginx »òÕß traefik ×ö·´Ïò´úÀí¡£ÔÚÎÒÄÚ²¿¼¯ÈºÖÐʹÓÃÁË traefik£¬Ïê¼û traefik ¼òÒ×ÈëÃÅ

ʹÓà kubernetes »òÕß docker compose ×öÈÝÆ÷±àÅÅ¡£ÔÚÎÒÄÚ²¿¼¯ÈºÖÐʹÓÃÁË compose£¬Ïê¼û docker compose ¼òÒ×ÈëÃÅ

ʹÓà gitlab ci£¬drone ci »òÕß github actions µÈ×ö CI/CD ×Ô¶¯²¿Êð¡£ÔÚÎÒÄÚ²¿¼¯ÈºÖÐʹÓÃÁË github actions£¬Ïê¼û github actions ¼òÒ×ÈëÃÅ

Õâʱ¾µÏñ´æÔÚÁ½¸öÎÊÌ⣬µ¼ÖÂÿ´Î²¿Êðʱ¼ä¹ý³¤£¬²»ÀûÓÚ²úÆ·µÄ¿ìËÙ½»¸¶£¬Ã»ÓпìËÙ½»¸¶£¬Ò²¾ÍûÓÐÃô½Ý¿ª·¢ (Agile)

¹¹½¨¾µÏñʱ¼ä¹ý³¤

¹¹½¨¾µÏñ´óС¹ý´ó£¬¶àʱÉõÖÁ 1G+

ÀûÓþµÏñ»º´æ

ÎÒÃÇ×¢Òâµ½£¬Ïà¶ÔÓÚÏîÄ¿µÄÔ´ÎļþÀ´½²£¬package.json ÊÇÏà¶ÔÎȶ¨µÄ¡£Èç¹ûûÓÐÐµİ²×°°üÐèÒªÏÂÔØ£¬ÔòÔٴι¹½¨¾µÏñʱ£¬ÎÞÐèÖØÐ¹¹½¨ÒÀÀµ¡£Ôò¿ÉÒÔÔÚ npm install ÉϽÚʡһ°ëµÄʱ¼ä¡£

¶ÔÓÚ ADD À´½²£¬Èç¹ûÐèÒªÌí¼ÓµÄÎļþÄÚÈÝµÄ checksum ûÓз¢Éú±ä»¯£¬Ôò¿ÉÒÔÀûÓûº´æ¡£°Ñ package.json/package-lock.json ÓëÔ´Îļþ·Ö¸ô¿ªÐ´Èë¾µÏñÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ¡£Ä¿Ç°£¬Èç¹ûûÓÐÐµİ²×°°ü¸üÐµĻ°£¬¿ÉÒÔ½Úʡһ°ëʱ¼ä

FROM node:10-alpine
ENV PROJECT_ENV production
ENV NODE_ENV production
# http-server ²»±ä¶¯Ò²¿ÉÒÔÀûÓûº´æ
RUN npm install -g http-server
WORKDIR /code
# Ê×´ÎÌí¼Ó´ËÁ½¸öÎļþ£¬³ä·ÖÀûÓûº´æ
ADD package.json package-lock.json /code
RUN npm install --production
ADD . /code
RUN npm run build
EXPOSE 80
CMD http-server ./public -p 80

 

¹ØÓÚÀûÓûº´æÓиü¶àϸ½Ú£¬ÐèÒªÌØ±ð×¢Òâһϡ£Èç RUN git clone <repo>£¬Èç¹ûÃüÁî×Ö·û´®Ã»ÓиüУ¬Ôò½«Ê¹Óûº´æ£¬µ±ÃüÁîÊÇ·ÇÃݵÈÐÔʱ£¬Õ⽫ÓпÉÄܵ¼ÖÂÎÊÌâ¡£

¹ØÓÚ»º´æ¼°¿ÉÄܵ¼ÖµÄÎÊÌ⣬¿ÉÒԲο¼ÎÒµÄÎÄÕ Dockerfile ×î¼Ñʵ¼ù

CI »·¾³ÏµÄÓÅ»¯

FROM node:10-alpine
ENV PROJECT_ENV production
ENV NODE_ENV production
# http-server ²»±ä¶¯Ò²¿ÉÒÔÀûÓûº´æ
RUN npm install -g http-server
WORKDIR /code
# Ê×´ÎÌí¼Ó´ËÁ½¸öÎļþ£¬³ä·ÖÀûÓûº´æ
ADD package.json package-lock.json /code
RUN npm ci
ADD . /code
RUN npm run build
EXPOSE 80
CMD http-server ./public -p 80

 

ÔÚ CI »·¾³ÏÂÖ÷Òª×öÁËÒ»µã¸Ä¶¯£ºÊ¹Óà npm ci ´úÌæ npm i£¬¾­ÊµÑ飬npm ci ¿ÉÒÔ¼õÉÙ½«½üÒ»°ëµÄµÄÒÀÀµ°²×°Ê±¼ä¡£

$ npm install
added 1154 packages in 60s
$ npm ci
added 1154 packages in 35s

 

ÁíÍ⣬µ± package.json Óë package-lock.json °æ±¾²»Æ¥Åäʱ£¬npm ci ½«»á±¨³öÒì³££¬Ìáǰ¼ì²â³ö²»°²È«ÐÅÏ¢£¬¼°Ôç·¢ÏÖÎÊÌ⣬¼°Ôç½â¾öÎÊÌâ¡£

¶à½×¶Î¹¹½¨

µÃÒæÓÚ»º´æ£¬ÏÖÔÚ¾µÏñ¹¹½¨Ê±¼äÒѾ­¿ìÁ˲»ÉÙ¡£µ«ÊÇ£¬´Ëʱ¾µÏñµÄÌå»ýÒÀ¾É¹ýÓÚÅÓ´ó£¬ÕâÒ²½«»áµ¼Ö²¿Êðʱ¼äµÄ¼Ó³¤¡£Ô­ÒòÈçÏÂ

¿¼ÂÇÏÂÿ´Î CI/CD ²¿ÊðµÄÁ÷³Ì

ÔÚ¹¹½¨·þÎñÆ÷ (Runer) ¹¹½¨¾µÏñ

°Ñ¾µÏñÍÆÖÁ¾µÏñ²Ö¿â·þÎñÆ÷

ÔÚÉú²ú·þÎñÆ÷À­È¡¾µÏñ£¬Æô¶¯ÈÝÆ÷

ÏÔ¶øÒ×¼û£¬¾µÏñÌå»ý¹ý´ó»áÔÚǰÁ½²½ÉÏ´«¼°ÏÂÔØÊ±Ôì³É´«ÊäЧÂʵÍÏ£¬Ôö¼Óÿ´Î²¿ÊðµÄÑÓʱ¡£

¼´Ê¹£¬¹¹½¨·þÎñÆ÷ÓëÉú²ú·þÎñÆ÷ÔÚͬһ½ÚµãÏ£¬Ã»ÓÐÑÓʱµÄÎÊÌâ (»ù±¾Ã»¿ÉÄÜ)¡£¼õÉÙ¾µÏñÌå»ýÒ²Äܹ»½ÚÊ¡´ÅÅ̿ռ䡣

¹ØÓÚ¾µÏñÌå»ýµÄ¹ý´ó£¬ÍêÈ«ÊÇÒòΪnode_modules ³ôÃûÕÑÖøµÄÌå»ý:

µ«×îºóÎÒÃÇÖ»ÐèÒª¹¹½¨Éú³ÉµÄ¾²Ì¬×ÊÔ´£¬¶ÔÓÚÔ´ÎļþÒÔ¼° node_modules ÏÂÎļþ£¬Õ¼ÓÃÌå»ý¹ý´óÇÒ²»±ØÒª£¬Ôì³ÉÀË·Ñ¡£

´Ëʱ¿ÉÒÔÀûÓà Docker µÄ¶à½×¶Î¹¹½¨£¬½öÀ´ÌáÈ¡±àÒëºóÎļþ£¬¼´´ò°üÉú³ÉµÄ¾²Ì¬×ÊÔ´£¬¶Ô Dockerfile ×öÒ»¸Ä½ø

FROM node:10-alpine as builder
ENV PROJECT_ENV production
ENV NODE_ENV production
# http-server ²»±ä¶¯Ò²¿ÉÒÔÀûÓûº´æ
WORKDIR /code
ADD package.json package-lock.json /code
RUN npm ci
ADD . /code
RUN npm run build
# Ñ¡Ôñ¸üСÌå»ýµÄ»ù´¡¾µÏñ
FROM nginx:10-alpine
COPY --from= builder /code/public /usr/share/nginx/html

´Ëʱ£¬¾µÏñÌå»ý´Ó 1G+ ±ä³ÉÁË 50M+¡£Èô´ËʱµÄ²¿Êð½ö½öÊÇÔÚ²âÊÔ»·¾³»òÕß¶à·ÖÖ§»·¾³ÏÂΪÁË·½±ã²âÊÔ£¬ÄǾʹ󹦸æ³É£¬ÍêÃÀ½â¾öÎÊÌâÁË¡£

ʹÓöÔÏó´æ´¢·þÎñ (OSS)

·ÖÎöһϠ50M+ µÄ¾µÏñÌå»ý£¬nginx:10-alpine µÄ¾µÏñÊÇ16M£¬Ê£ÏµÄ40MÊǾ²Ì¬×ÊÔ´¡£Éú²ú»·¾³µÄ¾²Ì¬×ÊÔ´ÍùÍù»áÔÚ¶ÀÁ¢ÓòÃûÉÏά»¤£¬²¢Ê¹Óà CDN ½øÐмÓËÙ¡£

Èç¹û°Ñ¾²Ì¬×ÊÔ´¸øÉÏ´«µ½Îļþ´æ´¢·þÎñ£¬¼´OSS£¬²¢Ê¹Óà CDN ¶Ô OSS ½øÐмÓËÙ£¬ÔòûÓбØÒª´òÈë¾µÏñÁË¡£¶øÔÚÉú²ú»·¾³ÏÂÒ²ÓжԾ²Ì¬×ÊÔ´ÉÏ CDN µÄÇ¿ÁÒÐèÇó¡£

´Ëʱ¾µÏñ´óС»á¿ØÖÆÔÚ 20M ÒÔÏ¡£ËäÈ»¼«´óµØ¼õСÁ˾µÏñÌå»ý£¬µ«ÊÇËü»áÔö¼Ó¸´ÔÓ¶ÈÓëÔö¼Ó¾µÏñ¹¹½¨Ê±¼ä(ÈçÉÏ´«µ½OSS)£¬¶ÔÓÚ²âÊÔ»·¾³»òÕß·ÖÖ§»·¾³Ã»±ØÒªÊ¹Óà OSS¡£

¹ØÓÚ¾²Ì¬×ÊÔ´£¬¿ÉÒÔ·ÖÀà³ÉÁ½²¿·Ö£º

/build£¬´ËÀàÎļþÔÚÏîÄ¿ÖÐʹÓà require/import ÒýÓ㬻ᱻ webpack ´ò°ü²¢¼Ó hash Öµ£¬²¢Í¨¹ý publicPath ÐÞ¸Ä×ÊÔ´µØÖ·¡£¿ÉÒÔ°Ñ´ËÀàÎļþÉÏ´«ÖÁ oss£¬²¢¼ÓÉÏÓÀ¾Ã»º´æ£¬²»ÐèÒª´òÈë¾µÏñ

/static£¬´ËÀàÎļþÔÚÏîÄ¿ÖÐÖ±½ÓÒýÓøù·¾¶£¬Ö±½Ó´òÈë¾µÏñ£¬Èç¹ûÉÏ´«ÖÁ OSS ¿ÉÄÜÔö¼Ó¸´ÔÓ¶È (ÅúÁ¿ÐÞ¸Ä publicPath)

´Ëʱͨ¹ýÒ»¸ö½Å±¾ÃüÁî npm run uploadOss£¬À´°Ñ¾²Ì¬×ÊÔ´ÉÏ´«ÖÁ OSS¡£¸üкóµÄ Dockerfile ÈçÏÂ

FROM node:10-alpine as builder
ENV PROJECT_ENV production
ENV NODE_ENV production
# http-server ²»±ä¶¯Ò²¿ÉÒÔÀûÓûº´æ
WORKDIR /code
ADD package.json package-lock.json /code
RUN npm ci
ADD . /code
# npm run uploadOss ÊǰѾ²Ì¬×ÊÔ´ÉÏ´«ÖÁ oss ÉϵĽű¾Îļþ
RUN npm run build && npm run uploadOss
# Ñ¡Ôñ¸üСÌå»ýµÄ»ù´¡¾µÏñ
FROM nginx:10-alpine
COPY --from=builder code/public/index.html code/public/favicon.ico /usr/share/nginx/html/
COPY --from=builder code/public/static /usr/share/nginx/html/static

С½á

¾­¹ý±¾ÆªÎÄÕÂ×ܽᣬÔÚǰ¶ËÖй¹½¨¾µÏñÐèҪעÒâÒÔϼ¸µã

¾µÏñÖÐʹÓûùÓÚ alpine µÄ¾µÏñ£¬¼õС¾µÏñÌå»ý¡£

¾µÏñÖÐÐèÒªËø¶¨ node µÄ°æ±¾ºÅ£¬¾¡¿ÉÄÜÒ²Ëø¶¨ alpine µÄ°æ±¾ºÅ£¬Èç node:10.19-alpine3.11¡£(ÎÒʾÀý´úÂëÖÐδÈç´ËÏêϸµØÖ¸³ö)

Ñ¡ÔñºÏÊʵĻ·¾³±äÁ¿ NODE_ENV ¼° PROJECT_ENV£¬ÈçÔÚ²âÊÔ»·¾³Ï½øÐй¹½¨

npm ci Ìæ´ú npm i£¬±ÜÃâ°æ±¾ÎÊÌâ¼°Ìá¸ßÒÀÀµ°²×°ËÙ¶È

package.json µ¥¶ÀÌí¼Ó£¬³ä·ÖÀûÓþµÏñ»º´æ

ʹÓöà½×¶Î¹¹½¨£¬¼õС¾µÏñÌå»ý

ÈçÓбØÒª£¬¾²Ì¬×ÊÔ´ÇëÉÏ CDN

 

 

   
4785 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÔÆÔ­Éú¼Ü¹¹¸ÅÊö
K8S¸ß¿ÉÓü¯Èº¼Ü¹¹ÊµÏÖ
ÈÝÆ÷ÔÆ¹ÜÀíÖ®K8S¼¯Èº¸ÅÊö
k8s-ÕûÌå¸ÅÊöºÍ¼Ü¹¹
Ê®·ÖÖÓѧ»áÓÃdocker²¿Êð΢·þÎñ
×îпγÌ
ÔÆ¼ÆË㡢΢·þÎñÓë·Ö²¼Ê½¼Ü¹¹
Æóҵ˽ÓÐÔÆÔ­ÀíÓë¹¹½¨
»ùÓÚKubernetesµÄDevOpsʵ¼ù
ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦Ó㨰¢ÀïÔÆ£©
Docker²¿Êð±»²âϵͳÓë×Ô¶¯»¯¿ò¼Üʵ¼ù
³É¹¦°¸Àý
±±¾© ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ùÅàѵ
ij¾ü¹¤Ñо¿µ¥Î» MDA£¨Ä£ÐÍÇý¶¯¼Ü¹¹£©
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ÁìÓòÇý¶¯Éè¼Æ
ÉîÛÚijÆû³µÆóÒµ Ä£ÐÍÇý¶¯µÄ·ÖÎöÉè¼Æ