Docker打包部署Django应用的笔记

Docker打包部署Django应用的笔记

简介

何为Docker, 既然你都搜索到这篇笔记,那我就不用去复制一批docker是啥的简介了。

因为一个在Django框架下开发的微服务准备上线,发现使用docker 进行部署是一个比较合适的方法。因为第一次使用,所以写了这个笔记。希望能为日后自己再部署做个参考,如有错误,不吝指正!

步骤

1. 获取ubuntu镜像

在https://hub.docker.com中找到ubuntu官方镜像进行pull。

当然你可以在其中选择合适的镜像版本:https://hub.docker.com/_/ubuntu?tab=tags

在命令行终端中执行:

C:\Users\QQT>docker pull ubuntu:bionic-20200403

此时输入命令查看刚刚下载的镜像:

C:\Users\QQT>docker images

确认无误,下一步。

2. 运行ubuntu镜像

执行以下命令运行ubuntu 镜像:

C:\Users\QQT>docker run -d -p 9090:9090 -v "F:\Users\MyDjangoProject":/mnt -t ubuntu bionic-20200403

docker run 命令参数解析:

  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • –volume , -v: 绑定一个卷, 格式为:主机路径:容器路径

此时输入命令查看刚刚运行的容器:

C:\Users\QQT>docker images

接下来打开这个容器的交互窗口:

C:\Users\QQT>docker exec -it 7fc5ef72ae38 /bin/bash

如果在docker run 命令中加入了-d 参数,容器启动后会进入后台。如果此时要进入容器,有两种指令:

  • docker attach:如果使用该命令进入容器,在退出容器后,容器会停止
  • docker exec:如果使用该命令进入容器,在退出容器后,容器不会停止

7fc5ef72ae38 : 表示容器ID

3. 安装依赖

我们需要安装运行Django所需要的依赖。

3.1 准备工作

首先执行以下命令,更新一下(如果不执行这条命令,会导致之后apt-get install xxx 报错):

root@7fc5ef72ae38:/# apt-get update

然后安装vim 编辑器:

root@7fc5ef72ae38:/# apt-get install vim

改源:

root@7fc5ef72ae38:/# cd /etc/apt
root@7fc5ef72ae38:/etc/apt# cp sources.list sources.list.bk
root@7fc5ef72ae38:/etc/apt# vim sources.list

sources.list 文件中的内容全部删除或注释,写入:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

3.2 安装python

执行以下命令安装python:

root@7fc5ef72ae38:/etc/apt# apt-get install python3
root@7fc5ef72ae38:/etc/apt# apt-get install python3-pip

3.3 安装配置Gunicorn

Gunicorn,“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。

安装

pip install gunicorn

配置

Gunicorn 有三种方式可以配置,分别是框架配置,文件配置和命令行配置。

这里选用文件配置,需要创建一个 gunicorn.conf.py 的python文件。具体有哪一些参数可以配置,可以去官方手册查询。这里将配置一些常用的内容:

import multiprocessing

bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2  # 进程数
proc_name = 'Gunicorn_your_project'  # 进程名
errorlog = '/home/gunicorn.error.log'  # 发生错误时log的路径
accesslog = '/home/gunicorn.access.log'  # 正常时的log路径

3.4 安装进程管理工具Supervisor

root@7fc5ef72ae38:/# apt-get install supervisor

安装完毕后进行配置,首先进入/etc/supervisor/conf.d/目录:

root@7fc5ef72ae38:/# cd /etc/supervisor/conf.d/

创建配置文件 your_project.conf,并写入配置内容,可参考以下配置:

[program:your_project]
command=gunicorn your_project.wsgi:application -c gunicorn.conf.py  ; 被监控的进程路径
directory=/home/your_project/               ; 执行前要不要先cd到目录$
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                   ; 正常退出代码
stdout_logfile=/home/your_project_supervisor.log        ; 指定日志文件

保存后退出,执行以下命令使得配置生效:

root@7fc5ef72ae38:/# supervisord -c supervisor.conf 

:当然还有其他命令可以用于supervisord的控制(后四个命令可以省略“-c supervisord.conf”):

supervisord -c supervisord.conf                       通过配置文件启动supervisor
supervisorctl -c supervisord.conf status              查看状态
supervisorctl -c supervisord.conf reload              重新载入配置文件
supervisorctl -c supervisord.conf start [all]|[x]     启动所有/指定的程序进程
supervisorctl -c supervisord.conf stop [all]|[x]      关闭所有/指定的程序进程 

4. 打包

配置完毕后打包这个容器,下次还可以用哈

C:\Users\QQT>docker commit -m="This is django image" -a="hahawu" 7fc5ef72ae38 hahawu/django

打包完毕后上传至hub.docker.com

C:\Users\QQT>docker push hahawu/django

如果需要可以去拉取,命令如下:

docker pull hahawu/django:latest

5. 部署

之后可以使用nginx 或 apache的dockers进行服务器端的部署。我这里选择的是nginx, 同样的也使用命令:

C:\Users\QQT>docker pull nginx

创建nginx 的容器,创建一个该项目的nginx的conf文件:

vim /etc/nginx/conf.d/your_project.conf

写入:

server {
     
        listen 8001;
        server_name 192.168.1.12;

        # SSL configuration
        # ssl_certificate      ssl/STAR_xxx_cn.crt;
        # ssl_certificate_key  ssl/_.xxx.cn.key;
        #
        # ssl_session_cache    shared:SSL:10m;
        # ssl_session_timeout  5m;
        # ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP;
        # ssl_prefer_server_ciphers  on;


        location / {
     
                proxy_set_header X-Real-Ip $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://192.168.1.12:8000; # 填写宿主机的IP+DjangoDocker中映射的端口
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
     
            root   html;
        }
}

6. 访问

此刻部署!

参考

[1] https://hub.docker.com/_/django

[2] https://www.runoob.com/docker/docker-run-command.html

[3] https://docs.gunicorn.org/en/latest/settings.html

[4] https://www.jianshu.com/p/260f18aa5462

[5] https://www.jianshu.com/p/5600af9ff238

你可能感兴趣的:(服务器,Python,docker,python,ubuntu,Django)