Docker Compose -> Dockerrun.aws.jsonに書き換えて、Nginx, uWSGI+Djangoのデプロイ
概要
Docker Compose -> Dockerrun.aws.jsonに書き換えて、Nginx, uWSGI+Djangoのデプロイ
参考サイト
やったこと
- Docker Composeのbuild している箇所をあらかじめimageとして登録しておく
- Docker compose -> Dockerun.aws.jsonに変える。
- ElasticBeanstalkで、複数コンテナでデプロイする。
Docker Composeのbuild している箇所をあらかじめimageとして登録しておく
- 以下のフォルダを丸ごとgit hubに登録する。
uWSGI用
Dockerfile # これは、uWSGI,django用のDockerfile my app - manage.py - myapp - requirements.txt - static uwsgi.sh
nginx用
Dockerfile nginx.conf
- docker hub に、github経由で、automated_createで登録する。
Docker compose -> Dockerun.aws.jsonに変える
- docker-compose.ymlをちょっと変更する。
uwsgi: image: dockerhub/uwsgi-django command: ./uwsgi.sh volumes: - /static nginx: build: dockerhub/nginx-django links: - uwsgi volumes_from: - uwsgi ports: - "0.0.0.0:80:80"
{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "app-root", "host": { "sourcePath": "/var/app/current/app/" } } ], "containerDefinitions": [ { "name": "uwsgi", "image": "dockerhub/uwsgi-django", "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "app-root", "containerPath": "/src/app/" } ] }, { "name": "nginx", "image": "dockerhub/nginx-django", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "mountPoints": [ { "sourceVolume": "app-root", "containerPath": "/src/app/" } ], "links": [ "uwsgi" ] } ] }
ポイント * imageを差し替える。hostPort80, containerportも80にする。
ElasticBeanstalkにデプロイしてみる。
Error発生!
ERROR Failed to start ECS task after retrying 2 times.
Elastic BeanstalkにECSのアクセス権限がないぽいので、ロールを変更する。
Docker イメージを作って AWS EC2 Container Registory (ECR) にプッシュし、ElasticBeanstalk でデプロイする - Qiita
aws-elasticbeanstalk-ec2-role を選択し、「ポリシーのアタッチ」→ container で検索して、AmazonEC2ContainerRegistryReadOnly をアタッチします。
再度デプロイしてみる。。。またも失敗!たぶん、commandが設定されてないせいだな。
ということで、一旦dockerfileからimageを設定し直してみる。
dockerfileからimage設定し直し
以下の記事で、設定する。
pythonskywalker.hatenablog.com
再度eb deployしてみる。
お〜〜〜、deployできた!意外と1つのコンテナに詰め込むよりはわかりやすくていいかもしれんな(^ ^)/
最終的なDockerrun.aws.jsonは以下の通り。
{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "app-root", "host": { "sourcePath": "/var/app/current/app/" } } ], "containerDefinitions": [ { "name": "uwsgi", "image": "dockerhub/uwsgi-django", "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "app-root", "containerPath": "/src/app/" } ] }, { "name": "nginx", "image": "dockerhub/nginx-django", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "mountPoints": [ { "sourceVolume": "app-root", "containerPath": "/src/app/" } ], "links": [ "uwsgi" ] } ] }
次からは、ちょっとずつ修正していこう。