DNMP 可以构建出基于 Docker 的 PHP 开发环境,其优势有在短时间内随意构建不同版本的相关服务、环境统一分布在不同服务器等,使开发者能够更专注于开发业务本身。
- 灵活切换适合国内的源(apt-get、php composer)
- 组件精简易懂,学习、测试环境、生产环境均适合
- 可能是最易用的计划任务(安装在 Tools 组件里)
- 良好的扩展性
Ningx:1.15
PHP56:php-fpm 5.6
PHP73:php-fpm 7.3
MySQL:5.7
Redis:4.0
Tools:Alpine latest,作为辅助工具容器如计划任务备份数据等
dnmp
|----/build 镜像构建目录
|----/work 持久化目录
|--------/components/ 组件库
|------------/component 组件,包括了数据、配置文件、日志等持久化数据
|-----------------/config 组件的配置目录
|-----------------/log 组件的日志目录
|--------/wwwroot WEB 文件目录
|----/.env-example 配置文件
|----/docker-compose.yml docker compose 配置文件
没有安装 Docker 的同学移步 安装教程,如果你有足够的时间强烈建议通读 Docker — 从入门到实践
cd ~/
git clone https://github.com/telanflow/dnmp.git
cd dnmp
cp .env-example .env
# 配置数据库密码、时区、端口等
vim .env
# 构建全部镜像并启动容器
sudo docker-compose up --build -d
# 构建单个镜像并启动容器
sudo docker-compose build --d --no-cache [nginx|php56|php73| ...]
启动成功访问 http://localhost 即可
# 查看当前启动的容器
sudo docker-compose ps
# 启动部分服务在后边加服务名,不加表示启动所有,-d 表示在后台运行
sudo docker-compose up [nginx|php56|php73| ...] -d
# 停止和启动类似
sudo docker-compose stop [nginx|php56|php73| ...]
# 停止并删除相关的容器
sudo docker-compose down [nginx|php56|php73| ...]
# 删除所有未运行的容器
sudo docker rm $(sudo docker ps -a -q)
# 删除所有未运行的镜像,-f 可以强制删除
sudo docker rmi $(sudu docker images -q)
# 删除dnmp
sudo docker rm $(sudo docker ps -a | grep dnmp | awk '{print $1}')
# ⚠️清理所有停止的容器(注意如果执行 docker images -a 会出现一些 none 的镜像,这些是构建镜像的中间层不占用空间也不是垃圾数据,不用管)
sudo docker system prune
更多可通过 sudo docker -h
或者 sudo docker-compose -h
查看
比如在 php 里新增一个扩展
# 1、更改对应的 dnmp/build/php/Dockerfile
# 2、重新构建镜像
sudo docker-compose build --no-cache [php56|php73|...]
<?php
echo "<pre>";
// 连接 MySQL
$user = "root";
$pass = "root";
$dbh = new PDO('mysql:host=mysql;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT * from user') as $row) {
print_r($row);
}
echo "<br />";
// 连接 Redis
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->set("test-key","hello");
echo "Stored string in redis:: " . $redis->get("test-key");
直接在 /work/components/tools/cron.d 新建 crontab 文件或者使用自带的 task 就行了,比如做数据库备份计划,可以将备份的文件保存到 cron.d 同级 backup 目录下面,其中有几个坑都趟平了可以看下 task 文件里的注释说明,另外不用担心容器重启后计划任务停止,只要容器在运行你的任务就在运行。
如果需要升级某些组件的版本需要注意载入对应版本的配置文件,修改对应的配置信息,比如 redis.conf 默认配置的出口 ip 为 127.0.0.1,这样的话 php 的容器是连不上的,需要修改成 0.0.0.0,另外也要注意修改对应的 log path。
1、参考 daocloud 提供的文档(推荐)
# 注意按照文档如果执行类似 install docker-ce=17.03.1* 出错,执行 install docker-ce 即可
https://download.daocloud.io/Docker_Mirror/Docker
2、ubuntu 系统(可能不是最新版本的,适合学习或者测试用)
apt-get update && apt install docker.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo service docker start
sudo docker info
阿里云加速器:每个人有对应的加速地址,访问 https://cr.console.aliyun.com ->【镜像加速器】配置加速器
DaoCloud 加速器:http://guide.daocloud.io/dcs/daocloud-9153151.html
腾讯云加速器:https://www.qcloud.com/document/product/457/7207
MIT