前言
記錄一下docker部署web服務器流程。nginx,mysql,php不同的版本配置內(nèi)容可能會不同。
docker常用命令
一、創(chuàng)建掛載目錄
- 目錄結(jié)構(gòu)
└── data
├── docker
│ ├── mysql
| ├── conf
| ├── data
| └── logs
│ ├── php
| ├── conf.d
| └── php.ini(文件)
│ ├── nginx
| ├── conf.d
| └── cert
| ├── log
| └── nginx.conf(文件)
├── www
│ ├── project
| ├── index.php(文件)
│ ├── project02
- 創(chuàng)建目錄
#掛載 nginx 目錄
mkdir -p /data/docker/nginx/conf.d #nginx子配置文件目錄
mkdir -p /data/docker/nginx/log #nginx日志文件目錄
mkdir -p /data/docker/nginx/cert #nginxSSL文件目錄
mkdir -p /data/www/ #工作目錄
#掛載 php 目錄
mkdir -p /data/docker/php/conf.d #php-fpm配置文件目錄
#掛載 mysql 目錄
mkdir -p /data/docker/mysql/conf #mysql配置文件目錄
mkdir -p /data/docker/mysql/logs #mysql日志文件目錄
mkdir -p /data/docker/mysql/data #mysql數(shù)據(jù)文檔存儲目錄
二、拉取鏡像
#獲取 ngin x鏡像(未指定版本則安裝latest)
docker pull nginx
#獲取 mysql 鏡像
docker pull mysql:5.7
#獲取 php-fpm 鏡像
docker pull php:7.3-fpm
#查看鏡像
docker images
三.運行容器
- 運行PHP容器
#首先我們先簡單的將容器啟動,將容器內(nèi)的php.ini和擴展文件復制到宿主機中
#容器啟動會返回容器id,我們先假設容器id為:575be6407893 后面理解方便 ,后續(xù)使用中可以直接取容器前幾位字符使用
docker run -d --name php -p 9000:9000 php:7.3-fpm
# 查看正在運行的容器
docker ps 575b
#查看全部容器
docker ps -a
#進入容器內(nèi)
docker exec -it 575b bash
#進入php.ini配置目錄
cd /usr/local/etc/php
php容器內(nèi)容目錄結(jié)構(gòu)如下:
PHP5.4升級后,php.ini-dist不見了,出現(xiàn)了php.ini-developmen和php.ini-production。
php.ini-development 對應于 php.ini-dist,適合開發(fā)測試,如本地測試環(huán)境。
php.ini-production 對應于 php.ini-recommended 擁有較高的安全性設定,適合服務器上線運營當產(chǎn)品。
選擇用哪個,就把他備份一份,改名為php.ini。
#將容器內(nèi)conf.d和php.ini-production復制到宿主機內(nèi)
docker cp 575b:/usr/local/etc/php/conf.d /data/docker/php/
docker cp 575b:/usr/local/etc/php/php.ini-production /data/docker/php/php.ini
#配置文件已有,接下來我們將該容器刪除重新啟動新容器
docker rm -f 575b (刪除正在運行的容器)
#容器啟動
docker run --name php7.3 -p 9000:9000 \
-v /data/www:/var/www \
-v /data/docker/php/php.ini:/usr/local/etc/php/php.ini \
-v /data/docker/php/conf.d:/usr/local/etc/php/conf.d -d php:7.3-fpm
# 參數(shù)說明
# --name php7.3:容器名稱。
# -p 9000:9000: 端口進行映射,將本地 9000端口映射到容器內(nèi)部的 9000端口。
# -v 目錄映射: 主機和容器的目錄映射關系,":"前為主機目錄,之后為容器目錄 :ro 表示只讀
# -d php:7.3-fpm: 設置容器在在后臺一直運行,這個php:7.3-fpm是指定鏡像
- 運行Nginx容器
#復制nginx配置項 返回容器id:095a12add634
docker run -d -p 80:80 -p 443:443 --name nginx nginx
#進入容器內(nèi)
docker exec -it 095a12add634bash
#進入nginx.conf配置目錄
cd /etc/nginx/
nginx容器內(nèi)容目錄結(jié)構(gòu)如下:文章來源:http://www.zghlxwxcb.cn/news/detail-856789.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-856789.html
#將容器內(nèi)conf.d和nginx.conf復制到宿主機內(nèi)
docker cp 095a12add634:/etc/nginx/nginx.conf /data/docker/nginx/
docker cp 095a12add634:/etc/nginx/conf.d /data/docker/nginx/
#配置文件已有,接下來我們將該容器刪除重新啟動新容器
docker rm -f 095a12add634(刪除正在運行的容器)
#容器啟動
docker run -d -p 80:80 -p 443:443 \
-v /data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /data/docker/nginx/log:/var/log/nginx \
-v /data/docker/nginx/cert:/etc/nginx/cert \
-v /data/www:/var/www \
--link=php:php --name nginx nginx
# 參數(shù)說明
# --link=php:php 設置 nginx容器和php容器網(wǎng)絡互通,也可以使用網(wǎng)絡通訊創(chuàng)建網(wǎng)橋方式
# 映射文件目錄時盡量要使nginx和php映射目錄保持一致,我這里都映射了/var/www,不一致可能會報錯
- 運行Mysql容器
#運行命令生成my.cnf文件
tee /data/docker/mysql/conf/my.cnf <<-'EOF'
[mysql]
#設置mysql客戶端默認字符集
default-character-set=UTF8MB4
[mysqld]
#設置3306端口
port=3306
#允許最大連接數(shù)
max_connections=200
#允許連接失敗的次數(shù)
max_connect_errors=10
#默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
#服務端使用的字符集默認為8比特編碼的latin1字符集
character-set-server=UTF8MB4
#開啟查詢緩存
explicit_defaults_for_timestamp=true
#創(chuàng)建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
#等待超時時間秒
wait_timeout=60
#交互式連接超時時間秒
interactive-timeout=600
secure_file_priv=/var/lib/mysql
[client]
default-character-set=UTF8MB4
EOF
#運行容器
docker run --privileged -d -p 3306:3306 \
-v /data/docker/mysql/conf:/etc/mysql \
-v /data/docker/mysql/logs:/var/log/mysql \
-v /data/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root --name mysql3306 mysql:5.7
#參數(shù)說明
#--privileged 讓容器中的進程獲取到主機的完整權(quán)限,包括root權(quán)限
#-e MYSQL_ROOT_PASSWORD=root 配置mysqlroot密碼
四.運行項目
#nginx.conf 文件配置內(nèi)容
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
#切換目錄 cd /data/docker/nginx/conf.d 新建項目配置
server {
listen 80;
#listen [::]:80;
#For https
#listen 443 ssl;
#listen [::]:443 ssl ipv6only=on;
#ssl_certificate /etc/nginx/ssl/www.crt;
#ssl_certificate_key /etc/nginx/ssl/www.key;
server_name abc.com; #訪問域名
index index.php index.html index.htm default.html default.htm default.php;
root /var/www/project; #訪問項目目錄
location ~ \.php$ {
fastcgi_pass php:9000; # 這里的php指鏈接到php的容器名稱,即 --link=php:php
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#錯誤日志
access_log /var/log/nginx/project.access.log;
error_log /var/log/nginx/project.error.log;
}
#切換到項目目錄隨便輸出點內(nèi)容(內(nèi)容自己創(chuàng)建)
cd /data/docker/www/project
#重啟nginx容器
docker restart 容器id
到了這里,關于docker 部署 nginx+php+mysql 環(huán)境的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!