python测试开发django-180.docker-compose部署django+mysql环境

2021-12-29 12:29:03 浏览数 (1)

前言

部署django项目需用到mysql数据库,还需要自己写一个Dockerfile文件部署django的容器。 多个容器部署的时候可以用到docker-compose 进行容器编排。

docker-compose环境准备

使用 python3 的 pip3 安装 docker-compose 命令行工具

代码语言:javascript复制
pip3 install docker-compose

安装的版本Version: 1.29.2

代码语言:javascript复制
# pip3 show docker-compose
Name: docker-compose
Version: 1.29.2
Summary: Multi-container orchestration for Docker
Home-page: https://www.docker.com/
Author: Docker, Inc.
Author-email: None
License: Apache License 2.0
Location: /root/python36/lib/python3.6/site-packages

安装完成后,找到docker-compose目录所在的bin目录地址

代码语言:javascript复制
find /root -name docker-compose

添加软链接

代码语言:javascript复制
ln -s /your/path/bin/docker-compose /usr/bin/docker-compose

docker-compose 文件编写

1.先编写启动 django 的 Dockerfile 文件

代码语言:javascript复制
FROM python:3.6.8
MAINTAINER yoyo <283340479@qq.com>
RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install vim
RUN apt-get -y install lrzsz
RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
WORKDIR /code
ADD . /code
RUN pip install -r requirements.txt --index-url https://pypi.douban.com/simple

# 开放端口
EXPOSE 8000

CMD执行命令先不写到dockerfile文件,因为数据库还没启动,配置cmd启动django服务会报错

2.修改 setttings.py 文件中数据库配置

代码语言:javascript复制
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'hrun',  # 新建数据库名
            'USER': 'root',  # 数据库登录名
            'PASSWORD': '123456',  # 数据库登录密码
            'HOST': 'db',  # 数据库所在服务器地址(docker-compose文件links地址关联db)
            'PORT': 3306,  # 监听端口 默认3306即可
        }
    }

3.docker-compose.yml

version是指定 docker-compose.yml 文件的写法格式版本3.0 services 是需要启动的服务,多个服务键值对

代码语言:javascript复制
version: '3.0'
services:
  db:
    restart: always
    image: mysql:5.7
    container_name: yy_mysql
    volumes:
      - ./db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: "hrun"
      TZ: "Asia/Shanghai"
    ports:
      - 3306:3306
  web:
    restart: always
    build: .
    container_name: yy_web
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    links:
      - db
    depends_on:
      - db

services配置启动服务的参数

  • image:指定服务所使用的镜像
  • container_name:定义启动容器的名称
  • expose:定义容器用到的端口(一般用来标识镜像使用的端口,方便用ports映射)
  • ports:定义宿主机端口和容器端口的映射,可使用宿主机IP 宿主机端口进行访问 宿主机端口:容器端口
  • volumes:卷挂载路径,定义宿主机的目录/文件和容器的目录/文件的映射 宿主机路径:容器路径
  • depend_on: 规定service加载顺序,例如数据库服务需要在后台服务前运行
  • restart: always :配置重启,docker每次启动时会启动该服务
  • links:将指定容器连接到当前连接,可以设置别名,已废弃,推荐使用networks
  • environment:启动容器环境变量
  • command:启动容器执行的cmd命令

docker-compose运行

docker-compose中web服务是本地镜像,可以先使用 build 构建镜像(不先build也可以,直接 up也会先build本地镜像)

代码语言:javascript复制
docker-compose build

构建过程

代码语言:javascript复制
[root@iZ2]# docker-compose build
Building web
Sending build context to Docker daemon  289.2MB
Step 1/17 : FROM python:3.6.8
 ---> 48c06762acf0
Step 2/17 : MAINTAINER yoyo <283340479@qq.com>
 ---> Using cache
 ---> 128b4ae83de3
Step 3/17 : RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
 ---> Using cache
 ---> f974c67bcf87
Step 4/17 : RUN apt-get update
 ---> Using cache
 ---> d3ac17c4760f
Step 5/17 : RUN apt-get -y install vim
 ---> Using cache
 ---> 6d5c2962aa1d
Step 6/17 : RUN apt-get -y install lrzsz
 ---> Using cache
 ---> 16c6a337d525
Step 7/17 : RUN pip install --upgrade pip --index-url https://pypi.douban.com/simple
 ---> Using cache
 ---> 8e9efdca8ab0
Step 8/17 : WORKDIR /code
 ---> Using cache
 ---> 37d16b8cb963
Step 9/17 : ADD . /code

启动服务

代码语言:javascript复制
docker-compose up

启动过程

代码语言:javascript复制
Starting yy_mysql ... done
Starting yy_web   ... done
Attaching to yy_mysql, yy_web
yy_mysql | 2021-12-28 21:25:22 08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.
yy_mysql | 2021-12-28 21:25:22 08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
yy_mysql | 2021-12-28 21:25:22 08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started.

加-d参数,挂后台启动

代码语言:javascript复制
docker-compose up -d

停掉服务

代码语言:javascript复制
docker-compose stop

docker ps 可以查看到启动了yy_mysql 和 yy_web两个容器

代码语言:javascript复制
[root@iZ2]# docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                                                        NAMES
10495551676c   h2_web   "python manage.py ru…"   12 minutes ago   Up 15 seconds   0.0.0.0:8000->8000/tcp                                                                       yy_web
76ade7a55ab4   mysql:5.7                       "docker-entrypoint.s…"   12 minutes ago   Up 15 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp

需注意的是,这样部署后,同步数据库的指令,需进yy_web容器执行

代码语言:javascript复制
python manage.py makemigrations
python manage.py migrate

0 人点赞