Docker 搭建 LNMP + Wordpress

网友投稿 289 2022-10-31

Docker 搭建 LNMP + Wordpress

一、项目模拟

1. 项目环境

公司在实际的生产环境中,需要使用 ​​Docker​​ 技术在一台主机上创建 LNMP 服务并运行 Wordpress 网站平台。然后对此服务进行相关的性能调优和管理工作。

所有安装包下载:

wget 或者wget -r -np 服务器环境

容器

操作系统

IP地址

主要软件

nginx

CentOS 7

172.111.0.10

Docker-Nginx

mysql

CentOS 7

172.111.0.20

Docker-Mysql

mysql

CentOS 7

172.111.0.30

Docker-php

3.任务需求

使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

二、Linux 系统基础镜像

[root@docker ~]# systemctl disable --now firewalld[root@docker ~]# setenforce 0setenforce: SELinux is disabled[root@docker ~]# docker pull centos:7#从公有仓库中下载 centos7 作为系统基础镜像[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos 7 eeb6ee3f44bd 4 weeks ago 204MB

三、Nginx

1. 建立工作目录

[root@docker ~]# mkdir /opt/nginx[root@docker ~]# cd /opt/nginx[root@docker nginx]# rz -Erz waiting to receive.#上传 nginx 安装包 nginx-1.12.0.tar.gz[root@docker nginx]# rz -Erz waiting to receive.#上传 wordpress 服务包 wordpress-4.9.4-zh_CN.tar.gz

2. 编写 Dockerfile 脚本

[root@docker nginx]# vim Dockerfile FROM centos:7MAINTAINER this is nginx image RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginxADD nginx-1.12.0.tar.gz /usr/local/src/WORKDIR /usr/local/src/nginx-1.12.0RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with--j 4 && make installENV PATH /usr/local/nginx/sbin:$PATHADD nginx.conf /usr/local/nginx/conf/ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/htmlRUN chmod 777 -R /usr/local/nginx/html/EXPOSE 80VOLUME [ "/usr/local/nginx/html/" ]CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

3. 准备 nginx.conf 配置文件

[root@docker nginx]# lsDockerfile nginx-1.12.0.tar.gz nginx.conf wordpress-4.9.4-zh_CN.tar.gz[root@docker nginx]# egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$"worker_processes 1;events { worker_connections 1024;}{ include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; charset utf-8; location / { root html; index index.html index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root html; fastcgi_pass 172.111.0.30:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; include fastcgi_params; } }}

4. 生成镜像

[root@docker nginx]# docker build -t nginx:lnmp .[root@docker nginx]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx lnmp 35a6404fcfa1 5 seconds ago 522MBcentos 7 eeb6ee3f44bd 4 weeks ago 204MB

5. 创建自定义网络

[root@docker nginx]# docker network create --subnet=172.111.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork0cbe1bd0bd782bf1c8e69916d99427970196de22deb312f970e01030406d9b45[root@docker nginx]# docker network lsNETWORK ID NAME DRIVER SCOPEdd7a55d01f86 bridge bridge local63ddf1e359e9 host host local0cbe1bd0bd78 mynetwork bridge locala4b66a8a6cd2 none null local[root@docker nginx]# ifconfig docker1docker1: flags=4099 mtu 1500 inet 172.111.0.1 netmask 255.255.0.0 broadcast 172.111.255.255 ether 02:42:40:dc:e8:1d txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

6. 启动镜像容器

[root@docker nginx]# docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.111.0.10 nginx:lnmp57616d4ea225c82a50b731472b003dabfd681e8dc6c6ef85a9bb2f665354334b[root@docker nginx]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES57616d4ea225 nginx:lnmp "/usr/local/nginx/sb…" 13 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx[root@docker nginx]# docker inspect nginx······ "IPv4Address": "172.111.0.10"······

7. 验证 nginx

[root@docker nginx]# curl html>Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.

For online documentation and support please refer toThank you for using nginx.

四、Mysql

1. 建立工作目录

[root@docker nginx]# mkdir /opt/mysql[root@docker nginx]# cd /opt/mysql/[root@docker mysql]# rz -Erz waiting to receive.#传入mysql安装包mysql-boost-5.7.20.tar.gz

2. 编写 Dockerfile

[root@docker mysql]# vim Dockerfile FROM centos:7MAINTAINER this is mysql image RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysqlADD mysql-boost-5.7.20.tar.gz /usr/local/src/WORKDIR /usr/local/src/mysql-5.7.20/RUN cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \-DSYSCONFDIR=/etc \-DSYSTEMD_PID_DIR=/usr/local/mysql \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DWITH_EXTRA_CHARSETS=all \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DMYSQL_DATADIR=/usr/local/mysql/data \-DWITH_BOOST=boost \-DWITH_SYSTEMD=1;make -j4;make installADD my.cnf /etc/my.cnfEXPOSE 3306RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnfWORKDIR /usr/local/mysql/bin/RUN ./mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqldENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATHVOLUME [ "/usr/local/mysql" ]CMD ["/usr/sbin/init"]

