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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM