Dockerfile의 Git 비밀 키

2561 단어 dockerfile도커Git

배경



개발 환경에서의 작업시, Docker 사용해 프라이빗 리포지토리 clone 했을 때에, 비밀 열쇠 볼 수 버리는 것이 매우 신경이 쓰이고. 우선 여러가지 조사해 보았으므로 그 결과를 써 본다.

참고 사이트


  • 복사하고 rm하지? 괜찮아?
  • BuildKit 정보

  • 했던 일



    이하의 2개의 대응을 해 보았다.

    1. 멀티스테이지 빌드



  • 왜?

    docker history에 불필요한 단계가 표시되지 않도록

  • 방법, 방법

    as로 중간 아티팩트를 저장하고 마지막으로 거기에서 복사하여 중간 아티팩트의 내용을 볼 수없는 패턴
  • # syntax = docker/dockerfile:experimental
    FROM ruby:2.5 as intermediate
    
    # 処理諸々
    [・・・]
    
    # マルチステージビルド
    FROM ruby:2.5
    COPY --from=intermediate / /
    

  • 주의점

    COPY전까지 실시한 작업(ex. bundle install)에서 뭔가 디렉토리에 변경이 있었을 경우, 대상 디렉토리를 확실히 COPY할 필요가 있다.

    처음에는/root/root만을 대상으로 하고 있었지만, bundle install 로/usr/local/bundle 에 인스톨 되었기 때문에, COPY 대상외로, gem이 없어야 화났다.
  • 확인

  • 2. BuildKit 사용



  • 왜?
    ~/.ssh/id_rsa 같은 비밀 키를 컨테이너에 남기지 않기 위해

  • 방법, 방법
    --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa git clone 옵션을 붙여 git clone
  •  # Git
     ARG SSH_PRIVATE_KEY
     RUN mkdir /root/.ssh/
     RUN touch /root/.ssh/id_rsa
     RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa
    
     RUN touch /root/.ssh/known_hosts
     RUN ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts
     RUN chmod 600 /root/.ssh/*
    
     # プロジェクトclone
     WORKDIR /root/
     RUN --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa
     RUN git clone [プロジェクト]
     RUN rm /root/.ssh/id_rsa #→ rm しないと残ったままっぽい
    ↓
    $ docker build -t yaga0429/ruby-chromedriver --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" --no-cache
    
  • 확인


  • 요약



    ECR이라든지 image를 프라이빗으로 관리하거나 하면, 별로 신경이 쓰이지 않는 것일까.
    그 근처는 지금 모르겠지만, 어쩐지 깨끗이 했기 때문에 오케이.
    뭐 해 보았으므로 잊지 않는 사이에.

    좋은 웹페이지 즐겨찾기