최근 의 어려움을 뒤로하고 도커는 지난 한 해 동안 비즈니스 모델 을 크게 개편했습니다 . 이 혁신의 일환으로 8 월에 회사는 Docker Hub 서비스에 대한 큰 변경 사항도 발표했습니다. 2020 년 11 월 1 일부터 :
그래서 나는 물론 Docker의 변화를 완전히 이해합니다. 또한 명확하고 예측 가능한 사용 제한을 처리하는 것이 불확실성을 처리하는 것보다 쉽습니다.
Docker 팀 의 보장 에도 불구하고 특히 SaaS / PaaS 솔루션을 기반으로 구축 된 경우 많은 CI / CD 파이프 라인이 영향을받습니다 . 또한 11 월 1 일 마감일 훨씬 전에 일부 제한이 시행되고있는 것으로 보입니다. 작성 시점은 9 월 30 일이며 오늘은 내 CodePipeline의 일부 CodeBuild가 다음 오류로 인해 실패했습니다.
FROM ubuntu:18.04 AS baseimage
18.04: Pulling from library/ubuntu
171857c49d0f: Pulling fs layer
419640447d26: Pulling fs layer
61e52f862619: Pulling fs layer
error pulling image configuration: toomanyrequests: Too Many Requests. Please see https://docs.docker.com/docker-hub/download-rate-limit/
업데이트 —이 게시물 에서 Docker 팀은 소수의 "무거운 익명 사용자"가 인프라에 미치는 영향을 더욱 명확히했습니다. 이것은 다음 단락에서 내 고려 사항을 확인하는 것 같습니다.
이 프로젝트에서는 표준 Ubuntu 18.04 기본 이미지를 사용하여 애플리케이션을 빌드하고 있습니다. Docker Hub 인증에서 공개, 공식 참조 이미지를 가져 오지 않아도됩니다. 익명 사용자 로서 나는 파이프 라인에서 하나의 애플리케이션 을 빌드하기에 충분한 양보다 많은 6 시간 *마다 100 개의 풀을 부여 받아야합니다 .
내 애플리케이션의 파이프 라인은 AWS CodePipeline을 기반으로합니다. 다른 많은 타사 파이프 라인이 이러한 서비스를 기반으로 구축되며 동일한 호스트 및 IP 주소 풀을 공유합니다. 이로 인해이 CircleCI 스레드에 보고 된대로 소모가 제한되고 다른 많은 관리 CI / CD 서비스에 영향을 미칠 수 있습니다.
(*) 작성 당시 Docker Hub에서 익명 가져 오기에 대한 제한
이를 해결하는 간단한 방법은 파이프 라인에 개별 제한을 적용하는 것입니다. 이는 가져 오기 전에 Docker Hub에 로그인 하는 것을 의미 합니다. 무료 계정에 가입하는 것만 으로 6 시간 *에 200 개의 풀을 얻을 수 있습니다 . 또는 월 $ 5 *에 "무제한"풀을받을 수 있습니다.
(*) 작성 당시 사용 가능한 계획
계정을 사용하여 Docker Hub에 대한 요청을 인증 $ docker login
하는 것은 빌드 스크립트에 명령을 추가하는 것만 큼 간단 합니다. 자격 증명을 보호 하는 것은 까다 롭지 만 절대적으로 필요한 부분입니다.
첫째, 자격 증명을해야 런타임에 적용 A로부터 안전한 저장 . 빌드 스크립트에 하드 코딩하지 마십시오. 이러한 스크립트는 일반적으로 저장소에 커밋됩니다. 사용중인 CI / CD 서비스에 따라 더 나은 옵션을 사용할 수 있습니다. 저는 AWS CodeBuild를 사용 하고 있으며 Parameter Store 또는 Secrets Manager 에서 런타임에 환경 변수를 설정할 수 있습니다 . Travis CI를 사용하면 환경 변수 를 암호화 할 수 있습니다 . CircleCI 는 HashiCorp Vault 를 사용 하여 환경 변수를 보호합니다. Jenkins 는 기본적으로 자격 증명을 지원합니다 . 원하는 CI / CD 서비스 또는 자동화 도구의 문서를 검색하여 빌드시 자격 증명을 안전하게 삽입하는 가장 좋은 방법을 찾으십시오.
둘째, 명령 줄에서 --password
플래그 와 함께 암호를 전달하는 것은 확실히 나쁜 생각 입니다. 출력에 표시되거나 어딘가에 기록 될 수 있습니다. 일부 CI / CD 서비스는 출력 및 로그에서 비밀을 필터링 할 수있을만큼 똑똑하지만 당연한 것으로 여기지 마십시오. $ docker login
에서 비밀번호를 읽을 수 STDIN
있지만 파이프 라인이 자동화되어 있으므로 직접 비밀번호를 입력 할 수 없습니다. 환경 변수를 통해 자격 증명을 전달하면 플래그를 사용하여 암호를 명령에 안전하게 파이프 할 수 있습니다 --password-stdin
. DOCKERHUB_USERNAME
및 DOCKERHUB_PASSWORD
환경 변수가 런타임에 설정 되었다고 가정하고 "pull"또는 다음 명령 앞에이 명령을 추가합니다 $ docker build
.
echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
위에 표시된 솔루션은 AWS CodeBuild에서 쉽게 구현할 수 있습니다. 이 연습에서는 Parameter Store 를 자격 증명의 원본으로 사용합니다. Secrets Manager를 사용하는 것은 거의 동일합니다. 하지만 Parameter Store에는 넉넉한 프리 티어가 있으며 KMS 를 통한 암호화도 지원합니다 .
/{APPLICATION_NAME}/{ENVIRONMENT}/{PARAMETER_NAME}
{
"Action": [
"ssm:GetParameter",
"ssm:GetParameters"
],
"Effect": "Allow",
"Resource": "arn:aws:ssm:{AWS_REGION}:
{YOUR_AWS_ACCOUNT_ID}:parameter/my-application/dockerhub/*"
},
{
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Effect": "Allow",
"Resource": [
"{YOUR_KMS_KEY_ID_HERE}"
]
},
buildspec.yml
다음과 같이 애플리케이션 코드에서 파일을
편집하십시오 .
phases:
pre_build:
commands:
- echo Logging in to Docker Hub...
- echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin
# put the rest of your build commands after the "docker login" line
업데이트를 커밋 buildspec.yml
하고 CodeBuild에서 새 빌드 작업을 시작합니다. Docker Hub에 대한 로그인이 성공했는지 확인하려면 콘솔에서 로그를 조정하십시오.
위의 자습서는 Docker Hub에 대한 요청을 인증하여 레지스트리에서 공식 이미지를 가져오고이를 사용하여 CodeBuild에서 고유 한 Docker 이미지를 빌드하는 방법을 보여줍니다. 이러한 빌드 프로세스는 런타임 환경이라고하는 Docker 컨테이너 자체 내에서 실행됩니다. CodeBuild에서 자체 프라이빗 기본 이미지를 런타임 환경으로 사용 하려면이 공식 AWS 자습서를 따르십시오 .
CodeBuild로 Docker 이미지를 빌드 하는 방법 에 대한 공식 AWS 자습서 도 유용한 통찰력을 제공합니다.
컨텍스트 Kafka는 Teads에서 선택한 메시지 스트리밍 플랫폼입니다. 다른 지역에 여러 Kafka 클러스터가 있습니다.
"더 나은 오류 메시지를 작성하지 말고 필요하지 않은 코드를 작성하십시오." — Jason McDonald Backend Development — 대부분 웹, 소프트웨어 또는 앱에서 모든 것이 작동하는 방식에 관한 것입니다. 대부분은 애플리케이션 작동 방식의 중추입니다.
코딩과 기술력뿐만 아니라 3 년 전, 저는 사물이 어떻게 생겼을 지에 대한 수많은 가정과 기대를 가지고 기업 세계에 처음 발을 들여 놓았습니다. 내가 얼마나 잘못이 증명 될지 거의 알지 못했습니다.
"자동화되기를 바라는이 사소한 것이 있습니다."— 사소한 일이 아닐 것임을 알고 이것을 얼마나 자주 듣지 못했습니까? 아니면 당신이 더 잘 알면서도 직접 말 했나요? 왜 단순한 것들은 소프트웨어 개발에서 결코 단순하지 않고, 여기저기서 몇 가지 작은 것들이 빠진 것과 당신이 만들어야했던 몇 가지 지름길을 아는 것에 대한 좌절없이 우리가 기능을 "적절하게"구현하는 것을 방해하지 않는가? 프로젝트의 다음 기한을 잡을 수있을만큼 모든 것이 제대로 작동하도록하려면? Europe Elects의 다른 사람들과 함께 여러 유럽 국가의 여론 조사에서 주요 데이터를 수집하는 약간의 취미 프로젝트가 있습니다. 이 프로젝트에서는 모든 정보를 수집 할 수있는 인프라를 설정해야합니다.
Detox는 모바일 앱용 그레이 박스 테스트 솔루션으로, 테스트 코드와 앱 간의 동기화를 관리하므로 사용자가 수동으로 수행 할 필요가 없습니다. 사용자의 필요와 풍부한 문서 및 가이드가 없어도 개발자와 테스터는 여전히 사용 패턴, 잘못된 구성, 열악한 테스트 안정성으로 어려움을 겪을 수 있습니다.