• docker 补充


    dockerfile

    dockerfile 就是由一系列命令和参数构成的脚本,通过这个文件构建镜像,dockerfile就是一个文件,占得空间非常小。

    可以理解成一个文件里面写了很多命令。

    是什么作用,你把东西都写好在这个文件里了,执行这个文件,一个完整的镜像就创建好了。

    dockerfile内容

    FROM 镜像名字:镜像标签 FROM centos:centos7 指定基于哪个镜像

    MAINTAINER 作者 作者是谁

    ENV key value 环境变量

    RUN 命令 要执行的命令

    ADD 文件路径 拷贝文件到镜像内(自动解压)

    COPY 文件路径 拷贝文件到镜像内(不会自动解压)

    WORKDIR 路径 工作目录(工作的目录,一旦启动起容器来,进入,在的路径)

    栗子:通过dockerfile,构建一个django 1.11.9的镜像,内部装上requests模块,在home目录下创建一个test文件夹,传一个a.txt到镜像中

    第一步:在当前路径下创建一个a.txt,再创建一个dockerfile文件,dockerfile的名字必须是Dockerfile,首字母大写。

    Dockerfile的内容如下:

    FROM python:3.6
    MAINTAINER lqz

    RUN pip install django==1.11.9

    RUN mkdir /home/test

    RUN pip install requests

    ADD a.txt /hom

    WORKDIR /home

    第二步:构建:docker build -t='镜像名字' .

    docker build -t='django1.11.9' .

    只要执行这句命令,马上就会去找当前文件夹下的Dockerfile文件,并执行。

    然后就可以通过docker images 来看构建出来的镜像了。

    通过镜像跑来容器来。

    docker run -id --name=django1.11.9_my django1.11.9:latest

    进入到容器内部

    docker exec -it django1.11.9_my /bin/bash

    案例一

    通过uwsgi部署到容器中,起一个nginx容器,做转发

    1 先把文件传到服务器解压

    2 启动一个容器,做目录挂载

    docker run -id -p 8088:8088 -v /root/djangotest:/home --name=my_django_test python:3.6

    3 进入容器

    docker exec -it my_django_test /bin/bash

    4 安装django环境

    pip install django==1.11.9

    5 运行项目

    python manage.py runserver 0.0.0.0:8088 用的是wsgiref

    6 通过uWSGI跑项目

    安装uwsgi:pip install uwsgi

    写入:

    vim uwsgi.ini

    写入

    [uwsgi]

    配置和nginx连接的socket连接

    socket=0.0.0.0:8088

    也可以使用http

    http=0.0.0.0:8088

    配置项目路径,项目的所在目录

    chdir=/home/untitled3

    配置wsgi接口模块文件路径

    wsgi-file=untitled3/wsgi.py

    配置启动的进程数

    processes=4

    配置每个进程的线程数

    threads=2

    配置启动管理主进程

    master=True

    配置存放主进程的进程号文件

    pidfile=uwsgi.pid

    配置dump日志记录

    daemonize=uwsgi.log

    启动

    uwsgi --ini uwsgi.ini #启动

    7 用nginx转发

    docker pull nginx

    mkdir -p nginx/conf nginx/html nginx/logs

    新建配置文件

    在conf目录下新建nginx.conf

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
              #方式一
              #include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
             	#uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
              #uwsgi_pass 101.133.225.166:8080;
              #方式二
              #include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
              #uwsgi_pass unix:///var/www/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求
              #方式三
              proxy_pass http://101.133.225.166:8088
        
            }  
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    docker run --name mynginx -id -p 80:80 -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/etc/nginx/html -v /root/nginx/logs:/var/log/nginx nginx

    在外部浏览器访问宿主机ip地址80端口,就可以访问项目了

    补充1

    K8s:容器编排,夸服务器,多台服务器上的多个docker容器

    docker-compos:单机容器编排,8个容器,同时启动,

    补充2

    scp 远程拷贝命令,从mac拷贝到了阿里云服务器的/root路径

    scp untitled3.zip root@101.133.225.166:/root

    解压文件:yum install zip yum install unzip

    补充3

    在python3.6的容器中安装软件需要apt-get

    apt-get update

    apt-get install vim

    补充4 cgi wsgi

    2.uWSGI ,WSGI和uwsgi的区别

    2.1 WSGI:

    WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。也可以认为WSGI是一种通信协议。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。

    WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

    WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。

    WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口

    2.2 uWSGI:

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    2.3 uwsgi:

    uwsgi是服务器和服务端应用程序的一种协议,规定了怎么把请求转发给应用程序和返回; uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

    cgi:通用网关接口

    WSGI:python的协议,Web服务网管接口,简单来说它是一种Web服务器和应用程序间的通信规范。

    uwsgi:也是协议。

    wsgiref,uWSGI(c语言实现的,性能比较高),gunicorn。。。:根据这个协议的实现

    java、php都会有一些协议

    tomcat就是python中的uwsgi

    php服务器

    img

    讲一下外部请求访问宿主机上的容器里面的项目的过程

    就由上面的案例作为例子

    装有nginx的容器,部署在了宿主机的80端口上,并且做了端口映射,nginx监听着这个容器的80端口,只要外部请求访问了宿主机的80端口,就直接转到了容器的80端口,然后nginx监听着80,然后就根据外部的路由去转发请求,这时我们的项目是起在容器上的,容器也在宿主机上,所以有两种方式转发,一种是直接转发到项目容器的ip地址加端口号,还有一种就是转发到宿主机的ip加端口,因为项目的容器也是起在宿主机上的,做了8088的端口映射,只要访问宿主机的8088端口,就等于访问了项目容器得8088,而我们起的uWSGI(在项目容器上)监听着8088端口,所以外部的请求,终于到了项目中了。

  • 相关阅读:
    Add函数求两个数的和,不能使用+号或其它算术运算符
    小刘同学的第八十六篇博文
    小刘同学的第八十五篇博文
    小刘同学的第八十四篇博文
    小刘同学的第八十三篇博文
    小刘同学的第八十二篇博文
    小刘同学的第八十一篇博文
    小刘同学的第八十篇博文
    小刘同学的第七十九篇博文
    小刘同学的第七十八篇博文
  • 原文地址:https://www.cnblogs.com/chanyuli/p/12350117.html
Copyright © 2020-2023  润新知