目录结构

/
├── data                        数据库数据目录
│   ├── esdata                  ElasticSearch 数据目录
│   ├── mongo                   MongoDB 数据目录
│   ├── mysql                   MySQL8 数据目录
│   └── mysql5                  MySQL5 数据目录
├── services                    服务构建文件和配置文件目录
│   ├── elasticsearch           ElasticSearch 配置文件目录
│   ├── mysql                   MySQL8 配置文件目录
│   ├── mysql5                  MySQL5 配置文件目录
│   ├── nginx                   Nginx 配置文件目录
│   ├── php                     PHP5.6 - PHP7.3 配置目录
│   ├── php54                   PHP5.4 配置目录
│   └── redis                   Redis 配置目录
├── logs                        日志目录
├── docker-compose.sample.yml   Docker 服务配置示例文件
├── env.smaple                  环境配置示例文件
└── www                         PHP 代码目录

快速使用

如果当前用户不是root,为了避免频繁输入root密码,需要将当前用户加入docker组

# 创建Docker组  注:安装Docker时就自动创建了,如果没有则手动创建
$ sudo groupadd docker
# 当前用户加入Docker组
$ sudo gpasswd -a ${USER} docker
# 将当前用户的group切换到docker用户组
$ newgrp docker

Clone项目

$ gh repo clone achuanya/dnmp

拷贝文件

$ cd dnmp
# 复制环境变量文件
$ cp env,sample .env
# 复制docker-compose配置文件
$ cp docker-compose.sample.yml docker-compose.yml
# 创建并后台运行
$ docker-compose up -d

PHP与扩展

切换Nginx使用的PHP版本

1.比如,从php切换到php56,那就先在docker-compose.yml文件中查看PHP56有没有被注释掉,删掉注释后启动,再更改Nginx配置文件:

fastcgi_pass   php:9000;
更改为:
fastcgi_pass   php56:9000;

其中phpphp56docker-compose.yml文件中容器的NAME名称

2.让其配置生效还需再重新加载Nginx配置文件

$ docker exec -it nginx nginx -s reload

这里有两个Nginx,第一个是容器NAME名称,第二个是容器中的Nginx程序

在宿主机安装PHP扩展

1.如果要安装更多PHP扩展,在根目录找到.env环境配置文件,如以下PHP扩展配置

# 安装扩展应当使用英文逗号隔开
PHP56_EXTENSIONS=pdo_mysql,mysqli,mbstring,gd,curl,opcache,redis

2.保存完成后,重新构建镜像

$ docker-compose build php

在Docker中安装扩展

$ docker exec -it php /bin/sh
# 安装redis扩展
$ install-php-extensions redis

支持安装扩展列表

此扩展来自Michele Locati,请前往查看最新支持的PHP扩展

  • https://github.com/mlocati/docker-php-extension-installer

在宿主机中使用命令行

PHP CLI

1.参考根目录bash.alias.sample示例文件,将PHP CLI函数拷贝到/etc/profile系统环境变量文件

# 刷新系统环境变量
$ source /etc/profile

2.在宿主机中执行PHP命令了

 ~ [06:24:00]
achuan$ php -v
PHP 7.4.7 (cli) (built: Jun 11 2020 19:07:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies
    
 ~ [06:24:04]
achuan$ php56 -v
PHP 5.6.40 (cli) (built: Jan 31 2019 01:30:45) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Composer

1.首先确定Composer缓存目录,Composer配置文件在根目录中的data/composer

2.参考根目录bash.alias.sample示例文件,将PHP CLI函数拷贝到/etc/profile系统环境变量文件

# 刷新系统环境变量
$ source /etc/profile

3.之后就可以在宿主机使用Composer命令了

$ cd /work/dnmp/www
$ composer -V
Composer version 1.10.13 2020-09-09 11:46:34

4.第一次使用Composer后data/composer目录下会生成config.json全局配置文件,可指定镜像,例如中国全量镜像:

{
    "config": {},
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}

或使用命令修改Composer的全局配置文件

$ composer config -g repo.packagist composer https://packagist.phpcomposer.com

管理命令

容器的创建、启动与构建

$ docker-compose
	up # 创建并且启动所有容器
	up -d # 创建并且后台运行所有容器
	up nginx php mysql # 创建并且启动多个容器
	
	start # 启动容器
	stop # 停止容器
	restart # 重启容器
	build # 构建容器
	
	rm # 停止并且删除容器
	down # 停止并且删除容器、网络、图像与挂载卷

快捷命令

1.参考根目录bash.alias.sample示例文件,将Composer函数拷贝到/etc/profile系统环境变量文件

# 刷新系统环境变量
$ source /etc/profile

2.例如,进入php容器

$ dphp