网络
docker network create \
--subnet "6.6.0.0/16" \
lnmp
- --subnet 指定子网网段
Nginx
第一步:先准备主机目录结构
[root@iGuoJI /]# mkdir -p /home/lnmp/nginx/{conf,html,logs}
[root@iGuoJI /]# cd /home/lnmp/nginx/
[root@iGuoJI nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 6 5月 23 12:42 conf
drwxr-xr-x. 2 root root 6 5月 23 12:46 html
drwxr-xr-x. 2 root root 6 5月 23 12:45 logs
第二步:复制容器中的配置到主机
先随便启动一个Nginx容器,再从这个容器中复制配置文件到主机,最后删除这个容器
[root@iGuoJI nginx]# docker run -d --name nginx nginx
049150441b28b490a9b833d864acf47a4b89c9a2486a90e4d9e245f97e9c96e3
[root@iGuoJI nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
049150441b28 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp nginx
[root@iGuoJI nginx]# docker cp nginx:/etc/nginx/nginx.conf ./
[root@iGuoJI nginx]# docker cp nginx:/etc/nginx/conf.d/default.conf ./conf/default.conf
[root@iGuoJI nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 26 5月 23 13:12 conf
drwxr-xr-x. 2 root root 24 5月 6 12:46 html
drwxr-xr-x. 2 root root 41 5月 6 12:45 logs
-rw-r--r--. 1 root root 648 1月 25 23:13 nginx.conf
[root@iGuoJI nginx]# ll conf/
总用量 4
-rw-r--r--. 1 root root 1093 5月 23 13:11 default.conf
[root@iGuoJI nginx]# docker rm -f $(docker ps -aq)
第三步:正式运行Nginx容器
docker run \
-d \
-p 80:80 \
--net lnmp \
--ip 6.6.0.10 \
--restart=always \
--name nginx \
-v /home/lnmp/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/lnmp/nginx/conf/:/etc/nginx/conf.d/ \
-v /home/lnmp/nginx/apps/:/usr/share/nginx/html/ \
-v /home/lnmp/nginx/logs/:/var/log/nginx/ \
nginx
- -d 作为守护进程在后台运行
- -p 对外暴露端口
- --net 指定使用的网络网卡
- --ip 指定固定IP
- --restart 自动启动
- --name 设置容器名称
- -v 指定双端映射目录
MariaDB
第一步:先准备主机的目录结构
[root@iGuoJI lnmp]# mkdir -p /home/lnmp/mariadb/{conf,data,logs}
[root@iGuoJI lnmp]# ll /home/lnmp/mariadb/
总用量 0
drwxr-xr-x. 2 root root 6 5月 23 13:26 conf
drwxr-xr-x. 2 root root 6 5月 23 13:26 data
drwxr-xr-x. 2 root root 6 5月 23 13:26 logs
第二步:正式启动MariaDB容器
docker run \
-d \
-p 3306:3306 \
--name mariadb \
--net lnmp \
--ip 6.6.0.20 \
--restart=always \
-e MARIADB_ROOT_PASSWORD=123456 \
-v /home/lnmp/mariadb/conf/:/etc/mysql/conf.d/ \
-v /home/lnmp/mariadb/data/:/var/lib/mysql/ \
mariadb
- -d 以后台守护进程运行
- -p 暴露开放端口
- --name 指定容器名称
- --net 指定使用的网络
- --ip 指定具体的IP
- --restart 自动启动
- -e 指定容器启动时的环境变量
- -v 双端映射目录
第三步:查看日志
这里的mariadb是容器名称
docker logs mariadb
PHP
第一步:准备主机目录结构
[root@iGuoJI lnmp]# mkdir -p php/{conf,logs}
[root@iGuoJI lnmp]# ll php/
总用量 0
drwxr-xr-x. 2 root root 6 5月 24 08:57 conf
drwxr-xr-x. 2 root root 6 5月 24 08:57 logs
第二步:启动临时容器复制配置文件
[root@iGuoJI lnmp]# docker run -d --name php-fpm php:8.1.6-fpm
04251f7576a5048baed43b5ea5c5fd67e348881b3b95d71efc24adfa8ec3b98b
[root@iGuoJI lnmp]# docker cp php-fpm:/usr/local/etc/ /home/lnmp/php/conf/
[root@iGuoJI php]# cd /home/lnmp/php/conf/etc/php
[root@iGuoJI php]# ll
总用量 144
drwxr-xr-x. 2 root root 39 5月 14 06:29 conf.d
-rw-r--r--. 1 root root 72762 5月 14 06:29 php.ini-development
-rw-r--r--. 1 root root 72908 5月 14 06:29 php.ini-production
[root@iGuoJI php]# cp php.ini-production php.ini
[root@iGuoJI php]# ll
总用量 216
drwxr-xr-x. 2 root root 39 5月 14 06:29 conf.d
-rw-r--r--. 1 root root 72908 5月 24 09:10 php.ini
-rw-r--r--. 1 root root 72762 5月 14 06:29 php.ini-development
-rw-r--r--. 1 root root 72908 5月 14 06:29 php.ini-production
[root@iGuoJI php]# docker rm -f php-fpm
第三步:正式启动容器
一定要将主机的源码目录映射到容器中,不然PHP-FPM找不到文件
docker run \
-d \
-p 9000:9000 \
--net lnmp \
--ip 6.6.0.30 \
--name php-fpm \
--restart=always \
-v /home/lnmp/php/conf/etc/:/usr/local/etc/ \
-v /home/lnmp/nginx/apps/:/home/lnmp/nginx/apps/ \
php:8.1.6-fpm
- -d 后台运行
- -p 暴露端口
- --net 指定网络
- --ip 指定IP
- --name 容器名称
- --restart 自动启动
- -v 双端目录映射
Nginx + PHP 测试
注意 fastcgi-param SCRIPT_FILENAME 的目录要正确
server {
listen 80;
listen [::]:80;
server_name 127.0.0.1 192.168.3.129;
root /home/lnmp/nginx/apps;
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 6.6.0.30:9000;
fastcgi_param SCRIPT_FILENAME /home/lnmp/nginx/apps/$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
[root@iGuoJI conf]# mv /home/lnmp/nginx/conf/default.conf /home/lnmp/nginx/conf/default.conf.bak
[root@iGuoJI conf]# vi /home/lnmp/nginx/conf/default.conf
[root@iGuoJI conf]# docker exec -it nginx nginx -s reload
Redis
第一步:准备主机目录结构
[root@iGuoJI lnmp]# mkdir -p redis/{conf,data,logs}
[root@iGuoJI lnmp]# ll redis
总用量 0
drwxr-xr-x. 2 root root 6 5月 25 08:42 conf
drwxr-xr-x. 2 root root 6 5月 25 08:42 data
drwxr-xr-x. 2 root root 6 5月 25 08:42 logs
[root@iGuoJI lnmp]#
第二步:正式启动容器
docker run \
-d \
-p 6379:6379 \
--net lnmp \
--ip 6.6.0.40 \
--name redis \
--restart=always \
-v /home/lnmp/redis/data/:/data \
-v /home/lnmp/redis/conf/:/usr/local/etc/redis/ \
redis
PHP + Redis
[root@iGuoJI data]# docker exec -it php-fpm pecl install redis
[root@iGuoJI data]# docker exec -it php-fpm docker-php-ext-enable redis
[root@iGuoJI data]# docker exec -it php-fpm php -m
[PHP Modules]
...
redis
...
[Zend Modules]
[root@iGuoJI data]#