win10使用Docker构建PHP开发环境

win10使用Docker构建PHP开发环境

一.目录设置

可根据自身要求更改目录设置,保持与创建容器时保持一致即可

D:/docker
	┗━━mysql
		┗━━conf
			┗━━my.cnf
		┗━━data
		┗━━log
	┗━━nginx
		┗━━conf
			┗━━default.conf
		┗━━log
	┗━━php
		┗━━conf
			┗━━php.ini
			┗━━www.conf
	┗━━redis
		┗━━conf
			┗━━redis.conf
		┗━━data
	┗━━www
	    ┗━━index.php

二.其他说明

  1. 容器间的调用使用容器IP,cat /etc/hosts 查看

三.软件安装

①MySQL

1.拉取指定版本的mysql

docker pull mysql:5.7

2.运行制定版本

docker run --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7

MySQL 属于有状态应用,若将其容器化需将其状态抽离到宿主机,其配置文件、日志文件和持久化数据都应该挂载到宿主机上。在 PC 上创建目录存储 Mysql 的数据、配置、日志,这样数据存储在宿主机上,我们删除容器后再次安装,可直接使用,不会导致数据丢失。

3.删除指定版本

docker stop mysql && docker rm mysql

4.配置MySQL配置文件

my.cnf
可以按照常规使用进行相关配置

[mysqld]
datadir=/var/lib/mysql
default-time_zone = '+8:00'
log-error=/var/log/mysql/error.log

5.启动服务

命令详解

docker run --name mysql
  --restart=always ( Docker 重启时容器也跟随启动)
  --privileged=true (Docker 为容易内的 root 用户赋予真正的 root 权限,不然会提示 log 目录权限不足)
  -p 3306:3306 
  -v docker/mysql/conf:/etc/mysql/conf.d (将配置目录挂载到容器内的配置目录)
  -v docker/mysql/data:/var/lib/mysql (将数据存储目录挂载到容器内的出局存储目录)
  -v /docker/mysql/log:/var/log/mysql (将日志目录挂载到容器内的日志目录)
  -e MYSQL_ROOT_PASSWORD=12345678 
  -d mysql:5.7

启动服务

docker run --name mysql --restart=always --privileged=true -p 3306:3306  -v D:/docker/mysql/conf:/etc/mysql/conf.d -v D:/docker/mysql/data:/var/lib/mysql -v D:/docker/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7

6.进入容器,设置远程连接

$ docker exec -it mysql bash
$ mysql -u root -p12345678
$ mysql-> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
$ mysql-> FLUSH PRIVILEGES;

②PHP

1.先安装运行PHP服务

docker run -d -v D:/docker/www:/var/www/html -p 9000:9000 --name php73 php:7.3-fpm

2.将配置文件复制出来

docker cp php73:/usr/local/etc/php-fpm.d/www.conf D:/docker/php/conf/www.conf
docker cp php73:/usr/local/etc/php/php.ini-production D:/docker/php/conf/php.ini

3.停止并删除服务

docker stop php73 && docker rm php73

4.重新启动服务并进行关联

docker run -d -v D:/docker/www:/var/www/html  -v D:/docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v D:/docker/php/conf/php.ini:/usr/local/etc/php/php.ini  -p 9000:9000 --name php73 php:7.3-fpm

如果使用mysql容器需要加上 –link mysql:mysql
如果使用redis容器需要加上 –link redis:redis

docker run -d -p 9000:9000 --name php73 -v  D:/docker/www:/var/www/html --link mysql:mysql --link redis:redis -v D:/docker/php/conf/www.conf:/usr/local/etc/php-fpm.d/www.conf -v D:/docker/php/conf/php.ini:/usr/local/etc/php/php.ini   php:7.3-fpm

5.安装容器环境驱动

$ docker exec -it php73 bash
apt-get update 
apt-get install libssl-dev
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev

6.进入容器,安装相关拓展

$ docker exec -it php73 bash
docker-php-ext-install sockets pdo_mysql opcache openssl gd
docker-php-ext-enable sockets pdo_mysql opcache openssl gd
安装redis
pecl install redis #安装redis拓展
docker-php-ext-enable redis #启用redis拓展
pecl install redis && docker-php-ext-enable redis
安装swoole
pecl install swoole && docker-php-ext-enable swoole
安装swoole指定版本,由于最新的是php8.0,本地是7.3,低版本PHP需要指定低版本版本4.5.2
pecl install swoole-4.5.2 && docker-php-ext-enable swoole

7.安装composer

docker exec -it php73 bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
#换阿里云源(可选)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

③NGINX

1.先安装运行nginx

docker run -p 80:80 --name nginx118 nginx:1.18

2.将配置文件复制出来

docker container cp nginx118:/etc/nginx/conf.d D:/docker/nginx/conf

3.重新启动服务

docker run --name nginx118 -p 80:80 -v D:/docker/nginx/conf:/etc/nginx/conf.d -v D:/docker/www:/usr/share/nginx/html -v D:/docker/nginx/log:/var/log/nginx --link php73:phpfpm -d nginx:1.18

④redis

1.下载redis镜像

docker pull redis
// 下载指定版本
docker pull redis:5.0.4

2.编辑对应redis.conf

https://raw.githubusercontent.com/antirez/redis/5.0.14/redis.conf

daemonize no 一定

daemonize:yes:当,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程.
daemonize:no: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。
查阅容器相关资料相关的,docker 是以前台进程监控,如果设置 daemonize:yes redis在容器内是后台守护进程,docker检测不到认为服务未启动

2.运行redis服务

docker run
-p 63798:6379   端口映射
--name redis    别名  
-v D:/docker/redis/data:/data   挂载数据目录
-v D:/docker/redis/conf:/etc/redis 挂载配置文件
-d redis redis-server /etc/redis/redis.conf  指定配置文件启动
--requirepass "123456" 设置redis密码 
--appendonly yes    开启持久化
docker run -d --name redis -p 6379:6379 -v D:/docker/redis/data:/data -v D:/docker/redis/conf:/etc/redis --privileged=true redis:5.0.14 redis-server /etc/redis/redis.conf

测试页面

index.php

<?php
echo "redis-------------------<br />";
$redis = new \Redis();
var_dump($redis);
$redis->connect('172.17.0.3', 6379);
$redis->auth('123456'); //密码验证
$redis->set('count',1);
// $redis->select(2);//选择数据库2
$count = $redis->get('count');
echo "<br />" . $count . "<br />";
echo "mysql-------------------<br />";
try {
    $dbh = new PDO("mysql:host=172.17.0.2;dbname=test", 'root', '12345678'); //初始化一个PDO对象
    echo "连接成功<br/>";
    $dbh = null;
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}

参考链接

win10 下 用docker 部署nmp搭建开发环境
基于Docker搭建PHP开发环境
Docker 安装 Redis 容器 (完整详细版)
安装GD拓展

                       

点击阅读全文

上一篇 2023年 6月 9日 pm9:01
下一篇 2023年 6月 9日 pm9:02