Docker 部署 Flask 应用实践

  1. 打开docker
    在这里插入图片描述
  2. 在项目目录下编写 DockerFile 文件,以下是我项目中DockerFile文件,并对每一行进行解读
FROM python:3.6  # 项目的基础镜像为 python3.6
EXPOSE 8080  # docker的指定出口端口为8080

RUN mkdir /project_name  # 创建项目的目录
COPY . /project_name/   # 将项目代码全部复制过去
RUN mkdir /log  # 创建项目的日志文件夹
RUN mkdir /deployments   # 创建部署项目的脚本目录
COPY run.sh /deployments   # 将部署脚本复制到项目部署目录下

WORKDIR /project_name  # 指定项目目录为工作目录
RUN pip3 install --upgrade pip  # 升级pip包
RUN pip3 install -r requirements.txt -i http://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn  # 安装项目python环境所需要的包,这里指定了清华的镜像源,安装速度会快一些

ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["bash", "./run.sh"]  # 部署项目的命令
  1. 编写部署脚本 run.sh , 举例如下:
    我这里将服务名和每个服务的启动命令放到了列表中,去遍历
#!/bin/bash
#refer:https://docs.docker.com/config/containers/multi-service_container/

export PYTHONPATH=/project_name

# 所有服务的名字
server_names=(
'server:start_app'
'celery'
)


# 启动这些服务的bash命令,和server_names一一对应
start_commands=(
`nohup gunicorn 'server:start_app()' -c gunicorn.conf > /log/service.log 2>&1 &`
`nohup celery -A tasks.async_app worker --concurrency=3 -l INFO > /log/async_task.log 2>&1 &`
)

# 每个服务的日志的路径,和server_names一一对应
log_filenames=(
'/log/service.log'
'/log/async_task.log'
)

# 遍历所有服务,逐个启动
len=${#server_names[@]}
for ((i=0;i<$len;i++))
    do
        ${start_commands[$i]}
        PROCESS_STATUS=$?
        if [ $PROCESS_STATUS -ne 0 ]; then
            echo "Failed to start ${server_names[$i]}, please see error log"
             echo `cat ${log_filenames[$i]} | tail -n 150`
            exit PROCESS_STATUS
        fi
    done



# 每30s遍历所有服务,检测服务运行状态
while sleep 30; do
    for ((i=0;i<$len;i++))
        do
            ps aux |grep ${server_names[$i]} |grep -q -v grep
            PROCESS_STATUS=$?
            if [ $PROCESS_STATUS -ne 0 ]; then
                echo "ops~~ : ${server_names[$i]} has already exited, please see error log"
                echo `cat ${log_filenames[$i]} | tail -n 150`
                exit 1
            fi
        done
done

  1. 编写gunicorn.conf 文件,可以指定gunicorn启动服务的配置,举例
workers = 2
bind = "0.0.0.0:8080"
worker_class = "gevent"
timeout = 90
max_requests = 3000
threads = 8
  1. 本地测试
# 创建镜像,进入本地项目目录,指定Dockerfile所在路径
docker build -t project_name ~/PycharmProjects/project_name  

# 启动容器
docker run -it -p 8888:8080 project_name bash run.sh
  1. 若本地启动一切正常,编写.gitlab-ci.yml文件,推送到gitlib上,走CI/CD 流程,可以看到最新的pipeline已打包完成
    在这里插入图片描述
    在这里插入图片描述

  2. 将容器注册到gitlib上,方便以后直接拉取
    在这里插入图片描述

  3. 一些常用的 docker 命令

查看docker信息: docker info

查看镜像列表:docker images 

停用镜像:docker stop ImageID

重启镜像: docker start imageID

重命名镜像: docker tag imageID imageREPOSITORY:imageTAG

删除镜像:docker rmi imageID


查看容器:docker ps
	     docker ps -a 查看所有容器,包括启动失败的

重命名容器:dokcer rename 容器ID mytomcat7:jre7

停止容器:docker stop 容器Name

删除所有未启动容器:docker container prune

删除容器: docker rm ID


从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
使用 docker search 命令来搜索镜像。如搜索httpd的镜像。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值