日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

如何用Docker搭建Nginx+PHP+MySQL环境并部署WordPress

發布時間:2023/12/19 综合教程 19 生活家
生活随笔 收集整理的這篇文章主要介紹了 如何用Docker搭建Nginx+PHP+MySQL环境并部署WordPress 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天小編給大家分享一下如何用Docker搭建Nginx+PHP+MySQL環境并部署WordPress的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

準備工作

使用阿里云kelude

到 創建一個項目,如dockerfile。之后我們把wordpress環境的所有相關dockerfile及配置文件放置到centosbz目錄。

使用阿里云鏡像倉庫

阿里云docker鏡像倉庫地址為 ,用來存放docker鏡像,可以在本地push鏡像上去,也可以從kelude拉取dockerfile自動構建鏡像。我們先登錄,然后新建一個namespace,如centos-bz,之后所有的nginx,php,mysql鏡像將存放在這個namespace下。

安裝docker-compose

需要在運行docker容器的主機上安裝docker-compose,可以參照官方文檔手動安裝,也可以使用ezhttp的一鍵安裝工具(推薦)安裝。如:

wgetcentos.bz/ezhttp.zip
unzipezhttp.zip
cdezhttp-master
./start.sh

之后會彈出一個菜單,輸入2選擇some useful tools,然后輸入18選擇安裝docker和compose。

編寫dockerfile

clone以上在阿里云kelude創建的dockerfile鏡像到本地,在此項目中創建centos.bz,然后在centos.bz目錄分別創建mysql,nginx,php目錄,用于存放它們各自dockerfile及配置文件。

這里我們還約定以下目錄:

/home/docker/nginx/logs/centos.bz:存放www.centos.bz網站的日志

/home/docker/nginx/www/centos.bz: 存放www.centos.bz網站的文件

/home/docker/php: 存放php-fpm的日志

/home/docker/mysql:mysql data目錄

nginx dockerfile

在nginx目錄創建dockerfile文件,寫入如下內容:

#從debian:jessie鏡像基礎上安裝nginx
fromdebian:jessie

#聲明此dockerfile維護者的郵箱,有什么問題可以發到此郵件尋問
labelmaintainer"admin@centos.bz"

#定義軟件版本及編譯工具變量
envnginx_version1.10.3
envopenssl_version1.0.2h
envzlib_version1.2.11
envpcre_version8.40
envconcat_version1.2.2
envbuild_toolswgetgccmakeg++
envsrc_dir/opt/nginx

#切換到工作目錄
workdir${src_dir}