3. 准备 my.cnf 文件

[root@docker mysql]# vim my.cnf [client]port = 3306socket=/usr/local/mysql/mysql.sock [mysqld]user = mysqlbasedir=/usr/local/mysqldatadir=/usr/local/mysql/dataport = 3306character-set-server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket=/usr/local/mysql/mysql.sockbind-address = 0.0.0.0skip-name-resolvemax_connections=2048default-storage-engine=INNODBmax_allowed_packet=16Mserver-id = 1 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

4. 生成镜像

[root@docker mysql]# docker build -t mysql:lnmp .[root@docker mysql]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql lnmp 49da8f7299af 3 minutes ago 9.98GBnginx lnmp 35a6404fcfa1 17 minutes ago 522MBcentos 7 eeb6ee3f44bd 4 weeks ago 204MB

5. 启动镜像容器

[root@docker mysql]# docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.111.0.20 mysql:lnmpebafbdc1c4dcfc49406a7db8ee5a2afc54f5b4203d11ad374dba885ec4ef5afd[root@docker mysql]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESebafbdc1c4dc mysql:lnmp "/usr/sbin/init" 11 seconds ago Up 10 seconds 3306/tcp mysql57616d4ea225 nginx:lnmp "/usr/local/nginx/sb…" 17 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

6. 验证 mysql

[root@docker mysql]# docker exec -it mysql bash[root@ebafbdc1c4dc bin]# systemctl status mysqld● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: activating (start) since Sun 2022-07-20 01:05:59 UTC; 42s ago······

五、Php

1. 建立工作目录

[root@docker mysql]# mkdir ../php[root@docker mysql]# cd ../php/[root@docker php]# rz -Erz waiting to receive.#传入php安装包php-7.1.10.tar.bz2

2. 编写 Dockerfile 脚本

[root@docker php]# vim Dockerfile FROM centos:7MAINTAINER this is php image RUN yum install -y gd \libjpeg libjpeg-devel \libpng libpng-devel \freetype freetype-devel \libxml2 libxml2-devel \zlib zlib-devel \curl curl-devel \openssl openssl-devel \gcc gcc-c++ make pcre-devel;useradd -M -s /sbin/nologin nginxADD php-7.1.10.tar.bz2 /usr/local/src/WORKDIR /usr/local/src/php-7.1.10RUN ./configure \--prefix=/usr/local/php \--with-mysql-sock=/usr/local/mysql/mysql.sock \--with-mysqli \--with-zlib \--with-curl \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-openssl \--enable-fpm \--enable-mbstring \--enable-xml \--enable-session \--enable-ftp \--enable-pdo \--enable-tokenizer \--enable-zip ; make -j 4 ; make installENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATHADD php.ini /usr/local/php/lib/ADD php-fpm.conf /usr/local/php/etc/ADD conf /usr/local/php/etc/php-fpm.d/EXPOSE 9000CMD /usr/local/php/sbin/php-fpm -F

3. 准备 php.ini、php-fpm.conf、conf 配置文件

3.1 php.ini

该配置文件模板位于安装目录的 php-7.1.10/php.ini-development 位置

