У разі, якщо ви плануєте використовувати приватні 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