通过网盘分享的文件:docker-images
链接: https://pan.baidu.com/s/1qyidkCeGg0O_3odSG5jstA 提取码: sduq
1、在对应的目录下创建目录,用于保存docker相关的配置文件,如~/www/
cd ~/www
mkdir -p nginx/conf/ nginx/conf.d nginx/logs nginx/cert project mysql/data mysql/logs mysql/conf mysql/db
2、配置对应的文件
nginx/nginx.conf
用于配置nginx
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server_tokens off;
# 开启gzip
gzip on;
# 低于1kb的资源不压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 16k;
# 压缩级别【1-9】,越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右。
gzip_comp_level 4;
# 需要压缩哪些响应类型的资源,缺少的类型自己补。
gzip_types text/css text/javascript application/javascript;
# 配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";
# 是否添加“Vary: Accept-Encoding”响应头,
gzip_vary on;
# 设置gzip压缩针对的HTTP协议版本,没做负载的可以不用
# gzip_http_version 1.0;
upstream gdstats {
server gdstats-gateway:8082;
}
upstream storage {
server gdstats-file:9300;
}
include /etc/nginx/conf.d/*.conf;
}
nginx/conf.d/hostname-vhost.conf
用于配置vhost虚拟机(域名)
server {
listen 80;
server_name test.kunyuan.tech;
root /www/prject/website/public; #注意,此处应该为docker容器的目录,可以run的时候做关联
client_max_body_size 20m;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm 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_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
gzip on;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$
{
expires 30d;
}
location ~ .*\.(?:js|css)$
{
expires 30d;
}
location ~ .*\.(?:htm|html)$
{
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
location ~ /\.(?!well-known).* {
deny all;
}
}
nginx/logs 用于保存nginx运行日志
nginx/cert 用于保存https/443端口相关证书文件
project 用于存放项目文件,里面可建多个子目录,需要注意nginx和php容器映射目录一致
mysql/data 用于存放mysql数据库文件
mysql/logs 用于存放mysql日志文件
mysql/db 用于存放**.sql文件,在mysql容器运行时会进行初始化
mysql/conf 用于存放mysql配置文件,如 my.cnf
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
init_connect='SET NAMES utf8'
#binlog格式
binlog_format = mixed
#存放地址,注意这个地址是docker容器里面的地址,不是宿主机里面的地址
log-bin=/var/lib/mysql/mysql-bin
server-id=33
#存放时间
expire_logs_days=30
#最大文件大小
max_binlog_size=50m
#缓存大小
binlog_cache_size=10m
#最大缓存大小
max_binlog_cache_size=512m
#主从设置-开始
#log-bin=mysql-bin
#server-id=37
#主从设置-结束
#慢查询
slow_query_log=1
slow_query_log_file=/logs/test-slow.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
3、启动docker
# 创建虚拟网络
docker network create --subnet=172.25.0.0/24 tech.ky-network
# 运行 redis
docker run -itd --name tech.ky-redis --restart=always --net tech.ky-network --ip 172.25.0.11 -p 6379:6379 redis --requirepass mypassword
# 运行 mysql
docker run --name tech.ky-mysql --restart=always --net tech.ky-network --privileged=true \
--ip 172.25.0.12 -p 3306:3306 \
-v ~/www/mysql/conf:/etc/mysql/conf.d \
-v ~/www/mysql/logs:/logs \
-v ~/www/mysql/data:/var/lib/mysql \
-v ~/www/mysql/db:/docker-entrypoint-initdb.d \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# 运行php-fpm, 注意-v project项目目录,必须与nginx项目目录一致,否则会产生404 not found的问题
docker run -itd --name tech.ky-php-v1 \
-v ~/www/project:/www/project \
--restart=always \
--net tech.ky-network \
--ip 172.25.0.13 \
-p 9000:9000 php:7.4-fpm
# 运行nginx 注意-v project项目目录,必须与php 项目目录一致,否则会产生404 not found的问题
docker run -itd --name tech.ky-nginx --net tech.ky-network \
--ip 172.25.0.14 -p 80:80 -p 443:443 --restart=always \
-v ~/www/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/www/nginx/conf.d:/etc/nginx/conf.d \
-v ~/www/nginx/logs:/var/log/nginx \
-v ~/www/nginx/cert:/etc/nginx/cert \
-v ~/www/project:/www/project \
--link tech.ky-php-v1:php nginx
4、已知问题
4.1 可能会存在mysql_connect函数不存在的问题,进入php容器,执行以下命令,然后重启容器。
cd /usr/local/bin
./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql
./docker-php-ext-install mysqli
#安装gd
apt-get install libzip-dev
apt-get install libonig-dev
apt-get install libpng-dev
./docker-php-ext-install mbstring
./docker-php-ext-install zip
./docker-php-ext-install gd
4.2 运行php文件提示 page not found,这是可能因为php的docker容器目录与nginx配置的项目文件路径不致产生的,删除容器重建。注意php和nginx中的 -v ~/www/project:/www/project
4.3 如果使用docker-compose 安装,Dockerfile 文件参考
FROM php-fpm:7.4
RUN docker-php-ext-install mysql mysqli pdo_mysql
RUN apt-get update -y && apt-get install -y libonig-dev libzip-dev libpng-dev
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install zip
RUN docker-php-ext-install gd