开源软件名称:dnmp
开源软件地址:https://gitee.com/Tinywan/dnmp
开源软件介绍:
目录Docker简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 为什么使用Docker环境要求快速使用拉取代码 (gitee地址) $ git clone git@github.com:Tinywan/dnmp.git$ cd dnmp 新建配置文件 开启容器服务 守护进程 docker-compose up -d
单独重启容器服务 $ docker-compose up --no-deps -d nginx -- php74 如:在配置 docker-compose.yml 中增加了nginx的端口号映射
结束 如何清理您的Docker数据Docker不会对您的系统进行任何配置更改,但是它会占用大量的磁盘空间 1. 使用情况统计信息$ docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 25 13 9.467GB 4.368GB (46%)Containers 13 8 235MB 19.47MB (8%) Local Volumes 14 2 6.45GB 5.869GB (90%)Build Cache 0 0 0B 0B 2. 定期修剪为了安全地删除已停止的容器,未使用的网络和悬挂的图像,最好每隔一段时间运行以下命令 $ docker system pruneWARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cacheAre you sure you want to continue? [y/N] yDeleted Containers:5096cc97946c148450214a4330e35a67035289ecacc2806e9f693a0d46ebe75e 3. 全面清理启动可以使用单个命令擦除每个未使用的容器,图像,卷和网络 $ docker system prune -a --volumesWARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all images without at least one container associated to them - all build cacheAre you sure you want to continue? [y/N] yDeleted Volumes:d8827bb292a529057fc972acb982a6f13b6608ed10132b9e9a689959cafec30e...Deleted Images:untagged: dnmp_php72:latestdeleted: sha256:1b29834e4f9054d78a0d5e91e114e40b865ad8ddce06a3c7ba3703f9911775e6Total reclaimed space: 12.71GB 4. 使用情况How to clean your Docker data 项目结构 dnmp ├── docker-compose.yml -- 基础配置文件 ├── env.example -- 环境配置文件,拷贝 env.example 为 .env ├── services -- 服务目录 │ ├── php │ │ └── extensions -- 扩展目录 │ │ └── Dockerfile -- 镜像构建文件 │ ├── nacos │ │ └── conf -- 配置文件目录 │ │ └── env -- 环境变量目录 │ │ └── Dockerfile -- 镜像构建文件(构建比较耗时,不推荐) ├── conf │ ├── nginx.conf -- Nginx 主配置文件 │ ├── conf.d │ │ └── 80.conf -- HTTP 80 虚拟主机扩展配置文件 │ │ └── 443.conf -- HTTPS 虚拟主机扩展配置文件 │ │ └── lua.conf -- Lua 配置虚拟主机扩展配置文件 │ ├── letsencrypt -- Nginx 证书目录 │ ├── mysql │ │ └── my.cnf -- MySQL 配置文件 │ ├── etcd │ │ └── etcd.conf.yml -- Etcd 配置文件 │ ├── redis │ │ └── redis.conf -- Redis 配置文件 │ ├── php │ │ ├── php.ini -- PHP 运行核心配置文件 │ │ ├── php-fpm.conf -- PHP-FPM 进程服务的配置文件 │ │ └── php-fpm.d │ │ └── www.conf -- PHP-FPM 扩展配置文件 │ └──lua -- Lua 脚本目录 │ └── bin │ │ └── limit.lua -- 核心库脚本 │ └── test │ └── http.lua -- 测试脚本 ├── data -- 数据目录 │ ├── redis │ │ ├── appendonly.aof -- AOF 数据库保存文件 │ │ ├── dump.rdb -- RDB 数据库保存文件 │ │ └── redis.log -- Redis 日志文件 │ └── mysql -- MySQL 数据目录 ├── log ├ ├── nginx -- Nginx 系统错误日志 │ │ ├── access.log │ │ └── error.log │ └──redis -- Redis错误日志 │ └──nacos -- Nacos错误日志 │ └──php -- PHP错误日志 └── www -- 项目代码目录 └── site -- 具体项目目录 └──index.php Nginx管理配置文件端口必须和 docker-compose.yml 的ports - 8088:80 中的映射出来的端口一一对应 列如:conf/conf.d/www.conf 中配置端口为 80 ,则映射端口也80 ,对应的映射端口为:8088:80
重新加载配置文件 docker exec -it dnmp-nginx nginx -s reload 或者 docker exec dnmp-nginx nginx -s reload
在容器内执行 shell 命令:docker exec -it dnmp-nginx sh -c "ps -aef | grep nginx | grep -v grep | grep master |awk '{print $2}'" Nginx 日志定时备份和删除 容器时间跟宿主机时间不一致 - 原因:宿主机采用了 CST 时区。容器采用了 UTC 时区。
- 复制主机的
localtime : docker cp /etc/localtime lnmp-nginx:/etc/ - 重启容器:
docker restart lnmp-nginx
MySQL管理进入容器:docker exec -it dnmp-mysql /bin/bash Windows 环境使用:docker exec -it dnmp-mysql bash
修改配置文件 my.cnf ,重新加载:docker-compose restart mysql 容器内连接:mysql -uroot -p123456 外部宿主机连接:mysql -h 127.0.0.1 -P 3308 -uroot -p123456 数据-备份-恢复 MySQL 备份小脚本 Crontab 任务:55 23 * * * bash /backup/mysql_auto_backup.sh >/dev/null 2>&1 注意:crontab 定时执行 Docker 任务的时候是不需要添加参数 -it 。-t 是分配一个伪终端,但是 crontab 执行的时候实际是不需要的。
项目配置文件建议: - root 默认不开开启远程访问
- 新建项目用户
www ,配置主机Host 字段值为 MySQL 容器 ip 段172.18.0.% - 查看容器 IP address:
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dnmp-mysql
PHP管理docker安装PHP扩展常用命令 docker-php-source 此命令,实际上就是在PHP容器中创建一个/usr/src/php的目录,里面放了一些自带的文件而已。我们就把它当作一个从互联网中下载下来的PHP扩展源码的存放目录即可。事实上,所有PHP扩展源码扩展存放的路径: /usr/src/php/ext 里面。
docker-php-ext-install 这个命令,就是用来启动 PHP扩展 的。我们使用pecl安装PHP扩展的时候,默认是没有启动这个扩展的,如果想要使用这个扩展必须要在php.ini这个配置文件中去配置一下才能使用这个PHP扩展。而 docker-php-ext-enable 这个命令则是自动给我们来启动PHP扩展的,不需要你去php.ini这个配置文件中去配置。
docker-php-ext-enable 这个命令,是用来安装并启动PHP扩展的。命令格:docker-php-ext-install “源码包目录名”
docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,当你安装扩展的时候,需要自定义配置时,就可以使用它来帮你做到。
Docker php安装扩展步骤
进入 php 容器 docker exec -it dnmp-php /bin/bash 如果提示:bash: export: [/bin/bash,': not a valid identifier 。删除配置文件vim ~/.bashrc 末尾部分:[/bin/bash, -c, source ~/.bashrc]
重启 php 服务 docker-compose restart php 修改核心配置文件 php.ini ,可使用该命令重新加载配置文件。 修改扩展配置文件 www.conf ,可使用该命令重新加载配置文件。
服务管理 - 配置测试:
docker exec -it dnmp-php bash -c "/usr/local/php/sbin/php-fpm -t" - 启动:
docker exec -it dnmp-php bash -c "/usr/local/php/sbin/php-fpm" - 关闭:
docker exec -it dnmp-php bash -c "kill -INT 1" - 重启:
docker exec -it dnmp-php bash -c "kill -USR2 1" - 查看 php-fpm 进程数:
docker exec -it dnmp-php bash -c "ps aux | grep -c php-fpm" - 查看 PHP 版本:
docker exec -it dnmp-php bash -c "/usr/local/php/bin/php -v"
编译安装扩展 - 1、下载:
cd /opt && git clone https://github.com/php/pecl-encryption-mcrypt.git - 2、生成配置文件:
/usr/local/php/bin/phpize --with-php-config=/usr/local/php/bin/php-config - 3、检测配置文件:
./configure --with-php-config=/usr/local/php/bin/php-config - 4、编译:
make -j2 - 5、安装:
make install - 6、修改
php.ini 配置文件:vim /usr/local/php/etc/php.ini - 7、重启
php-fpm :kill -USR2 1
服务器开机自动启 PHP 容器,Ubuntu 18.04 rc.local systemd 设置 #!/bin/sh -e# docker-compose php container/usr/local/bin/docker-compose -f /home/www/dnmp/docker-compose.yml up -d# docker tab cron startsleep 10; docker exec lnmp-php bash -c "/etc/init.d/cron start"exit 0 编辑文件vim /etc/rc.local ,添加以上内容以上主要是解决服务器重启后,PHP 容器不能够重启以及 PHP 容器之内的 Crontab 服务不能够启动的的问题,目前没有其他解决方案
Redis管理- 连接 Redis 容器:
docker exec -it dnmp-redis redis-cli -h 127.0.0.1 -p 63789 - 通过容器连接:
docker exec -it dnmp-redis redis-cli -h dnmp-redis -p 63789 - 单独重启 redis 服务
docker-compose up --no-deps -d redis - 外部宿主机连接:
redis-cli -h 127.0.0.1 -p 63789
Composer管理使用Docker安装Linux环境进入项目目录,执行以下命令安装 docker run --rm --interactive --tty --volume $PWD:/app --user $(id -u):$(id -g) composer install --ignore-platform-reqs --ignore-platform-reqs 参数表示官方 docker composer 库没有包含当前 PHP 版本
Windows环境安装一个新的 composer 包 E:\dnmp> docker run --rm --interactive --tty -v e:/dnmp/www/thinkphp_3.2:/app composer require tinywan/load-balancing --ignore-platform-reqs tinywan/load-balancing 为需要安装的包名
执行执行项目的绝对路径 E:\dnmp> docker run --rm --interactive --tty -v e:/dnmp/www/tp6:/app composer install --ignore-platform-reqs tp6 为项目目录
容器内需要进入dnmp-php 容器: docker exec -it dnmp-php /bin/bash 查看 composer 版本:composer --version 修改 composer 的全局配置文件(推荐方式) composer config -g repo.packagist composer https://packagist.phpcomposer.com// 或者composer config -g repo.packagist composer https://packagist.laravel-china.org 如果你是墙内客户,务必添加以上国内镜像。否则会出现file could not be downloaded (HTTP/1.1 404 Not Found)
更新框架或者扩展 /var/www/tp5.1# apt update/var/www/tp5.1# apt install sudo/var/www/tp5.1# sudo -u www-data sh -c "/usr/local/php/bin/php /usr/local/bin/composer install" 请使用www-data 更新安装包,而不是默认直接使用root 账户,尽量使用composer install 更新安装包,而不是composer update ,
宿主机建议在主机 HOST 中使用 composer,避免 PHP 容器变得庞大,Docker Official Images 宿主机直接使用命令:docker exec dnmp-php bash -c "cd /var/www/p2p_wallet; /usr/local/php/bin/php /usr/local/sbin/composer update"
Crontab管理执行方案宿主机执行任务(推荐)# 2019年2月14日 @add Tinywan 获取图表数据 每3分钟执行一次*/30 * * * * docker exec dnmp-php echo " Hi Lnmp " >> /var/www/crontab.log dnmp-php 为容器名称
容器内执行任务- 需要进入
dnmp-php 容器: docker exec -it dnmp-php /bin/bash - 手动启动 crontab,
/etc/init.d/cron start - 添加 Crontab 任务
crontab -e - 添加任务输出日志到映射目录:
* * * * * echo " Hi dnmp " >> /var/www/crontab.log - 定时执行 ThinkPHP5 自带命令行命令:
*/30 * * * * /usr/local/php/bin/php /var/www/tp5.1/think jobs hello
配置任务调度器 scheduler将下面内容添加到 crontab 计划任务中: * * * * * /usr/local/bin/php /var/www/www.tinywan.com/scheduler.php 1>> /dev/null 2>&1 默认crontab 服务是没有启动的。需要启动Crontab 任务 /var/www # crond start
WebSocket管理在项目中难免会用到 workerman 进入dnmp-php 容器:docker exec -it dnmp-php /bin/bash 以 daemon(守护进程)方式启动 workerman :php ../workerman/start.php start -d 宿主机平滑重启 workerman :docker exec -it dnmp-php bash -c "/usr/local/php/bin/php /var/www/site/think worker:gateway reload" 配置docker-compose.yml 文件中对应的映射端口 php: ports: - "9000:9000" - "9502:9502" # workerman 映射端口 - "1239:1239" # Gateway 客户端 防火墙问题,如果使用阿里云 ESC,请在安全组增加入方向和出方向端口配置 协议类型:自定义 TCP端口范围:9502/9502授权对象:0.0.0.0/0 宿主机可以查看对应端口号是否已经映射成功 ps -aux|grep 9502WorkerMan: worker process AppGateway websocket://0.0.0.0:9502 通过telnet 命令检测远程端口是否打开 telnet 127.0.0.1 9502Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'. 出现Connected 表示连通了
通过 Console 测试是否支持外网访问 var ws = new WebSocket('ws://宿主机公网ip:9502/');ws.onmessage = function(event) { console.log('MESSAGE: ' + event.data);};ƒ (event) { console.log('MESSAGE: ' + event.data);}MESSAGE: {"type":"docker","text":"Hi Tinywan"<
|
请发表评论