Dockerfile 설명 및springboot 구축 실전

7061 단어

Dockerfile 설명

  • FROM

  • 미러에 대한 기본 미러를 지정합니다.
    #   :
    FROM :
    
    #  :
    FROM centos:7
    
    #  :
    tag   ,   :latest
    
  • MAINTAINAER

  • 작성자 정보를 지정합니다.
    #   :
    MAINTAINER 
    
    #  :
    MAINTAINER liweichao
    
  • RUN

  • 거울을 만들 때 실행되는 스크립트입니다.
    #   :
    RUN command param1 param2
    RUN ["executable", "param1", "param2"]
    
    #  :
    RUN ls
    
    #  
    Dockerfile                     ,       Dockerfile   。
     :RUN cd /tmp && mkdir app
    
  • ENTRYPOINT

  • 용기가 시작된 후 실행된 명령입니다.
    #   :
    ENTRYPOINT command param1 param2
    ENTRYPOINT ["executable", "param1", "param2"]
    
    #  :
    ENTRYPOINT mvn -v
    
    #  
       Dockerfile        ENTRYPOINT,      ,        。
    
  • CMD

  • 용기가 시작된 후 실행된 명령입니다.
    #   :
    CMD command param1 param2
    CMD ["executable", "param1", "param2"]
    CMD ["param1","param2"]  --          ENTRYPOINT      ;
    
    #  :
    CMD mvn -v
    
    #  
       Dockerfile        CMD,      ,        。                  ,      CMD      
    
    

    ENTRYPOINT 대비 설명:
    공통점:
  • 셸이나 exec 함수 호출 방식을 지정하여 명령을 실행할 수 있다.
  • 여러 개의 CMD 지령이나 ENTRYPOINT 지령이 존재할 때 마지막 하나만 효력이 발생한다.

  • 다름:
  • CMD 명령이 지정한 용기를 시작할 때 명령은 docker run이 지정한 명령으로 덮어쓸 수 있고 ENTRYPOINT 명령이 지정한 명령은 덮어쓸 수 없으며, docker run이 지정한 파라미터를 ENTRYPOINT가 지정한 명령의 매개 변수로 간주합니다.
  • CMD 명령은 ENTRYPOINT 명령에 기본 파라미터를 설정할 수 있고 dockerrun이 지정한 파라미터에 덮어쓸 수 있다.

  • 상세 참조: Dockerfile에서 지정한 실행 명령은 ENTRYPOING을 사용하는 것과 CMD를 사용하는 것이 어떻게 다릅니까?
  • EXPOSE

  • Docker 서버 용기에 노출된 포트 번호로 호환 시스템에 사용됩니다.
    #   :
     EXPOSE  [...]
    
    #  :
    EXPOSE 8080 9090 50983
    
    #  
    
    
  • ENV

  • 환경 변수를 지정합니다.
    #   :
    ENV  
    
    #  :
    ENV spring.profiles.active prod
    
    #  
     Dockerfile             RUN  ,                   ,                     docker run   –env  
  • ADD

  • 컨테이너에 파일을 추가합니다.
    #   :
    ADD  
    
    #  :
    ADD . /tmp/app
    
    #  
         Dockerfile          ,   url,      。
    
  • COPY

  • 컨테이너에 파일을 추가합니다.
    #   :
    COPY  
    
    #  :
    COPY . /tmp/app
    
    #  
    src    url,       。
    
  • VOLUME

  • 로컬 호스트나 다른 용기에서 마운트할 수 있는 마운트 지점을 만듭니다. 일반적으로 데이터베이스와 유지해야 할 데이터 등을 저장합니다.
    #   :
    VOLUME ["samepath"]
    
    #  :
    VOLUME ["/logs"]
    
    #  
    
    
  • USER

  • 컨테이너를 실행할 때 사용자 이름 또는 UID.
    #   :
    USER [username|uid]
    
    #  :
    USER root
    
    #  
    
    
  • WORKDIR

  • 후속 RUN, CMD, ENTRYPOINT 명령에 대한 작업 디렉토리를 구성합니다.
    #   :
    WORKDIR /path
    
    #  :
    WORKDIR /tmp/app
    
    #  
    
    
  • ONBUILD

  • 생성된 미러가 새로 생성된 다른 미러의 기본 미러로 사용될 때 수행되는 작업 명령을 구성합니다.
    #   :
    ONBUILD [INSTRUCTION]
    
    #  :
    
    
    #  
               ,         。
    

    springboot 구축 실전


    우선 아이디어에서 마벤트 기반의springboot 프로젝트를 구축하고spring-boot-starter-web 의존도를 추가하면 간단한 controller를 작성할 수 있습니다. 이 부분은 중점이 아닙니다.
    Dockerfile 쓰기
    #     
    FROM maven:3.5.0-jdk-8-alpine
    
    #   
    MAINTAINER liweichao
    
    #           
    ADD . /tmp/app/
    
    #     ,    ,      。
    RUN cd /tmp/app && mvn clean package -X &&\
        #            
        mv /tmp/app/target/*.jar /var/lib/app.jar &&\
        #      
        rm -rf /tmp/app
    
    #       
    ENV LANG="zh_CN.UTF-8"
    
    #      
    ENV spring.profiles.active="prod"
    
    #     
    VOLUME ["/logs"]
    
    #     
    EXPOSE 8080 9090 50983
    
    #     
    ENTRYPOINT java -server -Dfile.encoding=UTF-8 -Xmx1025m -Xss256k -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=50983 -Djava.security.egd=file:/dev/./urandom -jar /var/lib/app.jar
    

    여기에서 용기에서 코드를 컴파일하는 것은 실제 개발에서 제창하지 않습니다. 개발에서 이미지를 구축하고 컴파일하는 것은 분리되어야 합니다. 용기는 컴파일된jar 패키지만 추가하면 됩니다.
    위springboot 프로젝트의 모든 설정은github에서 찾을 수 있습니다. 문제가 있으면 개인 편지로 주십시오.
    전재 대상:https://juejin.im/post/5b419ca55188251b134e5929

    좋은 웹페이지 즐겨찾기