#開始編譯nginx,我們這里使用編譯安裝nginx而不是使用官方提供的nginx鏡像是因為這里使用到了第三方的concat模塊,只能編譯了。
#把所有的安裝命令都寫在一個run指令中是因為這樣可以減小鏡像層數,縮減鏡像大小。推薦使用反斜杠和&&把所有的安裝命令放置到一行中。
runapt-getupdate\
&&apt-get-y--no-install-recommendsinstallca-certificates${build_tools}\
&&wgethttp://nginx.org/download/nginx-${nginx_version}.tar.gz\
&&wgethttps://www.openssl.org/source/openssl-${openssl_version}.tar.gz\
&&wgethttp://www.zlib.net/zlib-${zlib_version}.tar.gz\
&&wgethttps://ftp.pcre.org/pub/pcre/pcre-${pcre_version}.tar.gz\
&&wgethttps://github.com/alibaba/nginx-http-concat/archive/${concat_version}.tar.gz-onginx-http-concat-${concat_version}.tar.gz\
&&tarxfnginx-${nginx_version}.tar.gz\
&&tarxfopenssl-${openssl_version}.tar.gz\
&&tarxfzlib-${zlib_version}.tar.gz\
&&tarxfpcre-${pcre_version}.tar.gz\
&&tarxfnginx-http-concat-${concat_version}.tar.gz\
&&cdnginx-${nginx_version}\
&&./configure--prefix=/usr/local/nginx--with-pcre=../pcre-${pcre_version}\
--with-zlib=../zlib-${zlib_version}\
--with-http_ssl_module\
--with-openssl=../openssl-${openssl_version}\
--add-module=../nginx-http-concat-${concat_version}\
&&make-j$(nproc)\
&&makeinstall\
&&rm-rf${src_dir}\
&&apt-getpurge-y--auto-remove${build_tools}\
&&rm-rf/var/lib/apt/lists/*

#把構建上下文目錄conf,即dockerfile/centos.bz/nginx/conf目錄下的文件復制到容器的/usr/local/nginx/conf目錄。
copyconf//usr/local/nginx/conf/

#定義啟動容器時運行的命令
entrypoint["/usr/local/nginx/sbin/nginx"]

expose80443

對于conf目錄下的nginx配置文件,需要把日志,網站目錄更改為以下約定的目錄位置。

php-fpm dockerfile

創建dockerfile/centos.bz/php-fpm目錄,在此目錄下創建dockerfile文件,內容如下:

fromdebian:jessie
labelmaintainer"admin@centos.bz"

#定義軟件版本,編譯工具,依賴等變量
envphp_version5.6.30
envbuild_toolsm4\
autoconf\
autoconf2.13\
openssl\
wget\
gcc\
make

envbuild_depslibcurl4-gnutls-dev\
libxml2-dev\
zlib1g-dev\
libpcre3-dev\
libjpeg-dev\
libpng12-dev\
libfreetype6-dev\
libmhash-dev\
libmcrypt-dev\
libssl-dev\
libtool

envphp_location/usr/local/php
envbuild_arg--prefix=${php_location}\
--with-config-file-path=${php_location}/etc\
--enable-fpm\
--enable-bcmath\
--with-pdo_sqlite\
--with-gettext\
--with-iconv\
--enable-ftp\
--with-sqlite3\
--enable-mbstring\
--enable-sockets\
--enable-zip\
--enable-soap\
--with-openssl\
--with-zlib\
--with-curl\
--with-gd\
--with-jpeg-dir\
--with-png-dir\
--with-freetype-dir\
--with-mcrypt\
--with-mhash\
--with-mysql=mysqlnd\
--with-mysqli=mysqlnd\
--with-pdo-mysql=mysqlnd\
--without-pear\
--with-libdir=lib64\
--enable-opcache\
--disable-cgi

envsrc_dir/opt/php

workdir${src_dir}

#開始編譯安裝php
runapt-getupdate\
&&apt-get-y--no-install-recommendsinstall${build_deps}${build_tools}\
&&wgethttp://php.net/distributions/php-${php_version}.tar.gz\
&&tarxfphp-${php_version}.tar.gz\
&&cdphp-${php_version}\
&&ln-s/usr/lib/x86_64-linux-gnu/libssl.so/usr/lib/libssl.so\
&&ln-s/usr/lib/usr/lib64\
&&./configure${build_arg}\
&&make-j$(nproc)\
&&makeinstall\
&&cpphp.ini-production${php_location}/etc/php.ini\
&&cp${php_location}/etc/php-fpm.conf.default${php_location}/etc/php-fpm.conf\
&&rm-rf${src_dir}\
&&apt-getpurge-y--auto-remove${build_tools}\
&&rm-rf/var/lib/apt/lists/*


workdir${php_location}/etc/

#配置php-fpm,即使用sed工具編輯php-fpm.conf和php.ini文件,這里的php-fpm相關配置命令不與上面的編譯命令合在一起來減小層數是因為
#配置文件可能會改動比較多,這樣分開當配置文件更改時可以直接使用緩存跳過編譯步驟,加快構建速度。
runset_php_variable(){\
localkey=$1;\
localvalue=$2;\
ifgrep-q-e"^$key\s*="php.ini;then\
sed-i-r"s#^$key\s*=.*#$key=$value#"php.ini;\
else\
sed-i-r"s#;\s*$key\s*=.*#$key=$value#"php.ini;\
fi;\
if!grep-q-e"^$key\s*="php.ini;then\
echo"$key=$value">>php.ini;\
fi;\
}\
&&base_dir=/home/docker/php\
&&set_php_variabledisable_functions"dl,eval,assert,exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open"\
&&set_php_variableexpose_phpoff\
&&set_php_variableerror_log${base_dir}/php_errors.log\
&&set_php_variablerequest_order"cgp"\
&&set_php_variablecgi.fix_pathinfo0\
&&set_php_variableshort_open_tagon\
&&set_php_variabledate.timezoneasia/chongqing\
&&sed-i's/^user=.*/user=www-data/'php-fpm.conf\
&&sed-i's/^group=.*/group=www-data/'php-fpm.conf\
&&sed-i"s#;slowlog=log/\$pool.log.slow#slowlog=${base_dir}/\$pool.log.slow#"php-fpm.conf\
&&sed-i's/;request_slowlog_timeout=0/request_slowlog_timeout=5/'php-fpm.conf\
&&sed-i's/^pm.max_children.*/pm.max_children=20/'php-fpm.conf\
&&sed-i's/^pm.start_servers.*/pm.start_servers=5/'php-fpm.conf\
&&sed-i's/^pm.min_spare_servers.*/pm.min_spare_servers=3/'php-fpm.conf\
&&sed-i's/^pm.max_spare_servers.*/pm.max_spare_servers=8/'php-fpm.conf\
&&sed-i'/\[global\]/a\daemonize=no'php-fpm.conf\
&&sed-i's/^listen.*/listen=0.0.0.0:9000/'php-fpm.conf\
&&echo"[opcache]\n\
zend_extension=opcache.so\n\
opcache.memory_consumption=128\n\
opcache.interned_strings_buffer=8\n\
opcache.max_accelerated_files=4000\n\
opcache.revalidate_freq=60\n\
opcache.fast_shutdown=1\n">>php.ini

