비공개 레지스트리를 위해 Docker를 로컬로 설정

이 설정이 필요한 이유는 무엇입니까?



자체 기본 이미지를 구축하거나 사용자 지정 Docker 기본 이미지가 있는 조직의 경우 AWS 등과 같은 개인 Docker 레지스트리에서 호스팅될 가능성이 높습니다.

로컬 시스템에서 해당 Dockerfile을 실행하려면 먼저 인증해야 합니다. Artifactory(jFrog)와 같은 Docker 레지스트리와 함께 사용되는 외부 인증 서비스가 있을 수 있습니다.

Docker(개인) 레지스트리란 무엇입니까?



Docker 레지스트리는 명명된 Docker 이미지의 저장 및 배포 시스템입니다.

프라이빗 Docker 레지스트리를 사용하면 조직 내에서 기본 이미지를 공유하고 사용할 수 있습니다. 이는 아키텍처의 빌딩 블록을 위한 중앙 집중식 소스입니다.



시작하기



이 예에서는 비공개 이미지 및 플러그인에 대한 인증 서비스로 Artifactory에 초점을 맞춥니다.

기본 사용자 지정 이미지 다운로드:



자격 증명을 사용하여 Docker 레지스트리에 로그인해야 합니다.

아티팩토리의 경우,
  • 귀사의 Artifactory 클라이언트에 로그인하십시오.
  • 이름의 오른쪽 상단 모서리를 클릭합니다.
  • 선택 Set me up
  • 패키지 유형: docker
  • 관련 저장소를 선택합니다.

  • 이제 비공개 이미지를 인증하고 다운로드하기 위해 실행해야 하는 명령이 표시됩니다.

    다음과 같아야 합니다.

    docker login {org-name}-{docker-repository-name}.jfrog.io
    


    또는 다음과 같이 ~/.docker/config.json 파일에 자격 증명을 수동으로 추가할 수 있습니다.

    {
        "auths": {
            "https://{org-name}-{docker-repository-name}.jfrog.io": {
                "auth": "{username}:{PASSWORD} (converted to base 64)",
                "email": "[email protected]"
            }
        }
    }
    


    이제 맞춤형 비공개 이미지를 다운로드할 수 있습니다. Dockerfile이 어떻게 생겼는지 살펴보고 Artifactory에서도 호스팅되는 개인 라이브러리를 설치하는 방법을 살펴보겠습니다.

    개인 라이브러리용 Dockerfile 설정:



    우리는 개인 라이브러리/보석 등에 대한 인증 서비스로 Artfactory에 집중할 것입니다.

    Dockerfile은 다음과 같아야 합니다.

    # Fetch base image
    FROM {org-name}-{docker-repository-name}.jfrog.io/{path-to-docker-image}
    LABEL maintainer="Tanmay Jain <[email protected]>"
    
    # Setup your work directory
    ARG APP_HOME=/home/app/web
    WORKDIR $APP_HOME
    
    # Copy required files
    COPY Gemfile.lock $APP_HOME
    RUN gem install bundler --force -N -v "$(tail -n 1 Gemfile.lock | tr -d '[:blank:]\n')" && bundle --version
    
    COPY . $APP_HOME
    
    RUN chown -R app:app $APP_HOME
    
    USER app
    
    # Setup ssh keys to allow installing gems from artifactory
    ARG SSH_KEY
    ENV SSH_KEY=$SSH_KEY
    
    # Create id_rsa from string arg, and set permissions
    RUN echo "$SSH_KEY" > /root/.ssh/id_rsa
    RUN chmod 600 /root/.ssh/id_rsa
    
    # Create known_hosts
    RUN touch /root/.ssh/known_hosts
    
    # bundle rubygems
    ENV BUNDLE_DEPLOYMENT=true
    ARG BUNDLE_JOBS=4
    ARG BUNDLE_WITHOUT=development:test
    RUN --mount=type=ssh,target=/home/app/.ssh/id_rsa,uid=9999,gid=9999 \
        --mount=type=secret,id=artifactory,uid=9999,gid=9999 \
        BUNDLE_{ORG-NAME}__JFROG__IO={JFROG_USERNAME}:{JFROG_API_KEY} bundle install
    
    EXPOSE 3000
    CMD ["bundle", "exec", "rails", "server"]
    
    


    다음 명령을 사용하여 Dockerfile에서 빌드합니다.

    docker build --build-arg SSH_KEY="$(cat ~/.ssh/id_rsa)" .
    


    위에서 수행한 작업을 살펴보겠습니다.
  • 다음 명령은 현재 액세스 권한이 있는 개인 사용자 정의 기본 이미지를 가져옵니다.

  • FROM {org-name}-{docker-repository-name}.jfrog.io/{path-to-docker-image}
    


  • 다음 명령은 번들링 보석에 필요한 your Gemfile.lock 를 복사합니다. package.json , yarn.lock Gemfile 등과 같은 다른 파일도 필요에 따라 복사해야 합니다.

  • COPY Gemfile.lock $APP_HOME
    


  • 다음 명령을 사용하여 개인 라이브러리를 다운로드할 수 있는 액세스 권한이 있는 개인ssh 키를 추가합니다.

  • ARG SSH_KEY
    ENV SSH_KEY=$SSH_KEY
    RUN echo "$SSH_KEY" > /root/.ssh/id_rsa
    RUN chmod 600 /root/.ssh/id_rsa
    RUN touch /root/.ssh/known_hosts
    


  • 다음 명령은 방금 복사한 ssh 키를 사용하여 비공개 gem/라이브러리를 설치하는 데 사용됩니다.

  • RUN --mount=type=ssh,target=/home/app/.ssh/id_rsa,uid=9999,gid=9999 \
        --mount=type=secret,id=artifactory,uid=9999,gid=9999 \
        BUNDLE_{ORG-NAME}__JFROG__IO={JFROG_USERNAME}:{JFROG_API_KEY} bundle install
    


    개인 저장소에서 이미지와 라이브러리를 가져오는 Docker를 사용하여 로컬 머신을 설정하는 방법입니다.

    좋은 웹페이지 즐겨찾기