让项目在docker上跑起来

项目地址: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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值