一、阅读建议
先通读全文后,再自行决定需要实践的步骤。后文总是有更简洁更快更好的实践。
不过,新人建议从头到尾实践,也不失为“笨办法学 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 数据库的安装步骤(https://www.jb51.net/article/93202.htm)
首先,把你的宿主机 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 级的,依赖于 Project 的 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
# 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
└── Dockerfile
2 directories, 4 files
Build 镜像
当前目录:~\workspace\autodeploy
cd z-dev && docker build -t mydjango:latest .