项目地址:hairsalon: 美发店管理系统 (gitee.com)
docker镜像制作
在制作Dockerfile之前,需要写一下hairsalon.conf
#user nobody
worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
# expose port:8002
listen 8002;
server_name 127.0.0.1;
charset utf-8;
access_log /opt/hairsalon/log/nginx_access.log;
error_log /opt/hairsalon/log/nginx_error.log;
client_max_body_size 75M;
location /static {
alias /opt/hairsalon/static;
}
location /media {
alias /opt/hairsalon/media;
}
location / {
root /opt/hairsalon;
include /etc/nginx/uwsgi_params;
# communicate with uwsgi via port 8000
uwsgi_pass 127.0.0.1:8000;
}
}
}
dockerfile:
# vim Dockerfile
# This my first django Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos:centos7.5.1804
#MAINTAINER 维护者信息
LABEL maintainer="1850915624@qq.com"
#ENV 设置环境变量
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
#RUN 执行以下命令
RUN curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo && rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装libxml*是支撑 uwsgi -x hairsalon.xml
RUN yum install -y python36 python3-devel gcc pcre-devel zlib-devel make net-tools nginx libxml*
#工作目录
WORKDIR /opt/hairsalon
#拷贝文件至工作目录
COPY . .
# 拷贝nginx配置文件
COPY hairsalon.conf /etc/nginx
#安装依赖的插件
RUN pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt
RUN chmod +x run.sh && rm -rf ~/.cache/pip
#EXPOSE 映射端口
EXPOSE 8002
# 解释COPY . .
COPY . .
# 目的一: copy 项目文件到WORKDIR;
# 目的二:
docker exec -ti hairsalon bash
# 直接进入 /opt/hairsalon 即 WORKDIR
docker file 类似一个执行脚本,包括了安装系统,所依赖的包,python项目所依赖的包(写在了requirements.txt中)
下一步根据Dockerfile 制作项目镜像
$ docker build . -t hairsalon:v1 -f Dockerfile
由于本项目需要python3.6 、django、 nginx、 uwsgi和 mysql。其中python3.6在dockerfile中yum install -y python36 nginx;django 和uwsgi在requirements.txt中写明,现在就剩下mysql,所以下一步制作mysql镜像。
mysql镜像
可以通过下面两种方式
$ docker pull mysql:5.7
$ docker tag mysql:5.7
可以查看制作好的镜像
$ docker images
启动项目镜像和数据库
启动mysql
$ docker run -d -p 3306:3306 --name mysql -v /opt/mysql:/var/lib/mysql -e MYSQL_DATABASE=hairsalon -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
## 编码方式太重要了,utf-8 yyds
## 参数传递
## 查看数据库
$ docker exec -ti mysql bash
#/ mysql -uroot -p123456
#/ show databases;
## navicator连接
启动hairsalon镜像
## 启动容器
## 因为启动了数据库,且暴露3306端口,所以要查宿主机ip ifconfig
$ docker run -it -d -p 8002:8002 --name hairsalon -e MYSQL_HOST=192.168.11.100 -e MYSQL_USER=root -e MYSQL_PASSWD=123456 hairsalon:v1
## migrate
$ docker exec -ti hairsalon bash
#/ python3 manage.py makemigrations
#/ python3 manage.py migrate
#/ python3 manage.py createsuperuser
## 将hairsalon.conf 替换 /etc/nginx/nginx.conf
#/ rm -r nginx.conf
#/ cp hairsalon.conf nginx.conf
#/ rm -f hairsalon.conf
## or by follow
#/ mv hairsalon.conf nginx.conf
## 创建超级用户
$ docker exec -ti myblog python3 manage.py createsuperuser
## 收集静态文件
## $ docker exec -ti myblog python3 manage.py collectstatic
启动项目
注意配置hairsalon.xml 文件
<uwsgi>
<socket>127.0.0.1:8000</socket> <!-- 内部端口,自定义,注意与nginx.conf保持一致 -->
<chdir>/opt/hairsalon/</chdir> <!-- 项目路径,在Dockerfile中定义了 -->
<module>HairSalon.wsgi</module> <!-- hairsalon为wsgi.py所在目录名-->
<processes>8</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
万事俱备,运行项目。。。。。。
# start project hairsalon
$ uwsgi -x hairsalon.xml
$ nginx
# check process
$ ps aux |grep uwsgi
$ ps aux |grep nginx
# stop project hairsalon
$ pkill -f uwsgi -9
$ nginx -s stop