一、安装和配置docker
1、下载docker,安装docker,安装时勾选WSL2引擎
2、通过微软商店下载WSL2,这里选用的时ubuntu22.04
3、Ubuntu下载后默认是WSL1,这时在docker配置Resources->WSL integration中是看不到Ubuntu的,通过以下命令更改WSL配置
# 查看WSL列表
wsl --list --verbose
# 设置Ubuntu-22.04为WSL2
wsl --set-version Ubuntu-22.04 2这时再点击WSL integration中Refresh就可以看到Ubuntu22.04,开启后就可以在WSL中操作docker了。

二、创建容器
1、拉取ubuntu系统镜像
docker pull ubuntu:22.042、创建容器
docker run -itd \
-p 80:80 \
--name lnmpa \
--mount type=bind,source=/mnt/e/project,target=/data/www \
ubuntu:22.04 /bin/bash以上命令为:端口映射80,,容器名称设置为lnmpa,挂载磁盘/mnt/e/project文件夹到容器中/data/www文件夹。
此时使用docker ps -a就可以看到刚才创建的容器。
3、进入容器
使用docker exec -it lnmpa /bin/bash即可进入容器进行环境配置操作。
三、配置环境
1、更新软件
使用以下命令,把软件和源更新到最新
apt-get update
apt-get upgrade -y2、安装Nginx,与常规nginx操作一样
apt-get install -y nginx3、添加PHP源且安装PHP7.1、PHP8.0
# 安装vim工具
apt-get install -y vim
# 添加PHP源
apt-get install -y software-properties-common
apt-get update
add-apt-repository ppa:ondrej/php
apt-get update
# 安装PHP7.1
apt-get install php7.1 php7.1-gmp php7.1-readline php7.1-sqlite3 php7.1-tidy php7.1-xml php7.1-bcmath php7.1-bz2 php7.1-intl php7.1-mbstring php7.1-soap php7.1-xsl php7.1-cli php7.1-common php7.1-curl php7.1-dev php7.1-fpm php7.1-gd php7.1-grpc php7.1-http php7.1-json php7.1-mbstring php7.1-mcrypt php7.1-mongodb php7.1-mysql php7.1-oauth php7.1-pgsql php7.1-opcache php7.1-redis php7.1-snmp php7.1-yac php7.1-zip
# 安装PHP8.0
apt-get install php8.0 php8.0-gmp php8.0-readline php8.0-sqlite3 php8.0-tidy php8.0-xml php8.0-bcmath php8.0-bz2 php8.0-intl php8.0-mbstring php8.0-soap php8.0-xsl php8.0-cli php8.0-common php8.0-curl php8.0-dev php8.0-fpm php8.0-gd php8.0-grpc php8.0-http php8.0-mbstring php8.0-mcrypt php8.0-mongodb php8.0-mysql php8.0-oauth php8.0-pgsql php8.0-opcache php8.0-redis php8.0-snmp php8.0-yac php8.0-zip然后在对应的php.ini配置中添加以下yac的cli开启使用的配置,不开启yac在cli模式下无法使用。
# 进入php7.1的cli配置文件夹
cd /etc/php/7.1/cli/conf.d
# 查看yac软链对应的地址
ll | grep yac
# 编辑对应的配置
vim /etc/php/7.1/mods-available/yac.ini
# 添加配置
yac.enable_cli = 1;上面是PHP7.1添加yac的cli配置,其他版本照例配置即可。
接着需要启动fork模式的支持,在php.ini中添加以下配置
grpc.enable_fork_support = 14、安装swoole扩展
先用php-v命令查看当前php版本,如果不是8.0,参考Ubuntu切换PHP版本切换PHP版本到8.0
# 首先安装以下依赖
apt-get install -y libc-ares-dev
apt-get install -y libcurl4-openssl-dev
# 安装扩展
pecl install swoole
# 添加配置
echo 'extension=swoole.so' >> /etc/php/8.0/mods-available/swoole.ini
cd /etc/php/8.0/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
cd /etc/php/8.0/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
#同时swoole.ini配置新增以下配置
swoole.use_shortname='Off'5、安装redis
四、其他扩展安装及配置
1、配置nginx
由于之前配置的有linux的配置,直接修改配置文件中的路径,然后上传即可
2、安装supervisor
apt-get install supervisor3、安装监听工具inotify
由于使用了hyperf框架,这个框架是cli模式,在开发期间调试需要反复重启启动文件,为了省事就写了个脚本,对项目文件监听,如果有修改php文件,就kill掉进程,重新启动,然后使用supervisor常驻脚本任务。
apt-get install -y inotify-tools监听文件脚本如下:
# 监控排除.idea/runtime目录/.log/.swp文件
inotifywait -rq --exclude "(^.+.[^php]$)" -e modify {项目路径} | while read LINE
do
kill -9 $(ps -ef | grep {项目名称APP_NAME} | grep -v grep | awk '{print $2}');
done;4、启动各个服务
先用nginx -t命令检查nginx配置是否正常
再用service nginx start命令启动nginx
service php7.1-fpm start命令启动php7.1的fpm
service supervisor start启动常驻任务
五、镜像备份与使用
1、导出容器为镜像
docker commit lnmpa lnmpa:1.0.12、再次使用是生成新的容器
docker run -itd \
-p 80:80 \
--name lnmpa \
--mount type=bind,source=/mnt/e/project,target=/data/www \
lnmpa:1.0.1 /bin/bash