Как развернуть собственный образ докера на Elastic Beanstalk?
Глядя на этот блог - 5. Создайте Dockerfile. Кажется, мне пришлось создать новый Dockerfile, указывающий на мой личный образ на Docker.io.
И поскольку последняя команда должна запустить исполняемый файл или образ докера окажется в нирване, в конце есть supervisrd:
FROM flux7/wp-site # This is the location of our docker container.
RUN apt-get install supervisor
RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 80
CMD supervisord -c /etc/supervisor/conf.d/supervisord.conf
Это немного смущает меня, потому что у меня есть полностью протестированный пользовательский образ Docker, который заканчивается supervisord
, увидеть ниже:
FROM ubuntu:14.04.2
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get -y update && apt-get upgrade -y
RUN apt-get install supervisor python build-essential python-dev python-pip python-setuptools -y
RUN apt-get install libxml2-dev libxslt1-dev python-dev -y
RUN apt-get install libpq-dev postgresql-common postgresql-client -y
RUN apt-get install openssl openssl-blacklist openssl-blacklist-extra -y
RUN apt-get install nginx -y
RUN pip install "pip>=7.0"
RUN pip install virtualenv uwsgi
RUN mkdir -p /var/log/supervisor
ADD canonicaliser_api /home/ubuntu/canonicaliser_api
ADD config_local.py /home/ubuntu/canonicaliser_api/config/config_local.py
RUN virtualenv /home/ubuntu/canonicaliser_api/venv
RUN source /home/ubuntu/canonicaliser_api/venv/bin/activate && pip install -r /home/ubuntu/canonicaliser_api/requirements.txt
RUN export CFLAGS=-I/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/include/
RUN source /home/ubuntu/canonicaliser_api/venv/bin/activate && cd /home/ubuntu/canonicaliser_api/canonicaliser/cython_extensions/ && python setup.py build_ext --inplace
RUN cp /home/ubuntu/canonicaliser_api/canonicaliser/cython_extensions/canonicaliser/cython_extensions/*.so /home/ubuntu/canonicaliser_api/canonicaliser/cython_extensions
RUN rm -rf /home/ubuntu/canonicaliser_api/canonicaliser/cython_extensions/canonicaliser
RUN rm -r /home/ubuntu/canonicaliser_api/canonicaliser/cython_extensions/build
RUN mkdir /var/run/flask-uwsgi
RUN chown -R www-data:www-data /var/run/flask-uwsgi
RUN mkdir /var/log/flask-uwsgi
ADD flask-uwsgi.ini /etc/flask-uwsgi/
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 8888
CMD ["/usr/bin/supervisord"]
Так как же мне использовать свое собственное изображение (CMD?) Вместо использования supervisord? Если я не пропускаю что-то....
ОБНОВИТЬ
Я применил предложенные обновления, но он не может пройти аутентификацию в частном репозитории на DockerHub.
[2015-08-11T14:02:10.489Z] INFO [1858] - [CMD-Startup/StartupStage0/AppDeployPreHook/03build.sh] : Activity execution failed, because: WARNING: Invalid auth configuration file
Pulling repository houmie/canon
time="2015-08-11T14:02:08Z" level="fatal" msg="Error: image houmie/canon:latest not found"
Failed to pull Docker image houmie/canon:latest, retrying...
WARNING: Invalid auth configuration file
dockercfg
внутри папки с именем docker
внутри S3 ведро
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "xxxx",
"email": "xxx@gmail.com"
}
}
}
Dockerrun.aws.json
является:
{
"AWSEBDockerrunVersion":"1",
"Authentication":{
"Bucket":"dd-xxx-ir-01",
"Key":"docker/dockercfg"
},
"Image":{
"Name":"houmie/canon",
"Update":"true"
},
"Ports":[
{
"ContainerPort":"8888"
}
]
}
1 ответ
При развертывании контейнеров с помощью Elastic Beanstalk вы можете указать, чтобы он создавал свой образ локально на каждом хосте из определенного вами Dockerfile или использовал предварительно созданный образ из реестра.
Вам не обязательно воссоздавать свое изображение, вы можете просто использовать уже имеющееся у вас (будь то в Docker Hub или в личном реестре).
Если ваше приложение работает с изображением, которое доступно в размещенном репозитории, вы можете указать изображение в файле Dockerrun.aws.json и опустить файл Docker.
Если ваша учетная запись реестра требует аутентификации, то вам нужно предоставить файл .dockercfg в корзину S3, которая будет извлечена хостами Docker (поэтому вам нужны соответствующие разрешения, предоставленные экземплярам через роль IAM).
Объявите файл .dockercfg в параметре Authentication файла Dockerrun.aws.json. Убедитесь, что параметр Authentication содержит действительные корзину и ключ Amazon S3. Ведро Amazon S3 должно размещаться в том же регионе, что и среда, в которой он используется. Elastic Beanstalk не будет загружать файлы из корзин Amazon S3, размещенных в других регионах. Предоставьте разрешения для действия s3:GetObject роли IAM в профиле экземпляра.
Итак, ваш Dockerrun.aws.json может выглядеть так (учитывая, что ваше изображение размещено в Docker Hub).
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "myBucket",
"Key": ".dockercfg"
},
"Image":
{
"Name": "yourRegistryUser/yourImage",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx"
{
Посмотрите официальную документацию для получения дополнительной информации о конфигурации и доступных опциях.
Что касается того, какую команду вы выполняете (супервизор, что угодно), это не имеет значения.