entrypoint["/usr/local/php/sbin/php-fpm"]

expose9000

mysql dockerfile

創建dockerfile/centos.bz/mysql/dockerfile文件,內容如下:

frommysql:5.6
labelmaintainer"admin@centos.bz"
copymy.cnf/etc/mysql/my.cnf

這個dockerfile非常簡單,直接使用了官方的mysql鏡像,唯一區別是我們使用自己定義的my.cnf配置文件。

對于my.cnf配置文件,需要把日志,data目錄指向/home/docker/mysql,一個my.cnf示例文件如下:

#generatedbyezhttpat2016-02-0301:05:29

[mysql]

#client#
port=3306
socket=/home/docker/mysql/mysql.sock

[mysqld]

#general#
port=3306
user=mysql
default-storage-engine=innodb
socket=/home/docker/mysql/mysql.sock
pid-file=/home/docker/mysql/mysql.pid
skip-name-resolve

#myisam#
key-buffer-size=32m

#innodb#
#innodb-flush-method=o_direct
innodb-log-files-in-group=2
innodb-log-file-size=64m
innodb-flush-log-at-trx-commit=2
innodb-file-per-table=1
innodb-buffer-pool-size=1g

#cachesandlimits#
tmp-table-size=32m
max-heap-table-size=32m
query-cache-type=0
query-cache-size=0
max-connections=300
thread-cache-size=50
open-files-limit=1024
table-definition-cache=100
table-open-cache=400


#safety#
max-allowed-packet=16m
max-connect-errors=1000000

#datastorage#
datadir=/home/docker/mysql

#logging#
log-error=/home/docker/mysql/mysql-error.log
log-queries-not-using-indexes=1
slow-query-log=1
slow-query-log-file=/home/docker/mysql/mysql-slow.log

#binarylogging#
log-bin=/home/docker/mysql/mysql-bin
server-id=1
expire-logs-days=14
sync-binlog=1

構建鏡像

把上一步創建的文件推送到阿里云的kelude。然后我們登錄阿里云的docker鏡像倉庫cr.console.aliyun.com。這里以設置自動構建nginx鏡像為例,php和mysql鏡像構建設置類似。

1.點擊左側“鏡像列表”,在右側點擊倉庫鏡像,如圖:

2.在倉庫鏡像創建對話框中,說明如下:

