阿里云ECS使用Dockerfile部署flask项目

背景

最近docker学的也差不多了。准备使用Dockerfile部署一个Python的flask项目。

前提准备

  • 本次部署需要提前去阿里云控制台配置安全组规则,开放一个端口(比如7000)用于宿主机和docker容器中的flask项目的5000端口做映射。
  • 阿里云ECS防火墙也需要开放7000端口。
  • 本次部署项目已被打成压缩包存放在AutomatedTestPlatform项目下的Docker目录下。

部署flask项目

编写Dockerfile

# FROM:必须项,必须有一个基镜像,代表当前新镜像是基于哪个镜像的
FROM python:3
# LABEL:用于为镜像添加元数据,元数以键值对的形式指定
LABEL maintainer='1912315910@qq.com'
LABEL description='flask project deploy whit dockerfile'
# WORKDIR:指定工作目录
WORKDIR /usr/src/app
# ADD:自动解压缩压缩包,并copy到工作目录
ADD ./watchlist.tar.gz ./
WORKDIR watchlist/
# RUN:RUN 指令是用来执行命令行命令的
RUN echo 'SECRET_KEY=88da9b29d97e4d33885b59f88600982c\nDATABASE_FILE=data-prod.db' >> ./.env \
    && pip install -i https://pypi.doubanio.com/simple -r requirements.txt \
    && flask initdb
# VOLUME:定义容器数据卷
VOLUME /usr/src/app/watchlist
# EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。
EXPOSE 5000
# CMD:容器启动命令
CMD [ "uwsgi", "--socket", "0.0.0.0:5000", "--protocol=http", "-p", "3", "-w", "watchlist:app"]
# 在当前Docker目录下通过此Dockerfile构建image:docker build -f flask_project_deploy_with_Dockerfile -t watchlist_app .
# 以前台形式启动容器:docker run --name watchlist_app_containter -d -p 7000:5000 watchlist_app
# 查看容器启动服务生成的所有日志:docker logs 已启动容器的ID
# 实时查看容器启动服务的日志(-f:实时查看日志, -t:显示时间戳):docker logs -ft 已启动容器的ID

使用git将项目clone至阿里云ECS下

git clone https://github.com/passerby223/AutomatedTestPlatform.git

使用指定的Dockerfile构建docker镜像

# 进入Docker目录
cd AutomatedTestPlatform/Docker/
# 开始构建docker镜像
docker build -f flask_project_deploy_with_Dockerfile -t watchlist_app .

以前台形式启动docker容器

docker run --name watchlist_app_containter -d -p 7000:5000 watchlist_app

查看docker容器是否启动且正常运行

# docker ps 展示当前正在运行的docker容器
[root@aliyun Docker]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2c8fd60b1efb        watchlist_app       "uwsgi --socket 0.0.…"   4 seconds ago       Up 3 seconds        0.0.0.0:7000->5000/tcp   watchlist_app_containter

查看docker容器中启动的服务的所有日志

docker logs 已启动容器的ID