[root@docker php]# vim php.ini #939行,取消注释,修改date.timezone = Asia/Shanghai#1170行,修改mysqli.default_socket = /usr/local/mysql/mysql.sock[root@docker php]# egrep -v "^;" php.ini | egrep -v "^$"[PHP]engine = Onshort_open_tag = Offprecision = 14output_buffering = 4096zlib.output_compression = Offimplicit_flush = Offunserialize_callback_func =serialize_precision = -1disable_functions =disable_classes =zend.enable_gc = Onexpose_php = Onmax_execution_time = 30max_input_time = 60memory_limit = 128Merror_reporting = E_ALLdisplay_errors = Ondisplay_startup_errors = Onlog_errors = Onlog_errors_max_len = 1024ignore_repeated_errors = Offignore_repeated_source = Offreport_memleaks = Ontrack_errors = Onhtml_errors = Onvariables_order = "GPCS"request_order = "GP"register_argc_argv = Offauto_globals_jit = Onpost_max_size = 8Mauto_prepend_file =auto_append_file =default_mimetype = "text/html"default_charset = "UTF-8"doc_root =user_dir =enable_dl = Offfile_uploads = Onupload_max_filesize = 2Mmax_file_uploads = 20allow_url_fopen = Onallow_url_include = Offdefault_socket_timeout = 60[CLI Server]cli_server.color = On[Date]date.timezone = Asia/Shanghai[filter][iconv][intl][sqlite3][Pcre][Pdo][Pdo_mysql]pdo_mysql.cache_size = 2000pdo_mysql.default_socket=[Phar][mail function]SMTP = localhostsmtp_port = 25mail.add_x_header = On[SQL]sql.safe_mode = Off[ODBC]odbc.allow_persistent = Onodbc.check_persistent = Onodbc.max_persistent = -1odbc.max_links = -1odbc.defaultlrl = 4096odbc.defaultbinmode = 1[Interbase]ibase.allow_persistent = 1ibase.max_persistent = -1ibase.max_links = -1ibase.timestampformat = "%Y-%m-%d %H:%M:%S"ibase.dateformat = "%Y-%m-%d"ibase.timeformat = "%H:%M:%S"[MySQLi]mysqli.max_persistent = -1mysqli.allow_persistent = Onmysqli.max_links = -1mysqli.cache_size = 2000mysqli.default_port = 3306mysqli.default_socket = /usr/local/mysql/mysql.sockmysqli.default_host =mysqli.default_user =mysqli.default_pw =mysqli.reconnect = Off[mysqlnd]mysqlnd.collect_statistics = Onmysqlnd.collect_memory_statistics = On[OCI8][PostgreSQL]pgsql.allow_persistent = Onpgsql.auto_reset_persistent = Offpgsql.max_persistent = -1pgsql.max_links = -1pgsql.ignore_notice = 0pgsql.log_notice = 0[bcmath]bcmath.scale = 0[browscap][Session]session.save_handler = filessession.use_strict_mode = 0session.use_cookies = 1session.use_only_cookies = 1session.name = PHPSESSIDsession.auto_start = 0session.cookie_lifetime = 0session.cookie_path = /session.cookie_domain =session.cookie_=session.serialize_handler = phpsession.gc_probability = 1session.gc_divisor = 1000session.gc_maxlifetime = 1440session.referer_check =session.cache_limiter = nocachesession.cache_expire = 180session.use_trans_sid = 0session.sid_length = 26session.trans_sid_tags = "a=href,area=href,frame=src,form="session.sid_bits_per_character = 5[Assertion]zend.assertions = 1[COM][mbstring][gd][exif][Tidy]tidy.clean_output = Off[soap]soap.wsdl_cache_enabled=1soap.wsdl_cache_dir="/tmp"soap.wsdl_cache_ttl=86400soap.wsdl_cache_limit = 5[sysvshm][ldap]ldap.max_links = -1[mcrypt][dba][opcache][curl][openssl]

3.2 php-fpm.conf

该配置文件位于 /usr/local/php/etc/php-fpm.conf.default

[root@docker php]# vim php-fpm.conf #17行,删除注释符号“;”pid = run/php-fpm.pid[root@docker php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"[global]pid = run/php-fpm.pidinclude=/usr/local/php/etc/php-fpm.d/*.conf

3.3 conf

该配置文件位于 usr/local/php/etc/php-fpm.d/conf.default

[root@docker php]# vim conf #23、24行,修改用户和组user = nginxgroup = nginx#36行,修改监听IP和端口为容器IP:9000端口listen = 172.111.0.30:9000[root@docker php]# egrep -v "^;" conf | egrep -v "^$"[= nginxgroup = nginxlisten = 172.111.0.30:9000pm = dynamicpm.max_children = 5pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3

4. 生成镜像

[root@docker php]# docker build -t php:lnmp .[root@docker php]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEphp lnmp 985842f961f1 About a minute ago 1.2GBmysql lnmp 49da8f7299af 12 minutes ago 9.98GBnginx lnmp 35a6404fcfa1 26 minutes ago 522MBcentos 7 eeb6ee3f44bd 4 weeks ago 204MB

5. 启动镜像容器

[root@docker php]# docker run -itd --name php --net mynetwork --ip 172.111.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp954d8ecdd6c7d47270fe15ce4ad6db9c4a5396f42f9d111315ecee69358a9566[root@docker php]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES954d8ecdd6c7 php:lnmp "/bin/sh -c '/usr/lo…" 15 seconds ago Up 14 seconds 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp phpebafbdc1c4dc mysql:lnmp "/usr/sbin/init" 8 minutes ago Up 8 minutes 3306/tcp mysql57616d4ea225 nginx:lnmp "/usr/local/nginx/sb…" 26 minutes ago Up 26 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

6. 验证 php

[root@docker php]# docker exec -it php bash[root@954d8ecdd6c7 php-7.1.10]# ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 113028 9536 pts/0 Ss+ 06:00 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)nginx 7 0.0 0.0 113028 5780 pts/0 S+ 06:00 0:00 php-fpm: pool 8 0.0 0.0 113028 5784 pts/0 S+ 06:00 0:00 php-fpm: pool 9 0.2 0.0 11828 1888 pts/1 Ss 06:01 0:00 bashroot 23 0.0 0.0 51732 1728 pts/1 R+ 06:01 0:00 ps -aux

六、启动 wordpress 服务

1. mysql 授权

进入 mysql 容器

[root@ebafbdc1c4dc bin]# mysql -u root -pEnter password: #初始密码为空mysql> create database wordpress;Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)

2.浏览器访问测试

访问 http://192.168.223.30/wordpress/index.php

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 数据结构哈希算法之哈希桶方式解决哈希冲突
下一篇:运动控制器之ZMC420SCAN的硬件接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~