何为Docker, 既然你都搜索到这篇笔记,那我就不用去复制一批docker是啥的简介了。
因为一个在Django框架下开发的微服务准备上线,发现使用docker 进行部署是一个比较合适的方法。因为第一次使用,所以写了这个笔记。希望能为日后自己再部署做个参考,如有错误,不吝指正!
在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
确认无误,下一步。
执行以下命令运行ubuntu 镜像:
C:\Users\QQT>docker run -d -p 9090:9090 -v "F:\Users\MyDjangoProject":/mnt -t ubuntu bionic-20200403
docker run 命令参数解析:
此时输入命令查看刚刚运行的容器:
C:\Users\QQT>docker images
接下来打开这个容器的交互窗口:
C:\Users\QQT>docker exec -it 7fc5ef72ae38 /bin/bash
如果在docker run 命令中加入了-d 参数,容器启动后会进入后台。如果此时要进入容器,有两种指令:
7fc5ef72ae38 : 表示容器ID
我们需要安装运行Django所需要的依赖。
首先执行以下命令,更新一下(如果不执行这条命令,会导致之后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
执行以下命令安装python:
root@7fc5ef72ae38:/etc/apt# apt-get install python3
root@7fc5ef72ae38:/etc/apt# apt-get install python3-pip
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路径
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] 关闭所有/指定的程序进程
配置完毕后打包这个容器,下次还可以用哈
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
之后可以使用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;
}
}
此刻部署!
[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