Docker部署Django+Mysql+uWSGI+Nginx Web应用 – 笔记更新2022-01-04

Docker 部署Django+Mysql+uWSGI+Nginx Web应用

Change logs更新记录

2022/1/4 fixed web access problem of wide area network(如下)
2021/12 draft notes released

  1. Docker 启动容器时,将端口 -p 80:80 改为 -p 8001:80(解决外网访问问题, 运营商限制了80端口,所以导致外网访问一直失败,内网访问ok)
  2. 更新了uwsgi.ini配置文件,更新了nginx配置文件

主机环境

HP workstation个人笔记本电脑
OS:ubuntu 20.04 LTS

宿主机工程目录

root@HP-ZBook-Fury-17:~# tree -d
/root/code
/root/docker
.
├── code
│ └── datacube # django项目名
│ ├── apps
│ ├── datacube
│ │ └── pycache
│ ├── extra_apps
│ ├── media
│ ├── static
│ │ └── admin
│ │ ├── css
│ │ │ └── vendor
│ │ │ └── select2
│ │ ├── fonts
│ │ ├── img
│ │ │ └── gis
│ │ └── js
│ │ ├── admin
│ │ └── vendor
│ │ ├── jquery
│ │ ├── select2
│ │ │ └── i18n
│ │ └── xregexp
│ └── templates
├── docker #
│ ├── django-uwsgi-nginx
│ └── mysql
│ ├── conf.d
│ └── data
│ ├── datacube
│ ├── mysql
│ ├── performance_schema
│ └── sys

宿主机上安装Docker

省略…网上有很多教程供参考

创建Mysql容器并启动

简单说明一下, docker run就是运行容器的命令,如果本地仓库没有mysql5.7.19镜像那么docker会自动从docker hub pull 也就是下载我们制定的mysql版本
docker run 参数大白话说明
-d : 后台运行
-v : 卷挂载 本地目录:容器目录
-e : 配置环境(这边我们配置了mysql密码 和 数据库名)
-p : 端口

我的目录
root@HP-ZBook-Fury-17:~/docker/mysql# ls
conf.d  data  start.sh

mysql
│       ├── conf.d
│       └── data
│           ├── datacube
│           ├── mysql
│           ├── performance_schema
│           └── sys

文件start.sh

#!/bin/bash
echo "create a mysql container.."
docker run -d --name mysql \
           -v /root/docker/mysql/conf.d:/etc/mysql/conf.d \
           -v /root/docker/mysql/data:/var/lib/mysql \
           -e MYSQL_ROOT_PASSWORD="my-secret-password" \
           -e MYSQL_DATABASE="datacube" \
           -p 3306:3306 mysql:5.7.19 \
           --character-set-server=utf8 --collation-server=utf8_general_ci

文件my.cnf内容


[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
performance_schema = OFF
[mysql]
no-auto-rehash
default-character-set=utf8

到这里就可以运行了

/root/docker/mysql/start.sh

然后docker查看容器已经成功运行

root@HP-ZBook-Fury-17:/# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS       PORTS                                                  NAMES
38baba6f3f5b   mysql:5.7   "docker-entrypoint.s…"   2 days ago   Up 2 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

进入mysql容器测试一下
docker ps 查看容器id, docker exec -it 38baba6f3f5b /bin/bash进入容器,mysql -u root -p
登录mysql, 最后show databases;

root@HP-ZBook-Fury-17:/# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS       PORTS                                                  NAMES
38baba6f3f5b   mysql:5.7   "docker-entrypoint.s…"   2 days ago   Up 2 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
root@HP-ZBook-Fury-17:/# docker exec -it 38baba6f3f5b /bin/bash
root@38baba6f3f5b:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| datacube           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.04 sec)

创建Python+Django+Nginx+uWSGI镜像并启动测试

该容器需要与上面创建的mysql容器互联,这里通过更新环境变量的方式来做,因此需要更新django项目下的settings.py 如下:
目录:/root/code/datacube/datacube/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE_NAME'),
        'USER': 'root',
        'PASSWORD': os.environ.get('MYSQL_ENV_MYSQL_ROOT_PASSWORD'),
        'HOST': os.environ.get('MYSQL_PORT_3306_TCP_ADDR'),
        'OPTIONS': {
            "init_command": "SET foreign_key_checks=0;",
        }
    }}

