Dockerfile 및 모범 사례 향상

주제 또는 개선에 대한 당신의 조언/Chris를 기꺼이 듣고 싶습니다.

Dockerfile 자세히 보기


그래, 그럼 너는 Docker에 대해 잘 알고 있어.너는 아마 내 방이나 다른 곳에서 주웠을 것이다.어쨌든, 너는 기초를 이해하는 것에서 더 잘하는 단계에 처해 있다.이것이 바로 본고가 당신에게 보여준 내용입니다. 특히 Dockerfiles의 기존 기초 지식을 어떻게 개선하는지.

리소스


  • Best practices on Dockerfiles 여기에 긴 힌트가 있습니다.조만간 너는 이곳을 보고 너의 설정을 개선하고 싶을 것이다.

  • Push your Docker images to a container registry in the Cloud 당신의 Docker 이미지는 Docker Hub의 어느 곳에 저장해야 합니다. Docker Hub는 당신과 동료만 접근할 수 있는 개인 등록표이거나 왜 클라우드에 개인 등록표를 저장하지 않습니까?
  • Dockerfile에 대한 자세한 내용


    Dockerfile은 하나의 설계도 파일과 같다는 것을 알고 있습니다. 우리는 운영체제 이미지, 설치해야 할 라이브러리, 환경 변수, 우리가 실행하고자 하는 명령 등을 지정할 수 있습니다.모든 것이 거기에 있고, 서류에 지정되어 있으며, 당신이 무엇을 얻었는지 아주 잘 알고 있습니다.이것은 진정으로 위대한 진보이다. 우리의 기계에서 물건이 막 일을 시작한 날이거나, 우리가 몇 시간 또는 며칠의 시간을 들여 물건을 설치했을 때. 이것은 진보이다.

    Dell Dockerfile 샘플


    Dockerfile이 만들어져 모양을 알 수 있습니다.우리가 그것을 더 잘 이해할 수 있도록 문서의 각 부분을 토론합시다.다음은 다음과 같습니다.
    // Dockerfile
    FROM node:latest
    
    WORKDIR /app
    
    COPY . .
    
    RUN npm install
    
    EXPOSE 3000
    
    ENTRYPOINT ["node", "app.js"]
    
    
    이것은 매우 전형적인 문건이다.우리는 운영체제 이미지를 선택하고 작업 디렉터리를 설정하며 필요한 파일을 복사하고 라이브러리를 설치하고 포트를 열고 프로그램을 실행합니다.그게 뭐가 잘못됐어?

    운영 체제 이미지 크기


    언뜻 보기에는 모든 것이 우리가 예상한 것과 같지만 자세히 보면 우리가 사용한 것은 node:latest을 그림으로 볼 수 있다.다음 명령을 사용하여 Docker 이미지에 구축해 보겠습니다.
    docker build -t optimize/node .
    
    좋습니다. 이제 docker images을 실행하여 우리의 이미지를 보고 더 많은 데이터를 얻을 수 있습니다.

    무게 899MB
    좋습니다. 비교할 것은 없지만, 이미지를 node:alpine이라는 이미지로 바꾸고, 이미지를 재구성합시다.

    77.7MB, 와!!!이것은 우리의 부두 노동자의 이미지가 원래의 10배인 거대한 차이이다.왜?
    이 이미지는 Alpine Linux Project
    일반적으로 Alpine Linux 이미지는 정적 분포보다 훨씬 작습니다.그것은 here을 읽을 수 있는 한계가 있다.그러나 전반적으로 이것은 안전한 선택이다.

    캐시


    Dockerfile에 지정된 각 명령에 대해 다른 이미지 레이어가 만들어집니다.그러나 Docker는 레이어를 만들기 전에 캐시를 확인하고 기존 레이어를 다시 사용할 수 있는지 확인합니다.
    우리가 추가와 복사 같은 명령을 언급할 때, 우리는 그것들이 캐시 상하문에서 어떻게 작동하는지 알아야 한다.두 명령에 대해 Docker는 각 파일의 체크섬 체크섬을 계산하여 캐시에 저장합니다.Docker 이미지를 새로 구성할 때 각 체크섬 비교가 수행되고 파일의 변경 내용으로 인해 다른 경우 체크섬 계산이 다시 수행됩니다.새 이미지 레이어가 생성됩니다.

    질서가 중요하다


    Docker의 작동 방식은 가능한 한 많이 재사용하는 것이다.우리가 할 수 있는 가장 좋은 일은 명령을 가장 변경할 수 없는 위치에서 가장 변경할 수 있는 위치로 Dockerfile에 놓는 것이다.

    What does that mean?


    Dockerfile의 상단을 살펴보겠습니다.
    FROM node:alpine
    
    WORKDIR /app
    
    여기서 우리는 FROM 명령이 먼저 나타나고 그 다음은 WORKDIR를 볼 수 있다.이 두 명령 모두 운영체제를 바꿀 수 없다. 왜냐하면 그것들은 맨 위에 정확하게 놓여 있기 때문이다.

    What is likely to change though?


    알겠습니다. 응용 프로그램을 구축하고 있기 때문에 응용 프로그램의 원본 파일을 만들거나, npm install과 같이 파일의 맨 아래에 놓을 수 있는 라이브러리를 갑자기 깨닫게 됩니다.

    What do we gain by doing this?


    속도, 우리는 Docker 이미지를 구축할 때 속도를 얻었고, 가능한 한 효율적으로 명령을 배치했다.결론적으로 ADD, COPY, RUn은 나중에 Dockerfile에서 수행해야 할 명령입니다.

    계층 구조 최소화


    입력한 각 명령은 새 이미지 레이어를 생성합니다.명령 수를 최소화해야 합니다.가능하다면 그들을 조로 나누어라.쓰기 대신
    RUN command
    RUN command2
    
    이렇게 그들을 조직한다.
    RUN command && \
        command2
    

    네가 필요로 하는 것만 포함한다


    응용 프로그램을 만들 때이는 많은 수의 파일로 구성되기 쉬우나 Docker 이미지를 만드는 데 필요한 실제 내용과 관련이 있을 때 파일의 수가 감소합니다.만약 당신이 .dockerignore 파일을 만들었다면, 파일을 포함할 때, 우리는 우리의 용기에 사용할 파일만 얻을 수 있도록 패턴을 정의할 수 있습니다.

    시작 스크립트 정의


    명령 CMD를 사용하든 ENTRYPOINT를 사용하든 so node app.js처럼 프로그램을 직접 호출해서는 안 됩니다.반대로 npm start과 비슷한 시작 스크립트를 정의해 보십시오.

    Why you ask?


    우리는 우리가 융통성이 있고 이 지시를 바꿀 수 없다는 것을 확보하기를 바란다.우리는 최종적으로 우리가 프로그램을 시작하는 방식을 바꿀 수 있다. 예를 들어 node app.js --env=dev --seed=true과 같은 로고를 프로그램에 점차적으로 추가할 것이다.너는 이것이 잠재적인 이동 목표라는 것을 알았다.그러나 우리는 npm start, 시작 스크립트에 의존하여 더욱 유연한 것을 얻었다.

    태그 사용


    명령 태그를 사용하여 Dockerfile을 더 잘 설명할 수 있습니다.자동화와 잠재적인 용례를 실현하는 데 도움을 줄 수 있는 파일을 만들 수 있다. 어떤 정보를 거기에 두는 것이 의미가 있는지 가장 잘 알지만, 그 존재는 모든 이미지를 정리하는 것을 지원하기 위해서이기 때문에 충분히 이용해야 한다.탭 값은 so LABEL [key]-[value]과 같은 키 값 쌍입니다.각 레이블 명령에는 여러 개의 레이블이 있을 수 있습니다.실제로, 이것은 label 명령에서 모든 라벨을 수집하는 것으로 여겨진다.각 키 값 쌍을 공백 또는 유사 문자로 구분하여 다음을 수행할 수 있습니다.
    LABEL key=value \
          key2=value2
    

    EXPOSE가 있는 기본 포트에 의존


    EXPOSE는 컨테이너의 포트를 여는 데 사용됩니다.이 포트의 컨테이너와 통신할 수 있도록 -p 명령을 Docker run docker run -p [external]: [exposed docker port]과 결합하여 사용할 수 있습니다.가장 좋은 방법은 노출된 포트를 아파치 서버의 포트 80과 Mongo DB 데이터베이스의 포트 27017 등 기본 포트로 설정하는 것입니다.

    명시적으로 추가 대신 복사 사용


    언뜻 보기에는 복제와 첨가가 같은 일을 한 것 같지만 조금 다르다.ADD는 또한 TAR 파일을 추출할 수 있는데 이것은 COPY가 할 수 없는 것이다.따라서 파일을 복사할 때 COPY를 명확하게 사용하고 특정한 기능을 사용할 때, 예를 들어 앞에서 언급한 TAR 추출을 사용할 때만 ADD를 사용할 수 있도록 확보해야 한다.

    요약


    Dockerfile에 관해서는 많은 최선의 실천이 필요하지만, 이 글에서 언급한 가장 큰 장점은 가능한 한 작은 그림을 사용하는 것이다. 예를 들어alpine이다.그것은 당신의 그림 크기에 기적을 일으킬 수 있다. 특히 저장 크기가 당신이 돈을 써서 산 것이라면.
    Dockerfile best practices docs 자세히 보기

    좋은 웹페이지 즐겨찾기