1. 新建目錄
<code>mkdir -p /makeit/docker/nginx/conf.d \\
/makeit/logs/nginx \\
/makeit/web/homea \\
/home/src/<code>
2. 獲取鏡像
<code>docker pull php:7.3.7-fpm
docker pull nginx
docker pull mysql
docker pull redis/<code>
3. 下載應用
注:下載相關應用,解壓至 /home/src(可用於默認配置文件的獲取,有配置文件的可略過)
解壓相應文件,獲取默認配置 nginx.conf / php.ini 等
<code>wget http://nginx.org/download/nginx-1.14.0.tar.gz
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip
wget http://101.96.10.64/jp2.php.net/distributions/php-7.3.0.tar.gz
# 複製文件
tar zxvf phpMyAdmin-4.8.2-all-languages.zip \\
tar zxvf php-7.2.8.tar.gz \\
tar zxvf nginx-1.14.0.tar.gz
cp /home/src/php-7.2.8/php.ini-production /home/docker/php/php.ini/<code>
4. 運行鏡像
4.1. MySQL
<code># 創建文件夾
mkdir -p /makeit/docker/mysql/data
cd /makeit/docker/mysql
# 5.5.61 版本
docker run -p 3306:3306 --name mysql \\
-v /makeit/docker/mysql/conf:/etc/mysql/conf.d \\
-v /makeit/docker/mysql/data:/etc/mysql/data \\
-v /makeit/logs/mysql:/var/log/mysql \\
-e MYSQL_ROOT_PASSWORD="123456" \\
--restart=always -d mysql:5.5.61
# 8.0.18 版本
# 啟動一個臨時 MySQL
docker run \\
-p 3306:3306 \\
--name mysql \\
-e MYSQL_ROOT_PASSWORD=123456 \\
--restart=always \\
-d mysql
# 創建文件夾並複製容器文件
cd /makeit/docker/mysql
mkdir plugin private
docker cp mysql:/usr/lib/mysql/plugin /makeit/docker/mysql
docker cp mysql:/usr/lib/mysql/private /makeit/docker/mysql
docker cp mysql:/etc/mysql/ /makeit/docker/mysql/conf
# 刪除臨時容器後, 重新啟動
# 密碼可以簡單些, 成功後進入容器修改密碼
docker stop mysql
docker rm mysql
docker run \\
-p 3306:3306 \\
--name mysql \\
-v /miit/docker/mysql/plugin:/usr/lib/mysql/plugin \\
-v /miit/docker/mysql/private:/usr/lib/mysql/private \\
-v /miit/docker/mysql/conf:/etc/mysql \\
-v /miit/docker/mysql/data:/var/lib/mysql \\
-e MYSQL_ROOT_PASSWORD=123456 \\
--restart=always \\
-d mysql
# 查看用戶
mysql> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
# 修改密碼
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678';
Query OK, 0 rows affected (0.01 sec)
# 遠程登錄的帳戶密碼也需要修正
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
Query OK, 0 rows affected (0.01 sec)/<code>
4.2. PHP
<code># 啟動一臨時 php, 查看 php 配置文件及其擴展目錄
docker run --name php -p 9000:9000 \\
-d --restart=always php:7.3.7-fpm
# 進入容器查看信息
# 注意 Configuration File (php.ini) Path 及 extension_dir 兩個屬性值
docker exec -it php /bin/bash
php -r 'phpinfo();'
# 知道目錄後將內容複製到宿主機下(放置在 /makeit/docker/php 下,666f8de6d689 為容器 ID)
docker cp 666f8de6d689:/usr/local/lib/php/extensions/no-debug-non-zts-20180731/ /makeit/docker/php/ext
docker cp 666f8de6d689:/usr/local/etc/php/php.ini /makeit/docker/php/php.ini
# 刪除臨時後再重新啟動
# www 目錄需要與 nginx 保持一致
docker stop php
docker rm php
docker run --name php -p 9000:9000 \\
-v /makeit/web:/www:rw \\
-v /makeit/logs/php:/var/log/php \\
-v /makeit/docker/php/ext:/usr/local/lib/php/extensions/no-debug-non-zts-20180731 \\
-v /makeit/docker/php/php.ini:/usr/local/etc/php/php.ini \\
-d --restart=always --link mysql:mysql php:7.3.7-fpm
# 運行成功後,進入容器,可用 `docker-php-ext-install` 命令來安裝擴展;如 `docker-php-ext-install pdo_mysql`/<code>
4.3. Nginx
4.3.1 新建配置
<code># fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# nginx.conf
# user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
daemon off;
events {
\tworker_connections 1024;
}
http {
\tinclude /etc/nginx/mime.types;
\tdefault_type application/octet-stream;
\tlog_format main '$remote_addr - $remote_user [$time_local] "$request" '
\t'$status $body_bytes_sent "$http_referer" '
\t'"$http_user_agent" "$http_x_forwarded_for"';
\taccess_log /var/log/nginx/access.log main;
\tsendfile on;
\t# tcp_nopush on;
\tkeepalive_timeout 65;
\tautoindex on;
\t
\t# gzip on;
\tinclude /etc/nginx/conf.d/*.conf;
\tclient_max_body_size 100M;
\tclient_header_buffer_size 128k;
\tlarge_client_header_buffers 4 128k;
}
# default.conf
server {
listen\t80;
listen\t443 ssl;
server_name\twildidea.cn www.wildidea.cn;
root /www/makeit;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
ssl_certificate cert/www.pem;
ssl_certificate_key cert/www.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_tickets on;
ssl_dhparam ssl/private/dhparam.pem;
location / {
index index.html index.htm index.php index.jsp;
}
error_page 500 502 503 504 /50x.html;
location /50x.html {
root /www;
}
location ~ /\\. {
return 403;
}
location ~* ^.+\\.(jpg|jpeg|gif|png|bmp|css|js|swf)$ {
access_log off;
}
location ~ \\.php$ {
root /www/makeit;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\\.ht {
deny all;
}
}/<code>
4.3.2. 運行容器
<code>docker run -it \\
--name nginx \\
-d -p 80:80 -p 443:443 --restart=always \\
-v /makeit/web:/www \\
-v /makeit/logs/nginx:/var/log/nginx \\
-v /makeit/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \\
-v /makeit/docker/nginx/conf.d:/etc/nginx/conf.d \\
-v /makeit/docker/nginx/ssl:/etc/nginx/ssl \\
-v /makeit/docker/nginx/letsencrypt:/etc/nginx/letsencrypt \\
--link php:php nginx/<code>
4.3.3. 命令說明
<code>-p 80:80:將容器的80端口映射到主機的80端口
--name nginx:將容器命名為 nginx
-v /wildidea/web:/www:將宿主機中的目錄 web 掛載到容器的 www 目錄下,以下同理
--link php:關聯 php/<code>
注意 `nginx` 配置文件的路徑,所有路徑皆為 docker 容器路徑,非宿主機的本地路徑 ;
`nginx` 配置中的 fastcgi_pass,監聽的是 php-fpm ;
閱讀更多 MIITVIP前端成長之路 的文章