1. 拉取镜像python
docker pull python:3.8-alpine
2. 创建容器:
docker run -itd --name python:3.8-alpine python
3. 进入容器,安装django, pymysql :
docker exec -it python sh
pip install django
pip install pymysql
pip install gunicorn
4. 新建webapps目录,将宿主中的项目复制到此处
mkdir webapps
退出容器后执行:
docker cp django_project01 contain_id:/webapps
5.启动项目
进入容器执行:
docker exec -it python sh
方式1:
gunicorn -w 3 -b 0.0.0.0:8888 django_project01.wsgi &
方式2:
gunicorn -D -w 3 -b 0.0.0.0:8888 django_project01.wsgi
方式3:
创建gunicorn_config.py
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing
bind = '0.0.0.0:8888' #绑定ip和端口号
backlog = 512 #监听队列
chdir = '/webapps/django_project01' #gunicorn要切换到的目的工作目录,此目录一般指定到项目目录下
timeout = 30 #超时
worker_class = 'sync' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1 #进程数
threads = 2 #指定每个进程开启的线程数,一般worker_class 为gevent使用
loglevel = 'info' #日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
accesslog = "/var/log/gunicorn_access.log" #访问日志文件
errorlog = "/var/log/gunicorn_error.log" #错误日志文件
gunicorn django_project01.wsgi -c gunicorn_config.py
遇到问题:
a. 对于已经启动的容器如何添加端口映射
cd /var/lib/docker/containers/容器id
修改如下两个文件
修改config.v2.json:
添加: “ExposedPorts”:{“8888/tcp”:{}},
修改hostconfig.json:
修改为:“PortBindings”:{“8888/tcp”:[{“HostIp”:"",“HostPort”:“8888”}]}
其中第一个8888是容器的端口,后面那个是映射的端口
b.如何提交当前容器为镜像,并推送
使用如下三条命令:
docker commit -a “wxb” -m “可以部署django项目的python容器镜像” 0b34de831d7a thisisnewworld/python:3.8_django
docker login
docker push hisisnewworld/python:3.8_django