Docker部署NMP+Composer+(Swoole,Redis扩展)1.安装Mysql因为我安装PHP后需要连接Mysql,所以这里先安装Mysql容器dockerpullmysql:latest这里我拉取的是最新版本:latest代表最新版本。如果要下载5.7,命令应该是dockerpullmysql:5.7然后我们可以使用dockerimages命令查看镜像是否成功拉取到本地,然后我们创建一个数据卷。如果是新的容器,那么就是为了将容器中产生的数据同步更新到宿主机上,万一容器崩溃或者损坏,数据也不会丢失。现在创建Mysql配置文件夹、data文件夹、log文件夹mkdir/docker/conf/mysqlmkdir/docker/data/mysqlmkdir/docker/logs/mysql在/docker/conf/mysql目录下新建mysql.cnf配置文件,如下[mysqld]pid-file=/var/run/mysqld/mysqld.pidsocket=/var/run/mysqld/mysqld.sockdatadir=/var/lib/mysqllog-error=/var/log/mysql/error.log#默认情况下我们只接受来自本地主机的连接bind-address=0.0.0.0#建议禁用符号链接以防止各种安全风险symbolic-links=0init_connect='SETcollat??ion_connection=utf8_unicode_ci'init_connect='SETNAMESutf8'character-set-服务器=utf8collat??ion-server=utf8_unicode_ciskip-character-set-client-handshake#skip-grant-tables[客户端]默认-character-set=utf8[mysql]default-character-set=utf8然后我们运行容器dockerrun-p3306:3306--namemysql-v/docker/conf/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf-v/docker/logs/mysql:/var/log/mysql-v/docker/data/mysql:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=mypass--privileged=true--restart=always-dmysql:latest然后就可以使用命令查看dockerps2的运行状态了。安装PHP第一步拉取镜像dockerpullphp:fpm-alpine这里是php:fpm-alpine版本,比较小,和上面步骤一样,我们创建数据卷文件夹mkdir/docker/conf/phpmkdir/docker/logs/phpmkdir/docker/www因为数据量连接有问题,他一开始并没有设置在哪里同步数据,但是php.ini等文件不是很想去别的地方再找他们。这时候我们可以先运行容器,在进入的时候将容器中的数据复制到宿主机中。dockerrun-it--namephpphp:fpm-alpineshdockercpphp:/usr/local/etc//docker/config/php/然后可以按Ctrl+P+Q退出,或者输入exit退出,因为后面需要运行的时候名称冲突,所以我们首先要删除刚刚运行的容器。dockerstopphpdockerrmphp接下来我们可以进入/docker/config/php目录,发现会有一个etc文件夹。这里就看个人需求了。我把etc里面的所有文件移动到上层,也就是php目录下的mv*../rm-rfetc/然后继续运行PHP容器dockerrun-p9000:9000--namephp-v/docker/www:/www-v/docker/config/php:/usr/local/etc-v/docker/logs/php:/var/log/php--linkmysql:mysql--privileged=true--restart=always-dphp:fpm-alpine3.安装Nginx并拉取镜像docker像往常一样pullnginx:latest然后创建宿主机的数据卷文件夹mkdir/docker/conf/nginxmkdir/docker/logs/nginx我们在/docker/conf/nginx目录下创建一个default.conf配置文件server{listen80;#这个www目录就是nginx容器根目录/www中的www目录;服务器名称本地主机;location/{indexindex.htmlindex.php;}error_page500502503504/50x.html;location=/50x.html{root/usr/share/nginx/html;}location~\.php${fastcgi_passphp:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;}}然后运行容器dockerrun-p80:80--namenginx-v/docker/www:/www-v/docker/conf/nginx:/etc/nginx/conf.d-v/docker/logs/nginx:/var/log/nginx--linkphp:php--privileged=true--restart=always-dnginx:latest注意需要挂nginx和php-fpm这两个容器只有宿主机环境中相同的目录才能正确解析,即/docker/www目录4.安装Swoole和Redis扩展不再是拉取镜像,因为是安装PHP扩展,所以我们需要进入我们刚刚运行的PHP容器中,运行dockerexec-itphpsh然后运行命令apk--no-cacheaddautoconfgccg++makeopensslopenssl-devzstd-devpeclinstallswoolepeclinstallredis安装redis扩展时,您可能会遇到错误检查使用系统liblzf...nocheckingforigbinaryincludes...configure:error:Cannotfindigbinary.hERROR:'/tmp/pear/temp/redis/configure--with-php-config=/usr/local/php/bin/php-config--enable-redis-igbinary=y--enable-redis-lzf=y'这里失败是因为没有安装igbinary,一个序列号和反序列化的php扩展,需要执行下面代码安装peclinstalligbinary安装成功后重新执行redis扩展的安装命令。最后,在php.ini文件中添加如下代码。
