1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress

使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress

时间:2018-12-12 23:10:22

相关推荐

使用Docker容器来搭建LNMP(Nginx+Mysql+php)+Wordpress

目录

一、项目模拟1. 项目环境2. 服务器环境3. 任务需求二、【Linux】 系统基础镜像三、Nginx1. 建立工作目录2. 编写 Dockerfile 脚本3. 准备 nginx.conf 配置文件4. 生成镜像5. 创建自定义网络6. 启动镜像容器7. 验证 nginx三、Mysql1. 建立工作目录2. 编写 Dockerfile3. 准备 f 文件4. 生成镜像5. 启动镜像容器6. 验证 mysql四、Php1. 建立工作目录2. 编写 Dockerfile 脚本3. 准备 php.ini、php-fpm.conf、www.conf 配置文件3.1 php.ini3.2 php-fpm.conf3.3 www.conf4. 生成镜像5. 启动镜像容器6. 验证 php五、启动 wordpress 服务1. mysql 授权2. 浏览器访问测试六、备份镜像至本地

一、项目模拟

1. 项目环境

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

所有安装包下载:

wget http://101.34.22.188/lnmp_wordpress/mysql-boost-5.7.20.tar.gzwget http://101.34.22.188/lnmp_wordpress/nginx-1.12.0.tar.gzwget http://101.34.22.188/lnmp_wordpress/php-7.1.10.tar.bz2wget http://101.34.22.188/lnmp_wordpress/wordpress-4.9.4-zh_CN.tar.gz> 或者wget -r -np http://101.34.22.188/lnmp_wordpress/123456

2. 服务器环境

3. 任务需求

(1)使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台。

(2)限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap。

(3)限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s。

(4)将所有容器进行快照,然后将 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 204MB12345678

三、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.gz12345678

2. 编写 Dockerfile 脚本

[root@docker nginx]# vim DockerfileFROM centos:7MAINTAINER this is nginx image <lnmp>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-http_stub_status_module;make -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;" ]12345678910111213141516171819

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;}http {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;}}}12345678910111213141516171819222324252627282930313233

4. 生成镜像

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

5. 创建自定义网络

[root@docker nginx]# docker network create --subnet=172.111.0.0/16 --opt "work.bridge.name"="docker1" mynetwork0cbe1bd0bd782bf1c8e69916d99427970196de22deb312f970e01030406d9b45[root@docker nginx]# docker network lsNETWORK IDNAME DRIVER SCOPEdd7a55d01f86 bridgebridge local63ddf1e359e9 host hostlocal0cbe1bd0bd78 mynetwork bridge locala4b66a8a6cd2 none nulllocal[root@docker nginx]# ifconfig docker1docker1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.111.0.1 netmask 255.255.0.0 broadcast 172.111.255.255ether 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 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 012345678910111213141516

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 CREATEDSTATUSPORTS 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"······123456789

7. 验证 nginx

[root@docker nginx]# curl http://192.168.122.10:80<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="/"></a>.<br/>Commercial support is available at<a href="/"></a>.</p><p><em>Thank you for using nginx.</em></p></body></html>123456789101112131415161718192223242526

三、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.gz12345

2. 编写 Dockerfile

[root@docker mysql]# vim Dockerfile FROM centos:7MAINTAINER this is mysql image <lnmp>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 -j 4;make installADD f /etc/fEXPOSE 3306RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/fWORKDIR /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"]1234567891011121314151617181922232425262728293031323334

3. 准备 f 文件

[root@docker mysql]# vim f[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 = 1sql_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_QUOTES1234567891011121314151617181922

4. 生成镜像

[root@docker mysql]# docker build -t mysql:lnmp .[root@docker mysql]# docker imagesREPOSITORY TAG IMAGE ID CREATEDSIZEmysql lnmp49da8f7299af 3 minutes ago 9.98GBnginx lnmp35a6404fcfa1 17 minutes ago 522MBcentos 7 eeb6ee3f44bd 4 weeks ago204MB123456

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 CREATEDSTATUSPORTS 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 nginx123456

6. 验证 mysql

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

四、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.bz212345

2. 编写 Dockerfile 脚本

[root@docker php]# vim Dockerfile FROM centos:7MAINTAINER this is php image <lnmp>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 www.conf /usr/local/php/etc/php-fpm.d/EXPOSE 9000CMD /usr/local/php/sbin/php-fpm -F1234567891011121314151617181922232425262728293031323334353637383940

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

从其他机器安装 php 后,scp 配置文件到容器宿主机并进行修改

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_httponly =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]1234567891011121314151617181922232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811911122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153

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/*.conf12345678

3.3 www.conf

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

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

4. 生成镜像

[root@docker php]# docker build -t php:lnmp .[root@docker php]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEphplnmp985842f961f1 About a minute ago 1.2GBmysql lnmp49da8f7299af 12 minutes ago 9.98GBnginx lnmp35a6404fcfa1 26 minutes ago 522MBcentos 7 eeb6ee3f44bd 4 weeks ago204MB1234567

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 CREATEDSTATUSPORTS 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/tcpmysql57616d4ea225 nginx:lnmp "/usr/local/nginx/sb…" 26 minutes ago Up 26 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1234567

6. 验证 php

[root@docker php]# docker exec -it php bash[root@954d8ecdd6c7 php-7.1.10]# ps -auxUSER PID %CPU %MEM VSZ RSS TTYSTAT START TIME COMMANDroot1 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 wwwnginx 8 0.0 0.0 113028 5784 pts/0 S+ 06:00 0:00 php-fpm: pool wwwroot9 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 -aux12345678

五、启动 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)1234567891011121314

2. 浏览器访问测试

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

六、备份镜像至本地

[root@docker php]# mkdir /opt/lnmp_images[root@docker php]# cd /opt/lnmp_images/[root@docker lnmp_images]# docker save -o nginx.tar nginx:lnmp[root@docker lnmp_images]# docker save -o mysql.tar mysql:lnmp[root@docker lnmp_images]# docker save -o php.tar php:lnmp

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。