博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker部署Flask项目 三
阅读量:5250 次
发布时间:2019-06-14

本文共 5258 字,大约阅读时间需要 17 分钟。

Docker 部署 Flask项目

该项目采用的时 nginx+mariadb+uwsgi的方式,主要时熟悉一些docker的基本的操作,如果只是单纯的单机的部署,建议还是采用传统的方式好点

环境搭建

#拉取镜像官方 Imagesudo docker pull pythonsudo docker pull nginxsudo docker pull mariadb#导出依赖pip freeze > requirements.txt# 安装依赖pip install -r requirements.txt

创建Mariadb容器

其实不建议数据库用容器创建,用本机的好点,便于维护

# 创建一个名为 mariadb01容器sudo docker run --name mariadb01 -e MYSQL_ROOT_PASSWORD=R319913j -d  mariadb# 进入容器创建数据库,建议用dockerfilesudo docker exec -it mariadb01 /bin/bash#登录mysqlmysql -u root -p R319913j#创建数据库create databse ginger#退出exit

创建python容器

编写DockerFile的方式创建镜像,进而创建容器。

# 基础镜像FROM python# 指定创建者信息LABEL maintainer="rao@demo.com"# 复制项目到容器指定目录, ADD有相识的功能并具有解压功能COPY FlaskDemo /app/# 切换工作目录WORKDIR /app# 执行命令RUN pip install -r /app/requirement.txtWORKDIR /app/FlaskDemo/# 将容器中的端口暴露出来EXPOSE 5000# 容器启动时执行的命令CMD ["uwsgi","--http",":5000","--wsgi-file","RaoShop.py","--callable", "app"]s#配置文件启动,注意路径,这个很容器出现问题CMD ["uwsgi","--ini","uwsgi.ini"]

uwsgi配置文件,走nginx http 配置改为 socket

[uwsgi]#这个地址建议 flask app配置地址一致http=0.0.0.0:5000# 项目目录chdir=/app/FlaskDemo# 启动uwsgi的用户名和用户组uid=rootgid=root#flask项目必须的配置callable= app#指定虚拟环境路径#home=/home/rao/.virtualenvs/FlaskDemo-w2G0QPDG# 指定项目启动文件,该路径是相对于 chdir目录来的wsgi-file = /app/FlaskDemo/RaoShop.py# 启用主进程master=true# 进程个数workers=5pidfile=/app/FlaskDemo/scripts/uwsgi.pid# 自动移除unix Socket和pid文件当服务停止的时候vacuum=true# 序列化接受的内容,如果可能的话thunder-lock=true# 启用线程enable-threads=true# 设置自中断时间harakiri=30# 设置缓冲post-buffering=32768# 设置后台启动,在docker容器中,需要禁用该配置(未知)#daemonize=/app/FlaskDemo/scripts/uwsgi.logi# 设置缓存大小buffer-size=32768

创建镜像

# 在当前目录查找dockerfile创建Imagesudo docker build -t test01 .

创建容器

# 创建test01容器, --link 连接 mariadb01 -e 指定环境变量
sudo docker run -d --name test01 -v$(pwd):/app --link mariadb01:mysql -e MYSQL_HOST=mariadb01 test01

Nginx容器

编写nginx的confi文件,映射到相依目录下

