在 AWS 上托管 Dockerized Django 项目
Host Dockerized Django project on AWS
我有一个 Django 项目,它在我的本地机器上运行良好。我想在 AWS 上托管相同的服务,但对使用什么服务以及最佳实践是什么感到困惑。我是使用 EC2,在其上创建一个 ubuntu 实例并安装 Docker 还是使用 ECS?
将我的 Django 项目转移到 AWS 的最佳做法是什么。我是否在 Docker hub 上创建存储库?
请帮我解释一下这方面的最佳工作流程。
我的 docker-compose
文件如下所示:
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=tg_db
- MYSQL_ROOT_PASSWORD=password
volumes:
- ./dbdata:/var/lib/mysql
web:
build: .
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
谢谢!
UPDATE(我为部署采取的步骤)
Dockerfile
:
# Start with a python image
FROM python:3
# Some stuff that everyone has been copy-pasting
# since the dawn of time.
ENV PYTHONUNBUFFERED 1
# Install things
RUN apt-get update
# Make folders and locations for project
RUN mkdir /code
COPY . /code
WORKDIR /code/project/t_backend
# Install requirements
RUN pip install -U pip
RUN pip install -Ur requirements.txt
我使用了 sudo docker-compose up -d
并且项目是 运行 在本地
现在我将 tg_2_web:latest
推到了 ECR
。
database
和 Apache
容器在哪里起作用。
我是否必须为 mysql database
和 apache
容器创建一个单独的存储库。
如何使用 ECS
连接所有容器?
谢谢!
这个问题的答案可能非常广泛,但只是为了让您了解它应该经历的所有过程 -
打包图片
- 您通过编写 Docker 文件创建了一个 docker 图像,该文件实际复制了您的 Python Django 源代码并安装了所有依赖项。
- 这可以在本地完成,也可以使用任何 CI/CD 工具完成。
存储图像
- 这是您将推送和存储 Docker 图像的部分。所有打包好的图片都会在这一步推送。
- 这可以是 EC2 实例可以从中获取 docker 图像的任何注册表,最好是 ECR,但您也可以选择 dockerhub。如果是 dockerhub,您需要将凭据存储到 S3 中。
正在部署映像
- 在这部分,您将把图像部署到 EC2 实例。
- 您可以根据需要使用各种服务,例如 ECS、ElasticBeanstalk 多容器或 Fargate(相对较新)。
- ECS - 最喜欢的部署方式,但您需要自己管理集群和资源。必须在 JSON 文件的任务定义中定义图像。
Beanstalk Multi Container - ECS 相对较新,在后台使用 ECS 将 docker 图像部署到集群。您不必担心资源问题,只需将 JSON 文件提供给您的环境,其余的由 Beanstalk 负责。
Fargate - 管理或部署您的容器,无需担心您的 clusters/managers 等。非常新,从未有机会了解它。
参考 -
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html
https://aws.amazon.com/fargate/
我有一个 Django 项目,它在我的本地机器上运行良好。我想在 AWS 上托管相同的服务,但对使用什么服务以及最佳实践是什么感到困惑。我是使用 EC2,在其上创建一个 ubuntu 实例并安装 Docker 还是使用 ECS?
将我的 Django 项目转移到 AWS 的最佳做法是什么。我是否在 Docker hub 上创建存储库?
请帮我解释一下这方面的最佳工作流程。
我的 docker-compose
文件如下所示:
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=tg_db
- MYSQL_ROOT_PASSWORD=password
volumes:
- ./dbdata:/var/lib/mysql
web:
build: .
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
谢谢!
UPDATE(我为部署采取的步骤)
Dockerfile
:
# Start with a python image
FROM python:3
# Some stuff that everyone has been copy-pasting
# since the dawn of time.
ENV PYTHONUNBUFFERED 1
# Install things
RUN apt-get update
# Make folders and locations for project
RUN mkdir /code
COPY . /code
WORKDIR /code/project/t_backend
# Install requirements
RUN pip install -U pip
RUN pip install -Ur requirements.txt
我使用了 sudo docker-compose up -d
并且项目是 运行 在本地
现在我将 tg_2_web:latest
推到了 ECR
。
database
和 Apache
容器在哪里起作用。
我是否必须为 mysql database
和 apache
容器创建一个单独的存储库。
如何使用 ECS
连接所有容器?
谢谢!
这个问题的答案可能非常广泛,但只是为了让您了解它应该经历的所有过程 -
打包图片
- 您通过编写 Docker 文件创建了一个 docker 图像,该文件实际复制了您的 Python Django 源代码并安装了所有依赖项。
- 这可以在本地完成,也可以使用任何 CI/CD 工具完成。
存储图像
- 这是您将推送和存储 Docker 图像的部分。所有打包好的图片都会在这一步推送。
- 这可以是 EC2 实例可以从中获取 docker 图像的任何注册表,最好是 ECR,但您也可以选择 dockerhub。如果是 dockerhub,您需要将凭据存储到 S3 中。
正在部署映像
- 在这部分,您将把图像部署到 EC2 实例。
- 您可以根据需要使用各种服务,例如 ECS、ElasticBeanstalk 多容器或 Fargate(相对较新)。
- ECS - 最喜欢的部署方式,但您需要自己管理集群和资源。必须在 JSON 文件的任务定义中定义图像。
Beanstalk Multi Container - ECS 相对较新,在后台使用 ECS 将 docker 图像部署到集群。您不必担心资源问题,只需将 JSON 文件提供给您的环境,其余的由 Beanstalk 负责。
Fargate - 管理或部署您的容器,无需担心您的 clusters/managers 等。非常新,从未有机会了解它。
参考 -
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_ecs.html
https://aws.amazon.com/fargate/