centOS7 安装 docker nginx+php71+mysql, 并安装gd和mysql扩展

0. 准备:

# 运行docker
sudo systemctl start docker

# 创建网络
docker network create nm

1. 复制配置文件到宿主机:

# 创建宿主机目录结构
mkdir -p /www/nginx/logs
mkdir -p /www/php71
mkdir -p /www/php72
mkdir -p /www/web

# 创建 nginx 容器
docker run -d --name nginx -p 80:80 --network nm nginx

# 复制 nginx 配置文件
docker cp nginx:/etc/nginx/conf.d /www/nginx
docker cp nginx:/etc/nginx/nginx.conf /www/nginx

# 创建 php 容器
docker run -d --name php71 -p 9001:9000 --network nm php:7.1.27-fpm
docker run -d --name php72 -p 9002:9000 --network nm php:7.2.16-fpm

# 复制 php 配置文件
docker cp php71:/usr/local/etc/php-fpm.d/www.conf /www/php71
docker cp php71:/usr/local/etc/php/php.ini-development /www/php71/php.ini
docker cp php72:/usr/local/etc/php-fpm.d/www.conf /www/php72
docker cp php72:/usr/local/etc/php/php.ini-development /www/php72/php.ini

# 销毁容器
docker rm -vf nginx
docker rm -vf php71
docker rm -vf php72

2. 创建容器, 挂载目录:

# 创建 nginx 容器
# -v 说明:
# 第1个: 挂载 nginx 主配置文件
# 第2个: 挂载 nginx 站点配置目录
# 第3个: 挂载日志
# 第4个: 挂载 html 文件目录
docker run -d --name nginx -p 80:80 --network nm \
  -v /www/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /www/nginx/conf.d:/etc/nginx/conf.d \
  -v /www/nginx/logs:/var/log/nginx \
  -v /www/web:/www/web \
  nginx

# 创建 php 容器
# -v 说明:
# 第1个: 挂载 php-fpm 配置文件
# 第2个: 挂载 php 配置文件
# 第3个: 挂载 html 文件目录
docker run -d --name php71 -p 9001:9000 --network nm \
  -v /www/php71/www.conf:/usr/local/etc/php-fpm.d/www.conf \
  -v /www/php71/php.ini:/usr/local/etc/php/php.ini \
  -v /www/web:/www/web \
  php:7.1.27-fpm

docker run -d --name php72 -p 9002:9000 --network nm \
  -v /www/php72/www.conf:/usr/local/etc/php-fpm.d/www.conf \
  -v /www/php72/php.ini:/usr/local/etc/php/php.ini \
  -v /www/web:/www/web \
  php:7.2.16-fpm

3. 安装php扩展gd iconv pdo_mysql(参考:https://hub.docker.com/_/php):

# 进入容器
docker exec -it php71 bash

# 安装`pdo_mysql`扩展:
docker-php-ext-install pdo_mysql

# 安装`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-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

# 退出容器
exit

4. 配置站点:

4.1. 默认站点:

server {
    listen       80;
    server_name  default.ddd;
    root   /www/web/default;
    index  index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location = /50x.html {
        root   /www/web/default;
    }

    location ~ \.php$ {
    #    root           html;
        fastcgi_pass   php71:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

4.2. 默认其它站点:

server {
    listen       80;
    server_name  pintuu.ddd;
    root   /www/web/pintuu;
    index  index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location = /50x.html {
        root   /www/web/pintuu;
    }

    location ~ \.php$ {
    #    root           html;
        fastcgi_pass   php72:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

4.3. 上传网站代码;

4.4. 重启nginx:

docker restart nginx

4.5. 配置附件:配置好的.zip & www-yuan.zip


5. 安装mysql

5.1. 复制配置文件到宿主机:

# 创建目录(该目录在启动镜像之前要保证为空, 否则密码可能错误)
mkdir -p /www/mysql/data

# 创建容器
docker run -d --name mysql --rm -p 3306:3306 --network nm \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:5.7.25

# 复制配置文件
docker cp mysql:/etc/mysql/conf.d /www/mysql

# 删除容器
docker rm -vf mysql

5.2. 创建mysql容器,挂载目录:

docker run -d --name mysql --rm -p 3306:3306 --network nm \
  -v /www/mysql/mysql_data:/var/lib/mysql \
  -v /www/mysql/conf.d:/etc/mysql/conf.d \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:5.7.25

5.3. 测试连接:

docker exec -it mysql mysql -uroot -p123456