Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目

1、准备工作

mkdir docker_compose
cd docker_compose
mkdir 01_django
mkdir 02_mysql
mkdir 03_redis

Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第1张图片

2、构建django项目

注意:使用之前制作的Django镜像(2.0)版本

进入到01_django文件夹

  1. 建立Dockerfile文件

新建Dockerfile文件,如下:

FROM ubuntu:16.04

# 复制文件到容器
ADD requirements.txt /home

# 跳转到指定目录
WORKDIR /home

# 复制国内更新源
COPY sources.list /etc/apt/sources.list

# 安装vim、python3、pip3以及Django用的包
RUN apt-get update && apt-get install vim -y \
    && apt-get install python3 -y \
    && apt-get install python3-pip -y \
    && pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

# 创建项目(当在运行容器是,如果使用了-v且设置了/home/app,那么就可以直接运行指定的Django项目)
RUN django-admin startproject app

# 进入到项目目录
WORKDIR /home/app

# 对外暴露端口
EXPOSE 8000

# 运行测试项目
CMD ["python3","manage.py","runserver", "0.0.0.0:8000"]
  1. 建立requirements.txt

新建requirements.txt文件,内容如下:

aliyun-python-sdk-core-v3==2.13.10
certifi==2019.9.11
chardet==3.0.4
Django==2.0
django-redis==4.10.0
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.3
jmespath==0.9.4
MarkupSafe==1.1.1
mock==3.0.5
Pillow==6.2.1
pycryptodomex==3.7.2
PyMySQL==0.9.3
python-alipay-sdk==1.10.1
pytz==2019.3
QQLoginTool==0.3.0
redis==3.3.11
requests==2.22.0
six==1.12.0
urllib3==1.25.7
  1. 建立sources.list
    新建sources.list文件,内容如下:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
  1. 建立项目文件夹
    新建立一个文件夹project,目的是以后将Django项目代码共享到此目录
mkdir project

此时01_django文件中的效果如下:
在这里插入图片描述

5.新建django项目
/01_project/project的目录下执行

django-admin startproject app
  1. 构建docker-compose.yml文件

跳转到docker_compose路径下

新建docker-compose.yml文件,内容如下:

version: '3'
services:
  django:
    build: ./01_django
    volumes:
     - ./01_django/project/app:/home/app
    ports:
     - "8000:8000"

效果如下:

注意: 如果以后需要运行某个服务时,运行特殊命令,可以通过添加如下代码实现

command: python3 manage.py runserver 0.0.0.0:8000
  1. 构建Django服务
    执行命令
docker-compose build

Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第2张图片

构建成功

Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第3张图片

说明

因为此时的docker-compose.yml文件中只有一个django的服务,所以只创建了这个镜像

使用docker-compose up运行服务
在这里插入图片描述
这个时候访问http://127.0.0.1:8000就可以看到django的初始页面了。

3、 构建MySQL服务

  1. 备份
    将之前的docker-compose.yml进行备份
    在这里插入图片描述
  2. 修改
    然后修改docker-compose.yml内容如下:
version: '3'
services:
    mysql:
        image: mysql:5.7
        expose:
            - 3306
        ports:
            - "3307:3306"
        environment:
            MYSQL_ROOT_PASSWORD: python
            MYSQL_USER: root
        volumes:
            - ./02_mysql:/var/lib/mysql
  1. 启动docker-mysql
docker-compose up

Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第4张图片
之后查看容器进行确认
在这里插入图片描述
进行链接数据库
Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第5张图片

  1. 说明
    我们之所以在docker-compose.yml文件中设置volumes是为了保证,将来操作的数据可以直接存储到宿主机,而不会因为容器的删除,导致数据丢失.
    在这里插入图片描述

4、构建redis服务

下载redis镜像,复制一份docker-compose.ymldocker-compose.yml.bk2,然后构建docker-compose.yml,之后docker-compose.yml文件为:

version: '3'
services:
  redis:
    image: redis
    expose:
      - 6379
    ports:
      - "6399:6379"

Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第6张图片
链接redis数据库
在这里插入图片描述

6、连通各个服务

  1. 合并为一个docker-compose.yml文件
    将之前的3个docker-compose.yml文件合并为一个,内容如下:
version: '3'
services:
    redis:
        image: redis
        expose:
            - 6379
        ports:
            - "6399:6379"
    mysql:
        image: mysql:5.7
        expose:
            - 3306
        ports:
            - "3307:3306"
        environment:
            MYSQL_ROOT_PASSWORD: python
            MYSQL_USER: root
        volumes:
            - ./02_mysql:/var/lib/mysql
    django:
        build: ./01_django
        volumes:
            - ./01_django/project:/home/app
        ports:
            - "8000:8000"
        depends_on:
            - mysql
            - redis

注意:

depends_on表示依赖,如上述代码中意思是:需要运行django服务那么需要先运行redis、mysq服务,但并不能保证在django服务运行前它们已经成功的运行起来,只能保证它们先运行。

4.2 运行效果
Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目_第7张图片

使用docker ps查看

在这里插入图片描述
使用docker-compose ps查看
在这里插入图片描述

你可能感兴趣的:(docker,docker)