docker部署多個php站點


1、安裝docker

2、拉取鏡像

拉取mysql

x86使用:docker pull mysql:5.7

arm使用:docker pull mysql/mysql-server:5.7

拉取php

docker pull php:7.3-fpm

拉取nginx

docker pull nginx

4、創建mysql容器

docker run --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d -i -p 3306:3306 mysql:latest

5、設置mysql遠程訪問

docker exec -it mysql bash

mysql -uroot -p

use mysql;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; 

報錯的話執行一下命令:

UPDATE mysql.user SET host='%' WHERE user='root';

flush privileges;

如果是mysql8,需要設置加密方式:

 

alter user '你的用戶'@'%' identified with mysql_native_password by '你的密碼';

 

配置信息

 

[mysql]
default-character-set=utf8

[client]
port = 3306
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8

[mysqld]
user=mysql
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
character-set-server=utf8
pid-file=/var/lib/mysql/mysqld.pid
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_unicode_ci
log-bin=mysql-bin
server-id=1
symbolic-links=0
secure_file_priv =
wait_timeout=120
interactive_timeout=120
default-time_zone = '+8:00'
skip-external-locking
open_files_limit = 10240
max_connect_errors = 6000
table_open_cache = 800
max_allowed_packet = 40m
sort_buffer_size = 2M
join_buffer_size = 1M
thread_cache_size = 32
query_cache_size = 64M
transaction_isolation = READ-COMMITTED
tmp_table_size = 128M
max_heap_table_size = 128M
sync-binlog = 1
binlog_format = ROW
binlog_cache_size = 1M
key_buffer_size = 128M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M
lower_case_table_names = 1
explicit_defaults_for_timestamp=true
skip_name_resolve = ON
event_scheduler = ON
log_bin_trust_function_creators = 1
innodb_buffer_pool_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_log_buffer_size = 4M
innodb_log_file_size = 256M
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 4
innodb_write_io_threads = 4

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

 

6、創建網站目錄和配置

mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf

7、創建PHP容器,以及PHP配置文件

docker run --name  php -v ~/nginx/www:/www -v ~/php/conf/php.ini:/usr/local/etc/php/conf.d/php.ini php:7.3-fpm

8、創建nginx容器

docker run --name nginx -p 80:80 -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf:/etc/nginx/conf.d --link php:php -d nginx

9、修改配置文件~/nginx/conf/xxx.conf

server {
    listen 80;
    server_name docker.test.com;

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=/$1 last;
            break;
        }
        root /usr/share/nginx/html/web1;
        index index.html index.htm index.php;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html/web1;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /www/web1/$fastcgi_script_name;
        include fastcgi_params;
    }
}

 

特別說明:

 fastcgi_pass php:9000需要與nginx容器的 link一致

/www/web1需要與php映射的路徑一致,並且加上當前站點的根目錄

docker默認安裝的php有些擴展是沒有的,需要自己進入容器安裝

如果錯誤日志出現FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream錯誤,是由於fastcgi_param路徑錯誤導致

10、容器中安裝php擴展

方法一:

pecl install -o -f redis

docker-php-ext-enable redis

方法二:

docker-php-ext-install 擴展名稱

docker-php-ext-configure一般需要與docker-php-ext-install配合使用,當需要自定義擴展的時候需要使用

安裝php的gd庫時需要使用

apt-get update

apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev

docker-php-ext-install -j$(nproc) iconv mcrypt

docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/  如果報未識別參數就改成后面這條命令  docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/

docker-php-ext-install -j$(nproc) gd

安裝pdo擴展

docker-php-ext-install pdo pdo_mysql

安裝mysqli擴展

docker-php-ext-install mysqli

安裝exif擴展

docker-php-ext-install exif

安裝bc函數擴展

docker-php-ext-install bcmath

安裝zip擴展所需的依賴擴展

apt-get update && apt-get install -y zlib1g-dev && apt-get install -y libzip-dev

安裝並啟動zip擴展
docker-php-ext-install zip

最后重啟php和nginx

docker restart php

docker restart nginx

 

 


免責聲明!

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



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