Makefile을 사용하여 (도커) 컨테이너 빌드 및 게시

3393 단어 docker


make 및 dockerfiles, Horatio,
귀하의 문서에 설명되어 있습니다.

소개



우선, 도커가 컨테이너의 동의어임에도 불구하고 그 반대는 사실이 아니라는 점을 인정하는 것으로 이 짧은 사고 과정을 시작하겠습니다.

우리는 컨테이너의 기원에 대해 자세히 알아볼 수 있지만 여기서 설명하려고 시도할 수 있는 것보다 훨씬 더 유효한 기사가 많이 있습니다.

나는 컨테이너, 도커 및 도커 파일이 이 글을 읽는 모든 사람에게 새로운 용어가 아니라고 가정하지만, 그렇다면 아마도 containers , docker 및 [dockerfile].( https://docs.docker.com/engine/reference/builder/ )을 확인하여 시작할 수 있습니다.

동기 부여



일반적으로 내가 이것 또는 저 컨테이너를 성공적으로 빌드하는 데 필요한 단계를 절대 잊지 않도록 하기 위해 dockerfile을 작성할 때 나는 항상 하드코딩된 모든 버전 번호와 변수의 정의에 실제로 맞을 수 있는 다른 것들을 살펴보지만 어떤 이유로 인해 (커밋&푸시) 후손을 위해 끝납니다.

지금쯤 당신은 좋은 말을 사용하여 이 사람이 docker 빌드 인수로 작업하는 방법을 배우고 내 시간 낭비를 중지해야 한다고 생각하고 있을 것입니다.

도커파일


첫 번째 단계: kubectl 만나기



kubectl이 무엇인지 또는 무엇을 하는지는 이 게시물의 범위를 벗어납니다. 내 마음에 가장 먼저 떠오른 것이기 때문에 우리는 그것을 예로서만 사용하고 있습니다.
kubectl용 작은 컨테이너를 빌드해 보겠습니다.

FROM alpine:3.12

ADD https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl /usr/local/bin/kubectl

RUN chmod +x /usr/local/bin/kubectl

ENTRYPOINT ["kubectl"]

보시다시피, 작은 도커 파일에는 2개의 하드코딩된 버전이 눈에 들어옵니다.
  • 알파인 버전 자체
  • kubectl 버전

  • 두 번째 단계: 일부 조정



    다행스럽게도 Dockerfile 구문(수년에 걸쳐 진화하든 그렇지 않든)을 통해 몇 가지 멋진 수정을 할 수 있습니다.

    ARG ALP_VER=3.12
    FROM alpine:$ALP_VER
    
    ARG KCTL_VER=1.18.0
    
    ADD https://storage.googleapis.com/kubernetes-release/release/v${KCTL_VER}/bin/linux/amd64/kubectl /usr/local/bin/kubectl
    
    RUN chmod +x /usr/local/bin/kubectl
    
    ENTRYPOINT ["kubectl"]
    

    이제 이 두 버전을 원하는 대로 수정할 수 있을 뿐만 아니라 인수를 전달하지 않고 이미지를 빌드할 수 있으므로(기본 버전으로 빌드됨) 이미지를 빌드할 수 있습니다.

    물론 그냥 가서 해당 Dockerfile과 함께 작동하고 이러한 인수를 조작하는 방법을 보여주는 docker build 명령을 실행할 수 있습니다.docker build --build-arg ALP_VER=3.11 --build-arg KCTL_VER=1.18.0 -t my_kubectl:1.18.0 . .

    하지만 그것만으로는 충분하지 않았습니다. 그렇게 어렵지는 않지만 여러 dockerfile의 인수 이름을 기억해야 합니다.

    메이크파일



    나는 더 간단한 구문에만 만족하기로 결정했습니다.
    긴 명령을 입력하게 만들지 않았을 뿐만 아니라 동시에 단순하고 못생긴 bash 스크립트보다 조금 더 좋은 것입니다.




    이제 원하는 버전을 사용하여 빌드할 수 있습니다.



    • 디폴트make build
    • 다른 알파인 버전make build alpver=3.11
    • 다른 kubectl 버전make build kctlver=1.17.0
    • 두 수정된 버전make build alpver=3.11 kctlver=1.17.0


    구성된 레지스트리를 빌드하고 푸시할 수 있습니다



    • 디폴트make
    • 다른 알파인 버전make alpver=3.11
    • ... 등등 ...


    또는 해당 이미지에서 변경할 수 있는 항목을 쉽게 확인할 수 있습니다(파일을 열지 않고).



    • make help


    확실히 저장소 이름과 같이 어딘가에 하드코딩된 다른 것들이 있지만 이것은 시작에 불과합니다.



    물론 이것이 THE WAY나 THE ONLY WAY는 아닙니다. I'm not that naive. 다른 많은 옵션을 사용할 수 있다고 확신하며 댓글 영역에서 이에 대해 알고 싶습니다.

    좋은 웹페이지 즐겨찾기