本地工作目录
nginx/
nginx.conf
conf.d/
php/
php-fpm.conf
php.ini
mariadb/
conf/
data/
redis/
data/
redis.conf
wwwroot/
myapp/
phpmyadmin/
logs/
nginx/
php/
mariadb/
Network
docker network create lnmp
PHP:8.2.3-fpm
先启动临时容器并复制配置文件到本地
docker run -d --name temp php:8.2.3-fpm
docker cp temp:/usr/local/etc 本地目录
然后再启动 nginx
容器,其中 phpfpm
会在容器的 hosts
中绑定为容器的IP
多行版:好像只能一行行复制到终端里,主要是行尾的斜杠不行
docker run -d \
-v /Users/iguoji/Desktop/docker/single/wwwroot:/home/wwwroot \
-v /Users/iguoji/Desktop/docker/single/php:/usr/local/etc \
-v /Users/iguoji/Desktop/docker/single/logs/php:/usr/local/log \
--network lnmp \
--name phpfpm \
php:8.2.3-fpm
一行版:推荐
docker run -d -v /Users/iguoji/Desktop/docker/single/wwwroot:/home/wwwroot -v /Users/iguoji/Desktop/docker/single/php:/usr/local/etc -v /Users/iguoji/Desktop/docker/single/logs/php:/usr/local/log --network lnmp --name phpfpm php:8.2.3-fpm
安装 mysqli
扩展,phpMyAdmin
需要
docker exec -it phpfpm /bin/bash
docker-php-ext-configure mysqli
docker-php-ext-install mysqli
exit
docker container restart phpfpm
安装 redis
扩展
docker exec -it phpfpm /bin/bash
pecl install redis
docker-php-ext-enable redis
安装 swoole
扩展
docker exec -it phpfpm /bin/bash
pecl install swoole
docker-php-ext-enable swoole
Nginx:latest
先启动临时容器并复制配置文件到本地
docker run -d --name temp nginx:latest
docker cp temp:/etc/nginx/nginx.conf 本地目录/nginx.conf
docker cp temp:/etc/nginx/conf.d 本地目录/conf.d
然后再启动 nginx
容器,其中 nginx
会在容器的 hosts
中绑定为容器的IP
多行版:好像只能一行行复制到终端里,主要是行尾的斜杠不行
docker run -d \
-v /Users/iguoji/Desktop/docker/single/wwwroot:/home/wwwroot:ro \
-v /Users/iguoji/Desktop/docker/single/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /Users/iguoji/Desktop/docker/single/nginx/conf.d:/etc/nginx/conf.d:ro \
-v /Users/iguoji/Desktop/docker/single/logs/nginx:/var/log/nginx \
-p 80:80 \
--network lnmp \
--name nginx \
nginx:latest
一行版:推荐
docker run -d -v /Users/iguoji/Desktop/docker/single/wwwroot:/home/wwwroot:ro -v /Users/iguoji/Desktop/docker/single/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /Users/iguoji/Desktop/docker/single/nginx/conf.d:/etc/nginx/conf.d:ro -v /Users/iguoji/Desktop/docker/single/logs/nginx:/var/log/nginx -p 80:80 --network lnmp --name nginx nginx:latest
最后以 laravel
配置为例,核心点在 root
和 fastcgi_pass
这两行
server {
listen 80;
listen [::]:80;
server_name myapp.com;
root /home/wwwroot/myapp/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
phpMyAdmin
的话,只需要将复制上例配置文件,将其中的 root
设置为正确目录即可
Composer
docker exec -it phpfpm /bin/bash
curl -o composer.phar https://mirrors.aliyun.com/composer/composer.phar
mv composer.phar /usr/local/bin/composer
cd /usr/local/bin/
chmod 777 composer
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
Redis
先启动临时容器并查看 redis
版本
docker run -d --name temp redis:latest
docker exec temp redis-cli -v
再去 redis
官网配置文件列表 查看对应的配置文件
并下载到本地 本地目录/redis/redis.conf
记得设置密码 requirepass 123456
然后再启动 redis
容器,其中 redis
会在容器的 hosts
中绑定为容器的IP
docker run -d \
-v /Users/iguoji/Desktop/docker/single/redis/data:/data \
-v /Users/iguoji/Desktop/docker/single/redis/redis.conf:/usr/local/etc/redis/redis.conf \
--network lnmp \
--name redis \
redis:latest redis-server /usr/local/etc/redis/redis.conf --save 60 1 --loglevel warning
MariaDB
代码中连接到数据库时,服务器地址填写
mariadb
docker run -d \
-v /Users/iguoji/Desktop/docker/single/mariadb/data:/var/lib/mysql \
-v /Users/iguoji/Desktop/docker/single/logs/mariadb:/var/log/mysql \
-v /Users/iguoji/Desktop/docker/single/mariadb/conf:/etc/mysql/conf.d \
-e MARIADB_ROOT_PASSWORD=123456 \
--network lnmp \
--name mariadb \
mariadb:latest