[英]How to deploy a python docker image to AWS Elastic beanstalk?
[英]How to deploy a custom docker image on Elastic Beanstalk?
查看此博客-5 . 創建Dockerfile 。 看來我不得不創建一個新的Dockerfile,指向我在Docker.io上的私有映像。
並且由於最后一條命令將啟動可執行文件,否則docker映像將在必殺技中結束,因此在末尾有監督:
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?)而不是使用supervisor? 除非我忽略了什么...
更新
我已經應用了建議的更新,但是無法對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"
}
]
}
使用Elastic Beanstalk部署容器時,可以告訴它從您定義的Dockerfile在每個主機上本地構建映像,或者使用注冊表中的預構建映像。
您不一定需要重新創建映像,您可以只使用一個已有映像(在Docker Hub或私有注冊表上)。
如果您的應用程序在托管存儲庫中可用的映像上運行,則可以在Dockerrun.aws.json文件中指定該映像,並省略Dockerfile 。
如果您的注冊帳戶需要身份驗證,則需要在S3存儲桶上提供一個.dockercfg文件,該文件將由Docker主機提取(因此您需要通過IAM角色賦予實例的適當權限)。
在Dockerrun.aws.json文件的Authentication參數中聲明.dockercfg文件。 確保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"
{
請參閱官方文檔,以獲取有關配置和可用選項的更多詳細信息。
至於你運行什么命令( supervisored ,等等),都沒關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.