当前位置: 代码迷 >> 综合 >> Docker 搭建 Django+Mariadb 环境
  详细解决方案

Docker 搭建 Django+Mariadb 环境

热度:57   发布时间:2023-12-12 18:26:16.0

?本文由作者:蛮大人  授权发布
链接:https://opsdev.fun/2017/07/17/O1-8-02-Docker%E6%90%AD%E5%BB%BADjango-Mariadb%E7%8E%AF%E5%A2%83/
著作权归作者所有。
转载请联系作者获得授权。

阅读建议

先通读全文后,再自行决定需要实践的步骤。后文总是有更简洁更快更好的实践。

不过,新人建议从头到尾实践,也不失为“笨办法学 Docker” 的美谈一桩。

本文思路:

直接拉取Mariadb镜像,搭建数据库
手动Build Django镜像:以python2.7为基础镜像让我们做的更好:以Python2.7-slim为基础镜像的优化"docker -v"&&"docker --link"

源码:git@github.com:AnInputForce/autodepopy.git

基本上是边学边实验,关键步骤都有 commit。请各位参考。

正文

环境之 “Docker-Mariadb” 搭建

参考:在 Mac 中直接安装 Maridb(不推荐),Mac中MariaDB数据库的安装步骤

首先,把你的宿主机 mac 或 linux 装上 tree 命令。没有也没关系,下文有相关的换成 ls 即可;

下载 Mariadb 数据库镜像

docker pull mariadb

启动并配置 DB

  • 映射数据库数据文件和配置文件
    • 新建 ~/mariadb/data 、~/mariadb/custom 目录
    • -v ~/mariadb/data:/var/lib/mysql 映射数据文件出来
    • -v ~/mariadb/custom:/etc/mysql/conf.d 映射配置文件出来
    • 指定数据库编码 utf8mb4,参考:mysql 使用 utf8mb4 经验吐血总结
$ mkdir -p ~/mariadb/data ~/mariadb/custom
$ docker run --name my-mariadb -v ~/mariadb/data:/var/lib/mysql   -v ~/mariadb/custom:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1q2w -d mariadb:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

测试验证

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
77de3a6bf3fe        mariadb:latest      "docker-entrypoint..."   2 minutes ago       Up About a minute   0.0.0.0:3306->3306/tcp   my-mariadb
$ docker exec -it my-mariadb bash
root@77de3a6bf3fe:/# mysql -uroot -p1q2w
Welcome to the MariaDB monitor.  Commands end with ; or \g.
....
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.02 sec)

环境之“Docker-Django”搭建

很意外,翻了翻官方 hub 镜像,有如下提示:

This image is officially deprecated in favor of the standard python image;

大致意思是:这个镜像已被标准 python 镜像取代。该镜像不能直接带来 Django 环境,仅有的价值是提供一些 Django 依赖如mysql-client 等。或许因为 Django 是 APP 级的,依赖于 Projec t的 requirements.txt,like this:

只能自己动手,丰衣足食了。正好练练刚学习到的知识。

准备项目目录

  • workspace 工作空间,所有项目大本营:自己习惯
  • autodeploy 自动部署项目的目录:自己习惯
  • z-dev 存放开发环境 dockerfile 及相关信息:自己习惯
  • z-pub 存放生产环境 dockerfile 及相关信息:自己习惯
  • .dockerignore 存放不被镜像 build 时关注的文件:来自 Vscode。linux下不可见,具体内容详见此项目 github;
$ mkdir -p ~/workspace/autodeploy && cd ~/workspace/autodeploy && mkdir z-dev z-pub

创建 Dockerfile

直接使用 Python2.7 基础镜像,简单粗暴省事,适合想快速体验的孩子:

# 基础镜像
FROM python:2.7
# 维护者信息
MAINTAINER kang.cunhua <kangcunhua@git.com.cn> 
# app 所在目录
WORKDIR /usr/local/web
ADD . /usr/local/web/
# 安装 app 所需依赖
RUN pip install --no-cache-dir -r requirements.txt

创建 requirements.txt

Django==1.11.3
MySQL-python

宿主机当前目录结构

ChinaDreams:autodeploy kangcunhua$ tree
.
├── readme.md
├── z-dev
│   ├── Dockerfile
│   └── requirements.txt
└── z-pub└── Dockerfile2 directories, 4 files

Build 镜像

当前目录:~\workspace\autodeploy

cd z-dev && docker build -t mydjango:late