server {    listen       80;    # ifconf 内网地址    server_name  0.0.0.0    #开启静态文件处理强能力    sendfile on;    #charset koi8-r;    #配置请求日志    #access_log  /var/log/nginx/host.access.log  main;    # uwsgi相关参数配置    location / {        include uwsgi_params;        # 这个地址,通过 sudo docker inspect test01 查看ip地址,端口与 uwsgi配置文件一致        uwsgi_pass 172.17.0.3:5000;    }    # 静态文件定义    location /static {        #开启gzip        #gzip on;        #指定gzip http的版本        #gzip_http_version 1.1;        #指定gzip压缩比        #gzip_comp_level 2;        #指定需要压缩的格式        #gzip_types text/pain application/javascript application/x-javascript text/css/application/xml text/javascript application/x-http-php ima  # e/jpeg image/gif image/png;        # 映射的静态文件目录 实际为 /opt/test/static        root /opt/test ;    }}

创建容器

# -v 映射相关nginx目录 -p 映射端口
docker run -d --name nginx01 -p 8080:80 -v /home/rao/dokcerdemo/html:/usr/share/nginx/html -v /home/rao/dockerdemo:/opt/test -v /home/rao/dockerdemo/nginx.conf:/etc/nginx/conf.d --link test01 nginx

查看验证

至此三个容器创建创建完毕,验证

# 浏览器验证
# http://127.0.0.1:8080/admin/
# 查看容器
sudo docker contaienr ls -a

Docker Compose编排操作

这个是docker出的容器,比较适合单机的编排,简单快速

  • Docker Compose是一个工具
  • 这个工具可以通过 一个yml文件定义多容器的 docker应用
  • 通过一条命令就可以根据 yml文件的定义去创建或者管理这多个容器

docker-compose安装

地址:https://docs.docker.com/compose/install/

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose --version

docker compose 命令

#使用默认的配置文件 docker-compose.yml -d 没有logdocker-compose up#停止docker-compose stop#停止并删除 containerdocker-compose down#查看imagedokcer-compose images#进入mysqldocker-compose exec mysql bash

使用 Docker Compose 部署项目

参考: https://blog.csdn.net/qq_36148847/article/details/79427878

yml文件

version: '3'services:  mariadbapp:    image: "mariadb"    container_name: 'mariadb02'    environment:      MYSQL_ROOT_PASSWORD: 'R319913j'  webapp:    build:      context: ./web-app      dockerfile: Dockerfile    container_name: 'test02'    environment:      MYSQL_HOST: mariadb02    links:      - mariadbapp  nginxapp:    image: "nginx"    container_name: 'nginx02'    ports:      - '8090:80'    volumes:      - ./nginx-app/nginx.conf:/etc/nginx/conf.d:ro      - ./nginx-app/html:/usr/share/nginx/html:ro      - ./nginx-app:/opt/test:ro    links:      - webapp

编辑运行

# mariadb没有初始化数据,需要手动创建数据库,使用dockerFile的方式构建mariadb,初始化数据配置等# 有build文件需要先 buildsudo docker-compose up -d --build# 查看验证

Docker 常见命令操作

-d 后台方式启动-p 绑定宿主机端口-v 挂载映射目录--link 与容器网络通信,是单向的。-e 设置环境变量--name 容器名称# 查看容器相关iddocker inspect containerId#查看 newworksudo docker network ls# 查看日志sudo docker logs containerID# pull 指定应用版本的镜像sudo docker pull postgres:9.2docker --link 属性时单向的,正在创建的容器连接到已存在的容器,而新建 network `docker network create -d bridge my-bridge` 将容器绑定到该容器上,两容器时互相通的。-p 参数: 前者代表宿主机端口,后者代表从起端口

拷贝文件从宿主机到容器中,注意使用绝对路径

docker cp host_machine_fiel_path containerId: container_file_path# 示例docker cp /home/rao/docker/app.py 0d29c86c1352:/opt/

拷贝文件从容器到宿主机中

docker cp containerId: container_file_path host_machine_fiel_path

查看端口占用

#查看5000端口占用lsof -i:5000# 释放端口kill -9 pid

nginx

systemctl enable nginxsystemctl restart nginx

相关问题

nginx错误日志*1 upstream prematurely closed connection while reading response header from upstream上游服务断开了uwsgi 错误日志invalid request block size: 21573 (max 4096)...skip答案: https://stackoverflow.com/questions/15878176/uwsgi-invalid-request-block-size

转载于:https://www.cnblogs.com/nirao/p/9679565.html

你可能感兴趣的文章
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>