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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
DockOne¼¼Êõ·ÖÏí£¨Ò»£©£ºDockerfileÓëDocker¹¹½¨Á÷³Ì½â¶Á
 
×÷Õß ÐìÐÂÀ¤ À´Ô´£ºdockone.io »ðÁú¹ûÈí¼þ  ·¢²¼ÓÚ 2015-5-4
  2899  次浏览      30
 

¡¾±àÕߵϰ¡¿±¾´ÎÌÖÂÛÖ÷Òª¶Ôdocker buildµÄÔ´ÂëÁ÷³Ì½øÐÐÁËÊáÀíºÍ½â¶Á£¬²¢·ÖÏíÁËÔÚÖÆ×÷Dockerfile¹ý³ÌÖеÄһЩʵ¼ù¾­Ñ飬°üÀ¨ÈçºÎµ÷ÊÔ¡¢ÓÅ»¯ºÍbuildÖеÄһЩҪµã¡£ÁíÍ⣬»¹Õë¶ÔÏÖÓÐDockerfileµÄ²»×ã½øÐÐÁ˼òҪ˵Ã÷£¬²¢·ÖÏíÁ˶ÔÓÚDockerfileµÄһЩÀí½â¡£

ÌýÖÚ

Õâ´ÎµÄ·ÖÏíÖ÷ÒªÃæÏòÓÐÒ»¶¨Docker»ù´¡µÄ¡£ÎÒÏ£ÍûÄãÒѾ­£º

  • ÓùýDocker£¬ÊìϤdocker commitÃüÁî
  • ×Ô¼º¶¯ÊÖ±àд¹ýDockerfile
  • ×Ô¼º¶¯ÊÖbuild¹ýÒ»¸ö¾µÏñ£¬ÓÐÇ×ÉíµÄÌåÑé
  • ÎÒÖ÷Òª·ÖÏíһЩÏÖÔÚÍøÉÏ»òÕßÎĵµÖÐûÓеĶ«Î÷£¬°üÀ¨ÎÒµÄÀí½âºÍһЩʵ¼ù£¬ÓÐÎóÖ®´¦Ò²Çë´ó¼ÒÖ¸Õý¡£ºÃÁË£¬ÕýÎÄ¿ªÊ¼£º

    Dockerfile

    DockerfileÆäʵ¿ÉÒÔ¿´×öÒ»¸öÃüÁ¡£Ã¿ÐоùΪһÌõÃüÁÿÐеĵÚÒ»¸öµ¥´Ê£¬¾ÍÊÇÃüÁîcommand¡£ºóÃæµÄ×Ö·û´®ÊǸÃÃüÁîËùÒª½ÓÊյIJÎÊý¡£±ÈÈçENTRYPOINT /bin/bash¡£ENTRYPOINTÃüÁîµÄ×÷ÓþÍÊǽ«ºóÃæµÄ²ÎÊýÉèÖÃΪ¾µÏñµÄentrypoint¡£ÖÁÓÚÏÖÓÐÃüÁîµÄº¬Ò壬ÕâÀï²»ÔÙÏêÊö¡£DockOneÉÏÓкܶàµÄ½éÉÜ¡£

    Docker¹¹½¨£¨docker build£©

    docker buildµÄÁ÷³Ì

    docker buildµÄÁ÷³Ì£¨Õⲿ·Ö´úÂë»ù±¾¶¼ÔÚdocker/builderÖУ©

  • ÌáÈ¡Dockerfile£¨evaluator.go/RUN£©¡£
  • ½«Dockerfile°´ÐнøÐзÖÎö£¨parser/parser.go/Parse£© Dockerfile£¬Ã¿ÐеÚÒ»¸öµ¥´Ê£¬ÈçCMD¡¢FROMµÈ£¬Õâ¸ö½Ð×öcommand¡£¸ù¾Ýcommand£¬½«Ö®ºóµÄ×Ö·û´®ÓöÔÓ¦µÄÊý¾Ý½á¹¹½øÐнÓÊÕ¡£
  • ¸ù¾Ý·ÖÎöµÄcommand£¬ÔÚdispatchers.goÖÐÑ¡Ôñ¶ÔÓ¦µÄº¯Êý½øÐд¦Àí£¨dispatchers.go£©¡£
  • ´¦ÀíÍêËùÓеÄÃüÁÈç¹ûÐèÒª´ò±êÇ©£¬Ôò¸ø×îºóµÄ¾µÏñ´òÉÏtag£¬½áÊø¡£
  • ÔÚÕâÀÎÒ¾ÙÒ»¸öÀý×ÓÀ´ËµÃ÷Ò»ÏÂÔÚµÚ4²½ÃüÁîµÄÖ´Ðйý³Ì¡£ÒÔCMDÃüÁîΪÀý£º

    func cmd(b *Builder, args []string, 
    attributes map[string]bool, original string) error {
    cmdSlice := handleJsonArgs(args, attributes)

    if !attributes["json"] {
    cmdSlice = append([]string{"/bin/sh", "-c"}, cmdSlice...)
    }

    b.Config.Cmd = runconfig.NewCommand(cmdSlice...)

    if err := b.commit("", b.Config.Cmd, fmt.Sprintf("CMD %q", cmdSlice));
    err != nil {
    return err
    }

    if len(args) != 0 {
    b.cmdSet = true
    }

    return nil
    }

    ¿ÉÒÔ¿´µ½£¬b.Config.Cmd = runconfig.NewCommand(cmdSlice...)¾ÍÊǸù¾Ý´«ÈëµÄCMD£¬¸üÐÂÁËBuilderÀïÃæµÄConfig¡£È»ºó½øÐÐb.commit¡£BuilderÕâÀïµÄcommit´óÖº¬ÒåÆäʵÓëdocker/daemonµÄcommit¹¦ÄÜ´óͬСÒì¡£²»¹ýÕâÀïcommitÊǰüº¬ÁËÒÔϵÄÒ»¸öÍêÕû¹ý³Ì(²Î¼ûinternals.go/commit)£º

    1. ¸ù¾ÝConfig£¬createÒ»¸öcontainer³öÀ´¡£
    2. È»ºó½«Õâ¸öcontainerͨ¹ýcommit(Õâ¸öcommitÊÇÖ¸µÄdockerµÄcommit,Óëdocker commitµÄÃüÁîÊÇÏàͬµÄ)µÃµ½Ò»¸öеľµÏñ¡£
    3. ²»½ö½öÊÇCMDÃüÁ¼¸ºõËùÓеÄÃüÁî(³ýÁËFROMÍâ)£¬ÔÚ×îºó¶¼ÊÇʹÓÃb.commitÀ´²úÉúÒ»¸öеľµÏñµÄ¡£

    ËùÒÔÕâ»áµ¼ÖµĽá¹û¾ÍÊÇ£¬DockerfileÀïÿһÐУ¬×îºó¶¼»á±äΪ¾µÏñÖеÄÒ»²ã¡£¼¸ºõÊÇÓжàÉÙÓÐЧÐУ¬¾ÍÓжàÉٲ㡣

    DockerfileÄæÏò

    ͨ¹ýdocker history image¿ÉÒÔ¿´µ½¸Ã¾µÏñµÄÀúÊ·À´Ô´¡£¼´Ê¹Ã»ÓÐDockerfile£¬Ò²¿ÉÒÔͨ¹ýhistoryÀ´ÄæÏò²úÉúDockerfile¡£

    [root@jd ~]# docker history 2d8
    IMAGE CREATED CREATED BY SIZE
    2d80e15fcfdb 8 days ago /bin/sh -c #(nop) COPY dir:86faa820e8bf5dcc06 16.29 MB
    0f601e909d72 8 days ago /bin/sh -c #(nop) ENTRYPOINT [hack/dind] 0 B
    68aed19c5994 8 days ago /bin/sh -c set -x && git clone https://githu 3.693 MB
    ebc6ef15552b 8 days ago /bin/sh -c #(nop) ENV TOMLV_COMMIT=9baf8a8a9f 0 B
    fe22e308201a 8 days ago /bin/sh -c set -x && git clone -b v1.0.1 htt 5.834 MB
    f514c504c9b1 8 days ago /bin/sh -c #(nop) COPY dir:d9a19910e57f47cb3b 3.114 MB
    e4e3ec8edf1a 8 days ago /bin/sh -c ./contrib/download-frozen-image.sh 1.155 MB
    6250561532fa 8 days ago /bin/sh -c #(nop) COPY file:9679abce578bcaa2c 3.73 kB
    ...

    ÀýÈç0f601e909d72¾ÍÊÇÓÉENTRYPOINT [hack/dind]²úÉú¡£ÕâÀïµÄÐÅϢչʾµÄ²»ÍêÈ«£¬¿ÉÒÔͨ¹ýdocker inspect -f {{.ContainerConfig.Cmd}} layerÀ´¿´Ä³Ò»²ã²úÉúµÄ¾ßÌåÐÅÏ¢¡£

    ÈçºÎ×öDockerfile

    Dockerfileµ÷ÊÔ

    Dockerfile¸ü¶àµÄÏñÒ»¸ö½Å±¾£¬ÀàËÆÓÚ°²×°½Å±¾¡£ÌرðÊÇ´óÆª·ùµÄ½Å±¾£¬ÏëÒ»´Îд³ÉÊDZȽÏÓÐÄѶȵġ£Ãâ²»Á˽øÐÐһЩµ÷ÊÔ¡£µ÷ÊÔʱ×îºÃÀûÓÃDockerfileµÄcache¹¦ÄÜ£¬¿ÉÒÔ´ó·ù¶È½ÚÔ¼µ÷ÊÔµÄʱ¼ä¡£

    ¾Ù¸öÀý×Ó£¬Èç¹ûÎÒÏÖÔÚÓÐÒ»¸öDockerfile¡£µ«ÊÇÎÒ·¢ÏÖ¡£ÎÒ»¹ÐèÒªÔÙ¿ª¼¸¸ö¶Ë¿Ú£¬»òÕßÔÙ°²×°ÆäËûµÄÈí¼þ¡£Õâ¸öʱºò×îºÃ²»ÒªÖ±½ÓÐÞ¸ÄÒѾ­ÓеÄDockerfileµÄÄÚÈÝ¡£¶øÊÇÔÚºóÃæ×·¼ÓÃüÁî¡£ÕâÑùÔÙbuildµÄʱºò£¬¿ÉÒÔÀûÓÃÒÑÓеÄcache¡£

    DockerfileÓÅ»¯

    µ÷ÊÔ¹ýºóµÄDockerfileµ±È»¿ÉÒÔ×÷Ϊ×îÖÕµÄDockerfile£¬Ìṩ¸øÓû§¡£µ«Êǵ÷ÊÔµÄDockerfileµÄȱµã¾ÍÊDzãÊý¿ÉÄܹý¶à£¬¶øÇÒ²»Ò×Ô½¶à¡£ËùÒÔ×îºÃ½øÐÐÒ»¶¨µÄÓÅ»¯ºÍÕûÀí¡£¾­¹ýÕûÀíµÄDockerfileÉú³É³öÀ´µÄ¾µÏñ¿ÉÒÔʹµÃ²ãÊý¸üÉÙ£¬ÌõÀí¸üÇåÎú£¬Ò²¿ÉÒÔ¸üºÃµÄ¸´Óá£

    DockerOneÀïÓÐһƪÎÄÕÂдµÃºÜºÃ£¬¿ÉÒԲο¼¡£

    ÕâÀïÓÐÁ½µãҪǿµ÷£º

  • ¾¡Á¿Éú³ÉÒ»¸öbase£ºÕâÑù±ãÓÚ°æ±¾µÄµü´úºÍ×÷Ϊ¹«ÓþµÏñ¡£
  • ÇåÎúµÄ×¢ÊÍ£ºÓÐһЩעÊÍ»á°ïÖú±ðÈËÀí½âÕâЩÃüÁîµÄÄ¿µÄ
  • Dockerfile×Ô¶¯build

    ÓÐÁËDockerfile£¬ºÜ¶àÈ˶¼ÊÇÔÚ±¾µØbuild¡£ÆäʵÕâ¸öÊÇÏ൱ºÄʱµÄ¡£Õâ¸ö¹¤×÷ÆäʵÍêÈ«¿ÉÒÔ½»¸øregistry.hub.docker.comÀ´Íê³É¡£

    ¾ßÌåµÄ×ö·¨¾ÍÊÇ£º

  • °ÑÄãµÄDockerfileÉÏ´«µ½GitHubÉÏ¡£
  • ½øÈëµ½registry.hub.docker.comµÄ×Ô¼ºµÄÕË»§ÖУ¬Ñ¡ÔñAutomated Build¡£
  • È»ºó¾Í¿ÉÒÔbuildÁË¡£
  • ¸ù¾ÝÄãµÄDockerfileÄÚÈÝ´óС£¬buildʱ³¤²»È·¶¨¡£µ«ÊÇÓ¦¸ÃËãÊDZȽϿìÁË¡£dockerÔ´ÂëµÄDockerfileÔÚÎÒ±¾µØbuildÁËÒ»¸ö¶àСʱ¡£µ«ÊÇregistry.hub.docker.comÖ»ÓÃÁ˰ëСʱ×óÓÒ¡£´óÔ¼ÊÇÒòΪÍâ¹úµÄÔÂÁÁ±È½ÏÔ²°É¡£

    buildÍê³Éºó£¬¿ÉÒÔÔÚÏ߲鿴°æ±¾ÐÅÏ¢µÈ¡£±¾µØÐèÒªµÄ»°£¬¿ÉÒÔÖ±½ÓpullÏÂÀ´¡£

    ¹úÄÚÓжà¼Ò¹«Ë¾ÌṩÁËregistry.hub.docker.comµÄMirror·þÎñ£¬¿ÉÒÔÖ±½Ó´Ó¹úÄÚµÄÔ´ÖÐpullÏÂÀ´¡£ËÙ¶È¿ìºÜ¶à¡£

    DockerfileµÄ²»×ã

  • ²ãÊý¹ý¶à:¹ý¶àÐеÄDockerfile
  • ²»ÄÜÇåÀívolumeµÈÅäÖãºvolume¡¢exposeµÈ¶à¸ö²ÎÊýÖ»Äܵ¥ÏòÔö¼Ó¡£²»ÄÜɾ³ý¡£±ÈÈçÔÚij¸ö¾µÏñ²ã¼ÓÈëÁËVOLUME /var/lib/docker¡£ÄÇôÔڸþµÏñÖ®ºóµÄËùÓв㽫¼Ì³ÐÕâÒ»ÊôÐÔ¡£
  • IMPORT¹¦ÄÜ
  • ÆäËû

    ÏÖÔÚÎÒÃǻعýÍ·À´¿´DockerµÄ·Ö²ãµÄÁíÒ»¸ö¿ÉÄܵÄÓÃ;¡£

    DockerµÄ¾µÏñ¿ÉÒÔ¿´×öÊÇÒ»¸öÈí¼þÕ»¡£ÄÇôÆäÖÐÓжà¸öÈí¼þ×é³É¡£ºÃÁË£¬ÄÇôÎÒÃÇÊDz»ÊÇ¿ÉÒÔ¿¼ÂÇÈÃÈí¼þ½øÐÐ×ÔÓɵþ¼ÓÄØ£¿

    ±ÈÈ磺´ÓCentOS¾µÏñÉϰ²×°ÁËPythonÐγɾµÏñA£¬´ÓCentOS¾µÏñÉϰ²×°ÁËApacheÐγɾµÏñB¡£Èç¹ûÓû§Ïë´ÓCentOSÉÏÐγÉÒ»¸ö¼ÈÓÐPythonÓÖÓÐApacheµÄ¾µÏñ£¬ÈçºÎ×öÄØ£¿

    ÎÒÏëÓÐÁ½ÖÖ·½Ê½£¬Ò»ÖÖÊÇdockerfileµÄimport¡£ÎÒÃÇ¿ÉÒÔ»ùÓÚ¾µÏñA£¬È»ºóimport°²×°ApacheµÄDockerfile£¬´Ó¶øµÃµ½Ä¿±ê¾µÏñ¡£

    ÁíÍâÒ»ÖÖÊÇ¿ÉÒÔÖ±½ÓÒýÈ룬¾ÍÊÇ»ùÓÚ¾µÏñA£¬È»ºóÎÒÃÇÖ±½Ó°ÑBµÄ×îºóÒ»²ã£¨¼ÙÉèB°²×°apacheÖ»ÐγÉÁËÒ»²ã£©£¬°áµ½¾µÏñAµÄ×Ó²ãÉÏ£¬²»ÊÇÒ²¿ÉÒԵõ½Ä¿±ê¾µÏñô£¿

    ÒÔÉÏÖ÷ÒªÊÇÎÒ·ÖÏíµÄһЩÄÚÈÝ¡£´ó¼Ò¿ÉÒÔÒ»ÆðÀ´ÌÖÂÛ¡£

       
    2899 ´Îä¯ÀÀ       30
     
    Ïà¹ØÎÄÕÂ

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

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

    ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
    ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
    CMMIÌåϵÓëʵ¼ù
    »ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
    ×îл¼Æ»®
    DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
    DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
    UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
    AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
    »ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
    ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

    ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
    Èí¼þ¼Ü¹¹Éè¼Æ
    ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
    ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
    ¼Ü¹¹¸¯»¯Ö®ÃÕ
    ̸ƽ̨¼´·þÎñPaaS
    Ïà¹ØÅàѵ¿Î³Ì

    ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
    Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

    ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
    ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
    ijÑз¢ÖÐÐÄ Openstackʵ¼ù
    ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
    ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
    ÔÆ¼ÆËãÓëWindows AzureÅàѵ
    ±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