DockerFile

Dockerfile

Dockerfile:是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

其实就是一个叫Dockerfile的文件里面写了一些命令

基本命令

#指定基于哪个镜像为基础
FROM 镜像名字:镜像标签    FROM centos:centos7   
#设置镜像作者
MAINTAINER 作者             
#环境变量
ENV key value               
要执行的命令
RUN 命令                    
#拷贝文件到镜像内(自动解压)
ADD 文件路径            
#拷贝文件到镜像内(不会自动解压)
COPY 文件路径       
#工作目录(工作的目录,一旦启动起容器来,进入,在的路径)
WORKDIR 路径        

案例

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

#注意不能空行
FROM python:3.7
MAINTAINER zx
RUN pip install django==1.11.9
RUN mkdir /home/test
RUN pip install requests
#把a.txt复制到home下
ADD a.txt /home
#进入容器就在home目录
WORKDIR /home
#容器对外暴露的端口
EXPOSE 8080   
#一旦启动容器,会执行该条命令,这条命令,必须是夯住的命令(一旦运行就不能执行其他命令的命令)
CMD 命令             

开始构建

#构建:docker build -t='镜像名字' 
docker build -t='django1.11.9' .

#验证
docker run -id --name=django1.11.9 django1.11.9:latest
docker exec -it django1.11.9 /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 92c /bin/bash

#4 安装django环境
pip install django==1.11.9

#5 运行项目,用的是wsgiref
python manage.py runserver 0.0.0.0:8088    

#6 通过uWSGI跑项目
安装uwsgi:pip install uwsgi
vim uwsgi.ini
#写入
[uwsgi]
#配置和nginx连接的socket连接
#配置的是socket就不能直接访问,要配合nginx
socket=0.0.0.0:8080
#也可以使用http
#http=0.0.0.0:8080
#配置项目路径,项目的所在目录
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 
uwsgi --stop uwsgi.pid    #停止
kill -9 进程杀死
查看是否启动
ps aux |grep uwsgi

#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 {
    	#ngnix监听端口
        listen       80;
        server_name  localhost;
        location / {
          #方式一
          # 导入一个Nginx模块他是用来和uWSGI进行通讯的
          #include uwsgi_params; 
          #uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
          #uwsgi_pass 101.133.225.166:8080;
          #方式二
          # 导入一个Nginx模块他是用来和uWSGI进行通讯的
          #include uwsgi_params;
          # 指定uwsgi的sock文件所有动态请求
          #uwsgi_pass unix:///var/www/script/uwsgi.sock; 
          #方式三
          #转发的地址
          proxy_pass http://101.133.225.166:8088
    
        }  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
​```

#运行nginx容器,完成端口映射和3个目录映射
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端口,就可以访问项目了

动静分离

 #收集静态文件,把所有的静态js,css,图片收集到一个文件夹中
 python manage.py collectstatic   
 #把这个文件夹单独放到一个地址,用nginx转发,做动静分离
 192.168.1.11/static/head.pngs
原文地址:https://www.cnblogs.com/zx125/p/12715770.html