ÔõÑùʹÓÃDocker¾ÙÐÐÒ»Á¬¼¯³ÉºÍÒ»Á¬°²ÅÅ
ÔõÑùʹÓÃDocker¾ÙÐÐÒ»Á¬¼¯³ÉºÍÒ»Á¬°²ÅÅ
Ëæ×ÅÈí¼þ¿ª·¢µÄ¿ìËÙÉú³¤£¬Ò»Á¬¼¯³ÉºÍÒ»Á¬°²ÅųÉΪÁËÏÖ´úÈí¼þ¿ª·¢Á÷³ÌÖв»¿É»òȱµÄÒ»²¿·Ö¡£Docker×÷Ϊһ¸öÈÝÆ÷»¯Æ½Ì¨£¬¿ÉÒÔ¼«´óµØ¼ò»¯Ò»Á¬¼¯³ÉºÍÒ»Á¬°²ÅŵÄÀú³Ì¡£±¾ÎĽ«ÏÈÈÝÔõÑùʹÓÃDocker¾ÙÐÐÒ»Á¬¼¯³ÉºÍÒ»Á¬°²ÅÅ£¬²¢ÌṩÏêϸµÄ´úÂëʾÀý¡£
Ò»¡¢Ò»Á¬¼¯³É
Ò»Á¬¼¯³ÉÊÇÖ¸½«¿ª·¢Ö°Ô±¶Ô´úÂëµÄÐÞ¸ÄƵÈԵغϲ¢µ½¹²Ïí´æ´¢¿âÖУ¬²¢ÆµÈԵؾÙÐй¹½¨ºÍ²âÊÔ¡£Ê¹ÓÃDocker¾ÙÐÐÒ»Á¬¼¯³É¿ÉÒÔ¼ò»¯ÇéÐÎÉèÖú͹¹½¨Àú³Ì£¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£
½¨ÉèDockerfileÎļþ
DockerfileÊÇÓÃÓÚ¹¹½¨Docker¾µÏñµÄ¾ç±¾Îļþ¡£ÔÚÏîÄ¿¸ùĿ¼Ï½¨ÉèÒ»¸öÃûΪDockerfileµÄÎļþ£¬²¢Ìí¼ÓÒÔÏ´úÂëʾÀý£º
# ʹÓùٷ½µÄ Node.js ¾µÏñ×÷Ϊ»ù´¡¾µÏñ FROM node:alpine # ÉèÖÃÊÂÇéĿ¼ WORKDIR /app # ¸´ÖÆ package.json ºÍ package-lock.json µ½ÊÂÇéĿ¼ COPY package*.json ./ # ×°ÖÃÏîÄ¿ÒÀÀµ RUN npm install # ½«ÏîÄ¿Îļþ¸´ÖƵ½ÊÂÇéĿ¼ COPY . . # ̻¶¶Ë¿Ú EXPOSE 3000 # ÔËÐÐÓ¦Óà CMD ["npm", "start"]
µÇ¼ºó¸´ÖÆ
Õâ¸öDockerfileÎļþ½ç˵ÁËÒ»¸ö»ùÓÚNode.jsµÄ¾µÏñ£¬²¢½«ÏîÄ¿µÄÒÀÀµ×°Öõ½¾µÏñÖУ¬²¢½«Ó¦ÓõÄÎļþºÍ´úÂ븴ÖƵ½ÊÂÇéĿ¼ÖС£×îºó£¬Ì»Â¶¶Ë¿Ú²¢ÔËÐÐÓ¦Óá£
¹¹½¨Docker¾µÏñ
ÔÚÏîÄ¿¸ùĿ¼Ï£¬Ê¹ÓÃÒÔÏÂÏÂÁî¹¹½¨Docker¾µÏñ£º
docker build -t my-app .
µÇ¼ºó¸´ÖÆ
Õâ¸öÏÂÁî»áƾ֤DockerfileÎļþµÄ½ç˵£¬¹¹½¨Ò»¸öÃûΪmy-appµÄ¾µÏñ¡£
ÈÝÆ÷»¯²âÊÔ
ÔÚÏîÄ¿¸ùĿ¼Ï½¨ÉèÒ»¸öÃûΪdocker-compose.test.ymlµÄÎļþ£¬²¢Ìí¼ÓÒÔÏ´úÂëʾÀý£º
version: '3' services: app: build: context: . dockerfile: Dockerfile depends_on: - db command: npm run test db: image: mongo
µÇ¼ºó¸´ÖÆ
Õâ¸ödocker-compose.test.ymlÎļþ½ç˵ÁËÁ½¸öЧÀÍ£¬Ò»¸öÊÇappЧÀͼ´ÎÒÃǵÄÓ¦ÓÃЧÀÍ£¬ÁíÒ»¸öÊÇdbЧÀͼ´ÎÒÃǵÄÊý¾Ý¿âЧÀÍ¡£Õâ¸öÎļþָʾDockerÔËÐÐÁ½¸öЧÀÍ£¬²¢ÔÚappЧÀÍÖÐÔËÐвâÊÔÏÂÁî¡£
ÔÚÏîÄ¿¸ùĿ¼Ï£¬Ê¹ÓÃÒÔÏÂÏÂÁîÔËÐвâÊÔÈÝÆ÷£º
docker-compose -f docker-compose.test.yml up
µÇ¼ºó¸´ÖÆ
Õâ¸öÏÂÁî»áÆô¶¯appºÍdbÁ½¸öЧÀÍ£¬²¢ÔËÐвâÊÔÏÂÁî¡£
×Ô¶¯»¯Ò»Á¬¼¯³É
Ò»Á¬¼¯³ÉµÄÄ¿µÄÊǽ«¿ª·¢Ö°Ô±µÄ´úÂë±ä»»¿ìËÙ¡¢ÆµÈԵغϲ¢µ½Ö÷¸É´úÂëÖУ¬²¢¾ÙÐÐ×Ô¶¯»¯¹¹½¨ºÍ²âÊÔ¡£¿ÉÒÔʹÓÃÀàËÆJenkins¡¢GitLab CIµÈ¹¤¾ßÀ´ÊµÏÖ×Ô¶¯»¯Ò»Á¬¼¯³É¡£
ÒÔJenkinsΪÀý£¬½¨ÉèÒ»¸öÃûΪJenkinsfileµÄÎļþ£¬²¢Ìí¼ÓÒÔÏ´úÂëʾÀý£º
pipeline { agent any stages { stage('Build') { steps { sh 'docker build -t my-app .' } } stage('Test') { steps { sh 'docker-compose -f docker-compose.test.yml up' } } } }
µÇ¼ºó¸´ÖÆ
Õâ¸öJenkinsfileÎļþ½ç˵ÁËÒ»¸öJenkinsÁ÷Ë®Ïߣ¬°üÀ¨Á½¸ö½×¶Î£º¹¹½¨ºÍ²âÊÔ¡£ÔÚ¹¹½¨½×¶ÎÖ´ÐÐdocker buildÏÂÁî¹¹½¨Docker¾µÏñ£¬ÔÚ²âÊԽ׶ÎÖ´ÐÐdocker-composeÏÂÁîÆô¶¯²âÊÔÈÝÆ÷¡£
½«JenkinsfileÎļþÌí¼Óµ½ÏîÄ¿µÄ¸ùĿ¼£¬²¢ÉèÖÃJenkinsЧÀÍÆ÷¾ÙÐÐ×Ô¶¯»¯Ò»Á¬¼¯³É¡£
¶þ¡¢Ò»Á¬°²ÅÅ
Ò»Á¬°²ÅÅÊÇÖ¸ÔÚÍê³ÉÒ»Á¬¼¯³Éºó£¬½«´úÂë×Ô¶¯°²Åŵ½Éú²úÇéÐÎÖС£Ê¹ÓÃDocker¾ÙÐÐÒ»Á¬°²ÅÅ¿ÉÒÔ´ó´ó¼ò»¯°²ÅŵÄÀú³Ì¡£
½¨ÉèDocker¾µÏñ
ʹÓÃÇ°ÃæµÄ°ì·¨Öн¨ÉèµÄDockerfileÎļþ£¬¹¹½¨Ò»¸ö°üÀ¨Ó¦ÓóÌÐò´úÂëµÄDocker¾µÏñ¡£
±àдdocker-compose.ymlÎļþ
ÔÚÏîÄ¿¸ùĿ¼Ï½¨ÉèÒ»¸öÃûΪdocker-compose.ymlµÄÎļþ£¬²¢Ìí¼ÓÒÔÏ´úÂëʾÀý£º
version: '3' services: app: image: my-app:latest restart: always ports: - 80:3000
µÇ¼ºó¸´ÖÆ
Õâ¸ödocker-compose.ymlÎļþָʾDockerÔËÐÐÒ»¸öappЧÀÍ£¬²¢Ê¹ÓÃÊʲŹ¹½¨µÄmy-app¾µÏñ×÷ΪÆä»ù´¡¾µÏñ¡£±ðµÄ£¬»¹¿ÉÒÔÉèÖö˿ÚÓ³Éä¼°ÆäËûЧÀÍ¡£
°²ÅÅÓ¦ÓÃ
ʹÓÃÒÔÏÂÏÂÁîÔÚÉú²úÇéÐÎÖа²ÅÅÓ¦Óãº
docker-compose up -d
µÇ¼ºó¸´ÖÆ
Õâ¸öÏÂÁî»áÔÚºǫ́Æô¶¯appЧÀÍ£¬²¢½«Æä̻¶ÔÚÖ÷»úµÄ80¶Ë¿ÚÉÏ¡£
ÒÔÉϾÍÊÇÔõÑùʹÓÃDocker¾ÙÐÐÒ»Á¬¼¯³ÉºÍÒ»Á¬°²ÅŵÄÏêϸ°ì·¨ºÍ´úÂëʾÀý¡£Í¨¹ýDocker£¬¿ÉÒÔ¼ò»¯ÇéÐÎÉèÖúͰ²ÅÅÀú³Ì£¬Ìá¸ß¿ª·¢Ð§ÂʺÍÓ¦ÓõĿɿ¿ÐÔ¡£
ÒÔÉϾÍÊÇÔõÑùʹÓÃDocker¾ÙÐÐÒ»Á¬¼¯³ÉºÍÒ»Á¬°²ÅŵÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