Docker nginx+php7.4+mysql5.7+redis5.0, 并安装gd和mysql扩展
运行docker:
sudo systemctl start docker
0.创建docker网络:
docker network create --subnet=172.18.0.0/24 mxd
1. 复制配置文件到宿主机:
# 创建宿主机目录结构 mkdir -p /www/docker/nginx/logs mkdir -p /www/docker/php/php74 mkdir -p /www/web # 创建 nginx 容器 docker run -d --name nginx --network mxd nginx # 复制 nginx 配置文件 docker cp nginx:/etc/nginx/conf.d /www/docker/nginx docker cp nginx:/etc/nginx/nginx.conf /www/docker/nginx # 创建 php 容器 docker run -d --name php74 --network mxd php:7.4-fpm # 复制 php 配置文件 docker cp php74:/usr/local/etc/php-fpm.d/www.conf /www/docker/php/php74 docker cp php74:/usr/local/etc/php/php.ini-development /www/docker/php/php74/php.ini # 复制完成后销毁容器 docker rm -vf nginx php74
2. 创建容器, 挂载目录:
# 创建 nginx 容器 # -v 说明: # 第1个: 挂载 nginx 主配置文件 # 第2个: 挂载 nginx 站点配置目录 # 第3个: 挂载日志 # 第4个: 挂载 html 文件目录 docker run -d --name nginx -p 80:80 -p 443:443 --network mxd --ip 172.18.0.2 \ -v /www/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /www/docker/nginx/conf.d:/etc/nginx/conf.d \ -v /www/docker/nginx/logs:/var/log/nginx \ -v /www/web:/www/web \ nginx # 创建 php 容器 # -v 说明: # 第1个: 挂载 php-fpm 配置文件 # 第2个: 挂载 php 配置文件 # 第3个: 挂载 html 文件目录 docker run -d --name php74 -p 9000:9000 --network mxd --ip 172.18.0.4 \ -v /www/docker/php/php74/www.conf:/usr/local/etc/php-fpm.d/www.conf \ -v /www/docker/php/php74/php.ini:/usr/local/etc/php/php.ini \ -v /www/web:/www/web \ php:7.4-fpm
3. 安装php扩展gd iconv pdo_mysql
参考:https://hub.docker.com/_/php
https://blog.csdn.net/lggirls/article/details/89395827
https://www.jianshu.com/p/20fcca06e27e
# 进入容器 docker exec -it php74 bash # 安装`pdo_mysql`扩展: docker-php-ext-install pdo_mysql # 单独安装`gd`扩展 apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd # 安装`gd`和`iconv`扩展(如果失败, 请去官网复制): apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd # 安装`zip`扩展: apt-get update && apt-get install -y --no-install-recommends libzip-dev \ && rm -r /var/lib/apt/lists/* \ && docker-php-ext-install -j$(nproc) zip # 安装`intl`扩展: apt-get update && apt-get install -y zlib1g-dev libicu-dev g++ \ && docker-php-ext-configure intl \ && docker-php-ext-install intl # 大一统命令(安装`pdo_mysql`,`gd`,`iconv`,`zip`,`intl`): apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev --no-install-recommends libzip-dev zlib1g-dev libicu-dev g++ \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install -j$(nproc) zip \ && docker-php-ext-configure intl \ && docker-php-ext-install intl # 退出容器 exit
4. 配置站点:
4.1. 默认站点:
cd /www/docker/nginx/conf.d vi default.conf
完整代码:
server { listen 80; listen [::]:80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; root /www/web; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { # root html; fastcgi_pass php74:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
4.2. 默认其它站点:
在/www/docker/nginx/conf.d创建xxx.conf文件,修改为对应内容即可
4.3. 上传网站代码;
4.4. 重启nginx:
docker restart nginx # 测试配置文件是否正确 docker exec nginx nginx -t # 重载配置文件 docker exec nginx nginx -s reload
4.5 访问网站 ip/index.php
5. 安装mysql
5.1. 复制配置文件到宿主机:
# 创建目录(该目录在启动镜像之前要保证为空, 否则密码可能错误) mkdir -p /www/docker/mysql/mysql57/data # 创建容器 docker run -d --name mysql57 --network mxd -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 复制配置文件 docker cp mysql57:/etc/mysql/conf.d /www/docker/mysql/mysql57 docker cp mysql57:/etc/mysql/mysql.conf.d /www/docker/mysql/mysql57 # 删除容器 docker rm -vf mysql57
5.2. 创建mysql容器,挂载目录:
docker run -d --name mysql57 --network mxd --ip 172.18.0.5 \ -v /www/docker/mysql/mysql57/data:/var/lib/mysql \ -v /www/docker/mysql/mysql57/conf.d:/etc/mysql/conf.d \ -v /www/docker/mysql/mysql57/mysql.conf.d:/etc/mysql/mysql.conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
5.3. 测试连接(密码:123456):
docker exec -it mysql57 mysql -uroot -p
6. 安装redis
6.1. 创建宿主机目录:
# 创建宿主机目录结构 mkdir -p /www/docker/redis50/data mkdir -p /www/docker/redis50/conf
6.2. 创建redis.conf文件:
# 创建 redis.conf文件 touch /www/docker/redis50/confredis.conf
或
cd /www/docker/redis50/ wget https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
修改redis.conf
注释符号 #
1. 注释 bind 127.0.0.1
2. protected-mode yes 修改成 protected-mode no
3. 添加 requirepass yourpassword (注:不添加则可以无密码访问)
注:
步骤1和步骤的2目的是为了远程连接redis,如果只需本地访问就无需修改
6.3. 创建redis容器,挂载目录:
docker run -d --name redis50 -p 6379:6379 --network mxd --ip 172.18.0.6 \ -v /www/docker/redis50/conf/redis.conf:/etc/redis/redis.conf \ -v /www/docker/redis50/data:/data \ redis:5.0.7 \ redis-server /etc/redis/redis.conf --appendonly yes
-d 后台运行
-p 端口映射到主机的端口
-v 将主机目录挂载到容器的目录
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
6.4. 测试连接:
docker exec -it redis50 bash redis-cli