Доступ до приватних Docker-образів з AWS Elastic Beanstalk

У разі, якщо ви плануєте використовувати приватні Docker-образи, вам потрібно пройти аутентифікацію з реєстрами образів, щоб здійснювати pull та push з вашого облікового запису Docker Hub.

Крок 1: Створення файлу dockercfg

У нових версіях Docker для macOS змінилося збереження облікових даних: тепер вони зберігаються в keychain macOS, а не в конфігураційному файлі.

Ось простий спосіб створити відповідний файл аутентифікації на macOS.

Спочатку додайте наступні облікові дані як змінні середовища у файл з назвою credentials.env:

DOCKER_USERNAME= — вставте ваше ім’я користувача —   
DOCKER_PASSWORD= — вставте ваш пароль —   
DOCKER_REGISTRY=https://index.docker.io/v1/

Далі виконайте наступну команду Docker, яка використає образ, що підтримується codeship, щоб обробити ваші облікові дані та створити стандартизований файл dockercfg:

docker run -it --rm --env-file=credentials.env -v "$(pwd):/opt/data/" -v "/var/run/docker.sock:/var/run/docker.sock" codeship/dockercfg-generator /opt/data/dockercfg

Ця команда створить файл dockercfg у тій самій папці, де ви виконали команду.

Крок 2: Перевірка сумісності файлу з AWS

На момент написання цього тексту, файл dockercfg, створений на попередньому кроці, має бути сумісним з AWS. AWS очікує, що файл буде мати такий формат:

{   
 "auths": {   
 "https://index.docker.io/v1/": {   
 "auth": "___authstring___",   
 }   
 }   
}

Крок 3: Створення S3 бакету та зміни у вашому файлі Dockerrun.aws.json

Згідно з документацією AWS, щоб використовувати Docker-образи з приватного репозиторію, потрібно додати інформацію про Amazon S3 бакет, що містить файл аутентифікації, в параметр Authentication файлу Dockerrun.aws.json. Переконайтесь, що параметр Authentication містить правильний Amazon S3 бакет і ключ. Ось посилання на документацію AWS — https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/single-container-docker-configuration.html#single-container-docker-configuration.privaterepo

{   
 "AWSEBDockerrunVersion": "1",   
 "Authentication": {   
 "Bucket": "**_my-bucket_**",   
 "Key": "**_dockercfg_**"   
 },   
 "Image": {   
 "Name": "johndoe/private-repository",   
 "Update": "true"   
 },   
 "Ports": [   
 {   
 "ContainerPort": "5000"   
 }   
 ]   
}

Щоб виконати це, створіть бакет та завантажте файл в цей бакет. Переконайтесь, що бакет НЕ є публічно доступним. Ми будемо використовувати IAM роль для надання доступу EB (Elastic Beanstalk) до цього об’єкта в S3 бакеті.

Elastic Beanstalk створить роль з назвою “aws-elasticbeanstalk-ec2-role” для доступу до Docker. Прикріпіть політику “AmazonS3ReadOnlyAccess” до цієї ролі, щоб вона могла отримувати доступ до S3 бакетів.

Voilà! Тепер ви готові використовувати ваш приватний Docker-образ з Elastic Beanstalk.

Перекладено з: Accessing private Docker images from AWS Elastic Beanstalk

Leave a Reply

Your email address will not be published. Required fields are marked *