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