Docker 部署Django+Mysql+uWSGI+Nginx Web应用
Change logs更新记录
2022/1/4 fixed web access problem of wide area network(如下)
2021/12 draft notes released
- Docker 启动容器时,将端口 -p 80:80 改为 -p 8001:80(解决外网访问问题, 运营商限制了80端口,所以导致外网访问一直失败,内网访问ok)
- 更新了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>
安装git、python、nginx、.等,并清理缓存
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/*
环境变量
ENV MYSQL_DATABASE_NAME datacube
ENV EMAIL_HOST_USER user@qq.com
ENV EMAIL_HOST_PASSWORD yourpassword
nginx配置
#RUN echo "daemon off;" >> /etc/nginx/nginx.conf
COPY nginx-app.conf /etc/nginx/sites-available/default
安装项目所需python第三方库
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…" 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/
转载文章受原作者版权保护。转载请注明原作者出处!