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