地域:選擇離部署docker主機最近的位置,國內的話選擇華東1或華東2。

namespace和倉庫名稱:這里選擇centos-bz,nginx。

設置代碼源:我們這里選擇阿里云code。

構建設置:勾選代碼變更時自動構建鏡像,海外機器構建(因為國內主機apt-get安裝軟件時較慢),dockerfile路徑填/centos.bz/nginx

完成后點擊創建倉庫按鈕。

如圖:

3.回到鏡像列表,找到nginx鏡像,點擊管理。

4.左側點擊“構建”,右側點擊“立即構建”開始首次構建,之后我們更改dockerfile及配置文件到kelude之后就會自動構建了。

5.查看日志,查看構建進程。

然后繼續完成php,mysql的鏡像構建設置。

啟動環境

為了方便統一管理nginx,php,mysql的啟動,我們使用docker-compose工具。我們只需要編寫一個docker-compose.yml文件,然后使用docker-compose工具就可以快速啟動docker容器了。之后把docker-compose.yml傳輸到任意一臺支持docker環境的主機中就可以快速配置wordpress的運行環境。

docker-compose.yml

把docker-compose.yml文件放置在/home/docker目錄下。

version:'3'
#定義三個服務nginx,php,mysql
services:
nginx:
#依賴php服務,意味著在啟動nginx之前先啟動php
depends_on:
-php
#nginx鏡像的路徑
image:registry.cn-hangzhou.aliyuncs.com/centos-bz/nginx
#容器的/home/docker/nginx目錄掛載主機中的/home/docker/nginx目錄,
#這樣使nginx容器把網站文件和目錄存放到主機目錄中,持久化和方便管理
volumes:
-/home/docker/nginx:/home/docker/nginx
#nginx意外退出時自動重啟
restart:always

#映射80和443端口
ports:
-"80:80"
-"443:443"

#容器名稱
container_name:nginx
php:
depends_on:
-mysql
image:registry.cn-hangzhou.aliyuncs.com/centos-bz/php-fpm
restart:always
volumes:
-/home/docker/nginx/www:/home/docker/nginx/www
-/home/docker/php:/home/docker/php
container_name:php

mysql:
image:registry.cn-hangzhou.aliyuncs.com/centos-bz/mysql
volumes:
-/home/docker/mysql:/home/docker/mysql
restart:always
#設置mysql_root_password環境變量,這里是設置mysql的root密碼。這里為root。
environment:
mysql_root_password:root
container_name:mysql

啟動環境

在/home/docker目錄執行:

docker-composeup

查看nginx,php,mysql是否正常啟動,如果正常,ctrl-c停止,再執行:

docker-composeup-d

這里compose命令就在后臺啟動了。

執行docker ps查看容器運行狀態。

連接問題

容器之間可以通過容器名稱來連接,如nginx配置文件中連接php的代碼fastcgi_pass php:9000,網站數據庫配置文件使用mysql:3306。

日常運維

遷移

比如a主機遷移到b主機。只需要三步。

1.打包a主機的/home/docker目錄,傳輸到b主機相同位置

2.配置b主機docker環境

3.在b主機的/home/docker目錄下執行docker-compose up -d

導出導入數據庫

把centos.sql.gz數據庫文件導入到centos數據庫:

gunzip<centos.sql.gz|dockerexec-imysqlmysql-uroot-prootcentos

把centos數據庫導出到centos.sql.gz

dockerexec-imysqlmysqldump-uroot-prootcentos|gzip>centos.sql.gz

備份

推薦使用ezhttp一鍵備份設置:

wgetcentos.bz/ezhttp.zip
unzipezhttp.zip
cdezhttp-master
./start.sh

之后會彈出一個菜單,輸入2選擇some useful tools,然后輸入14選擇備份設置。需要注意的是在設置mysql使用mysqldump備份時,在提示輸入mysql bin directory時,輸入docker exec /usr/bin/。

總結

以上是生活随笔為你收集整理的如何用Docker搭建Nginx+PHP+MySQL环境并部署WordPress的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。