配置Dockerfile, nginx, uwsgi, requirements.txt, soruces.list

目录
├── Dockerfile
├── nginx-app.conf
├── requirements.txt
├── sources.list
├── uwsgi.ini

文件Dockerfile

FROM ubuntu:18.04

MAINTAINER matt<751749090@qq.com>

&#x5B89;&#x88C5;git&#x3001;python&#x3001;nginx&#x3001;.&#x7B49;&#xFF0C;&#x5E76;&#x6E05;&#x7406;&#x7F13;&#x5B58;
COPY    sources.list /etc/apt/sources.list

RUN     apt-get update \
        && apt-get install gcc -y\
        && apt-get install g++ -y\
        && apt-get install gdb -y\
        && apt-get install python-software-properties -y\
        && apt-get install software-properties-common -y\
        && add-apt-repository ppa:deadsnakes/ppa -y\
        && apt-get update\
        && apt-get install python3.6 -y\
        && rm /usr/bin/python\
        && ln -s /usr/bin/python3.6 /usr/bin/python\
        && rm /usr/bin/python3\
        && ln -s /usr/bin/python3.6 /usr/bin/python3\
        && apt-get install python3-pip -y\
        && pip3 install pip -U\
        && rm /usr/bin/pip3 \
        && ln -s -f /usr/local/bin/pip3 /usr/bin/pip3\
        && ln -s -f /usr/local/bin/pip3 /usr/bin/pip\
        && pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple\
        && rm -rf /var/lib/apt/lists/*

&#x73AF;&#x5883;&#x53D8;&#x91CF;
ENV MYSQL_DATABASE_NAME datacube
ENV EMAIL_HOST_USER user@qq.com
ENV EMAIL_HOST_PASSWORD yourpassword

nginx&#x914D;&#x7F6E;
#RUN echo "daemon off;" >> /etc/nginx/nginx.conf
COPY nginx-app.conf /etc/nginx/sites-available/default

&#x5B89;&#x88C5;&#x9879;&#x76EE;&#x6240;&#x9700;python&#x7B2C;&#x4E09;&#x65B9;&#x5E93;
COPY requirements.txt /home/docker/code/
RUN pip install -i https://pypi.doubanio.com/simple/ \
                -r /home/docker/code/requirements.txt

COPY . /home/docker/code/

EXPOSE 80

</751749090@qq.com>

创建docker镜像,查看结果
root@HP-ZBook-Fury-17:~/docker/django-uwsgi-nginx# docker build -t matt/datacubeimage /root/docker/django-uwsgi-nginx


root@HP-ZBook-Fury-17:/# docker images
REPOSITORY           TAG       IMAGE ID       CREATED              SIZE
matt/datacubeimage   latest    1d1f02ae30c1   About a minute ago   561MB

Docker run 启动容器 (2022/1/4更新)
docker run -itd –link mysql:mysql -v /root/code/:/home/docker/code/ –name datacubeWebapp -p 8001:80 matt/datacubeimage /bin/bash
成功启动如下:


root@HP-ZBook-Fury-17:~/code# docker run -itd --link mysql:mysql -v /root/code/:/home/docker/code/ --name datacubeWebapp -p 80:80 matt/datacubeimage bash
1ac66f1ccbbd3d08c9b9a943021efe26b4cc4b622a5ff7fe96abba9ff15c7e04

root@HP-ZBook-Fury-17:~/code# docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
1ac66f1ccbbd   matt/datacubeimage   "bash"                   6 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp                      datacubeWebapp
38baba6f3f5b   mysql:5.7            "docker-entrypoint.s&#x2026;"   2 days ago      Up 5 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

进入容器
docker exec -it 1ac66f1ccbbd /bin/bash

查看通过build image时通过编写dockerfile命令给 python安装的依赖包、库
命令:pip list

`
root@1ac66f1ccbbd:/# pip list
Package Version

Original: https://blog.csdn.net/weixin_45505773/article/details/122149933
Author: 马特_
Title: Docker部署Django+Mysql+uWSGI+Nginx Web应用 – 笔记更新2022-01-04

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734415/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球