• 基于Dockerfile搭建LNMP


    目录

    一、基础环境准备

    1、环境前期准备 

    二、部署nginx(容器IP 为 172.18.0.10)

    1、配置Dockerfile文件

    2、配置nginx.conf文件

    3、构建镜像、启动镜像

    三、部署mysql

    1、配置Dockerfile文件

    2、配置my.conf文件

    3、构建镜像、启动镜像

    5、验证mysql

    四、PHP部署

    1、配置Dockerfile

    2、配置相关文件

    2.1 配置php.ini文件

    2.2 配置php-fpm.conf文件

    2.3 配置www.conf文件

    3、构建镜像、启动镜像

    五、启动wordpress服务

    1、登录到mysql容器中,授权

    2、网页访问:http://20.0.0.55/wordpress/wp-admin/setup-config.php

    一、基础环境准备

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

    (2)环境描述

    容器系统IP地址软件
    nginxcentos 7.5172.18.0.10wordpress-6.0.2-zh_CN.tar.gz、nginx-1.12.2.tar.gz
    mysqlcentos 7.5172.18.0.20mysql-boost-5.7.25.tar.g
    phpcentos 7.5172.18.0.30php-7.1.24.tar.gz

     (3)任务需求

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

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

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

    (4)将所有容器进行快照,然后将Docker镜像打包成tar包备份到本地。

    1、环境前期准备 

    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. setenforce 0
    4. #关闭防火墙和核心防护
    5. docker pull centos:7
    6. #从docker Hub公共仓库下载基础镜像
    7. docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
    8. #设置自定义网络模式,模式为bridge模式,docker1的ip地址为172.18.0.1,显示的网络名称mynetwork。
    9. docker network ls
    10. #查看使用的网络模式
    11. ifconfig

    二、部署nginx(容器IP 为 172.18.0.10)

    1、配置Dockerfile文件

    1. mkdir /opt/nginx
    2. cd /opt/nginx
    3. #此目录上传nginx包
    4. vim Dockerfile
    5. #编写dockerfile文件
    6. FROM centos:7
    7. #指定基础镜像
    8. MAINTAINER ydq
    9. #指定维护者信息
    10. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    11. #安装依赖包,安装环境
    12. RUN useradd -M -s /sbin/nologin nginx
    13. #创建nginx用户
    14. ADD nginx-1.12.2.tar.gz /opt
    15. #将本地安装包上传到指定目录(自动解压)
    16. WORKDIR /opt/nginx-1.12.2
    17. #进入到/opt/nginx-1.12.2目录中
    18. RUN ./configure \
    19. --prefix=/usr/local/nginx \
    20. --user=nginx \
    21. --group=nginx \
    22. --with-http_stub_status_module && make && make install
    23. #开始编译安装,加上&&符号,只有前面执行完成,后面才会执行
    24. ENV PATH=/usr/local/nginx/sbin:$PATH
    25. #将nginx执行命令放入到环境变量中
    26. ADD nginx.conf /usr/local/nginx/conf/nginx.conf
    27. #在宿主机写好配置文件,然就将配置文件复制到容器中
    28. ADD wordpress-6.0.2-zh_CN.tar.gz /usr/local/nginx/html
    29. #上传论坛的包
    30. RUN chmod 777 -R /usr/local/nginx/html
    31. #给html文件所有权限
    32. EXPOSE 80
    33. #开放80端口
    34. VOLUME ["/usr/local/nginx/html/"]
    35. #挂载目录(相当于将/usr/local/nginx/html目录共享,会在宿主机上自动生成共享目录,主要目的是为了让容器之间共享这个文件)
    36. CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
    37. #执行启动nginx命令,并且关闭nginx的后台启动,因为需要它占用前台,让docker不关闭。

    2、配置nginx.conf文件

    1. worker_processes 1;
    2. events {
    3. worker_connections 1024;
    4. }
    5. http {
    6. include mime.types;
    7. default_type application/octet-stream;
    8. sendfile on;
    9. keepalive_timeout 65;
    10. server {
    11. listen 80;
    12. server_name localhost;
    13. charset utf-8;
    14. location / {
    15. root html;
    16. index index.html index.php;
    17. }
    18. error_page 500 502 503 504 /50x.html;
    19. location = /50x.html {
    20. root html;
    21. }
    22. location ~ \.php$ { #当访问以.php结尾的URL时,会连接到172.18.0.30的ip地址上
    23. root html;
    24. fastcgi_pass 172.18.0.30:9000;
    25. fastcgi_index index.php;
    26. fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    27. include fastcgi_params;
    28. }
    29. }
    30. }

    3、构建镜像、启动镜像

    在构建镜像前,确保一下文件压缩包都在。

    1. docker build -t nginx:lnmp .
    2. #构建nginx镜像(别忘记最后的点)
    3. docker images
    4. #查看镜像
    5. docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.18.0.10 nginx:lnmp
    6. #启动容器
    7. ----------------------------
    8. -m 500: #表示该容器内存最大为500MB
    9. --memory-swap: #表示内存+swap总共1G,那swap也是500MB
    10. //相当于是限制了内存的使用量,避免所占资源太多
    11. ----------------------
    12. docker ps -a
    13. #查看容器
    14. curl 20.0.0.55

    三、部署mysql

    1、配置Dockerfile文件

    1. mkdir /opt/mysql
    2. cd /opt/mysql
    3. #上传mysql包到此目录下
    4. vim Dockerfile
    5. FROM centos:7
    6. #基础镜像
    7. MAINTAINER ydq
    8. #维护人信息
    9. RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make
    10. #安装环境
    11. RUN useradd -M -s /sbin/nologin mysql
    12. #创建mysql用户
    13. ADD mysql-boost-5.7.25.tar.gz /opt
    14. #将mysql安装包上传(自带boost)
    15. WORKDIR /opt/mysql-5.7.25
    16. #切换到mysql解压后的目录
    17. RUN cmake \
    18. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    19. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    20. -DSYSCONFDIR=/etc \
    21. -DSYSTEMD_PID_DIR=/usr/local/mysql \
    22. -DDEFAULT_CHARSET=utf8 \
    23. -DDEFAULT_COLLATION=utf8_general_ci \
    24. -DWITH_EXTRA_CHARSETS=all \
    25. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    26. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    27. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    28. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    29. -DMYSQL_DATADIR=/usr/local/mysql/data \
    30. -DWITH_BOOST=boost \
    31. -DWITH_SYSTEMD=1 && make -j4 && make install
    32. #编译安装
    33. EXPOSE 3306
    34. #开放端口
    35. RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
    36. #设置权限
    37. ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
    38. #设置环境变量
    39. WORKDIR /usr/local/mysql/bin
    40. #切换目录
    41. RUN ./mysql \
    42. --initialize-insecure \
    43. --user=mysql \
    44. --basedir=/usr/local/mysql \
    45. --datadir=/usr/local/mysql/data
    46. #初始化mysql
    47. RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
    48. #复制mysql服务程序到启动文件中
    49. VOLUME ["/usr/local/mysql"]
    50. #设置共享目录
    51. CMD ["/usr/sbin/init"]
    52. #启动容器之后,可以使用systemctl工具(并且占用前台,保持容器不断)

    2、配置my.conf文件

    1. vim /opt/my.cnf
    2. [client]
    3. port = 3306
    4. default-character-set=utf8
    5. socket=/usr/local/mysql/mysql.sock
    6. [mysql]
    7. port = 3306
    8. default-character-set=utf8
    9. socket=/usr/local/mysql/mysql.sock
    10. auto-rehash
    11. [mysqld]
    12. user = mysql
    13. basedir=/usr/local/mysql
    14. datadir=/usr/local/mysql/data
    15. port = 3306
    16. character-set-server=utf8
    17. pid-file = /usr/local/mysql/mysqld.pid
    18. socket=/usr/local/mysql/mysql.sock
    19. bind-address = 0.0.0.0
    20. skip-name-resolve
    21. max_connections=2048
    22. default-storage-engine=INNODB
    23. max_allowed_packet=16M
    24. server-id = 1
    25. 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

    3、构建镜像、启动镜像

    1. docker build -t mysql:lnmp .
    2. #生成镜像
    3. docker images
    4. #查看镜像

    1. docker run --name mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp
    2. #生成容器
    3. -----------------------------------------
    4. --privileged: #让容器内拥有root权限
    5. --device-write-bps: #限制写入到/dev/sda中每秒最大10M的速度。
    6. -v /usr/local/mysql: #共享这个目录,其它容器可以使用--volumes-from 指定读取本容器的共享目录。然后也会生成一样的目录。
    7. --net mynetwork: #指定--net网络模式,mynetwork为自定义网络模式。
    8. --ip 172.18.0.20: #指定ip地址,自定义网络模式也可以指定ip地址。
    9. -----------------------------------------
    10. docker ps -a
    11. #查看容器

    5、验证mysql

    1. docker exec -it mysql bash
    2. #登录该容器
    3. systemctl status mysqld
    4. #查看mysql状态

    四、PHP部署

    1、配置Dockerfile

    1. mkdir /opt/php
    2. cd /opt/php
    3. #将php包上传到该目录
    4. vim Dockerfile
    5. FROM centos:7
    6. MAINTAINER ydq3
    7. RUN yum install -y gd \
    8. libjpeg libjpeg-devel \
    9. libpng libpng-devel \
    10. freetype freetype-devel \
    11. libxml2 libxml2-devel \
    12. zlib zlib-devel \
    13. curl curl-devel \
    14. openssl openssl-devel \
    15. gcc gcc-c++ make pcre-devel;useradd -M -s /sbin/nologin nginx
    16. #下载环境,以及创建nginx用户。
    17. ADD php-7.1.24.tar.gz /opt
    18. #上传php包到/opt目录下
    19. WORKDIR /opt/php-7.1.24
    20. #进入到指定目录
    21. RUN ./configure \
    22. --prefix=/usr/local/php \
    23. --with-mysql-sock=/usr/local/mysql/mysql.sock \
    24. --with-mysqli \
    25. --with-zlib \
    26. --with-curl \
    27. --with-gd \
    28. --with-jpeg-dir \
    29. --with-png-dir \
    30. --with-freetype-dir \
    31. --with-openssl \
    32. --enable-fpm \
    33. --enable-mbstring \
    34. --enable-xml \
    35. --enable-session \
    36. --enable-ftp \
    37. --enable-pdo \
    38. --enable-tokenizer \
    39. --enable-zip && make -j 4 && make install
    40. #编译安装
    41. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
    42. #设置环境变量
    43. ADD php.ini /usr/local/php/lib
    44. ADD php-fpm.conf /usr/local/php/etc
    45. ADD www.conf /usr/local/php/etc/php-fpm.d/
    46. #上传配置文件到指定目录
    47. EXPOSE 9000
    48. #暴露端口
    49. CMD /usr/local/php/sbin/php-fpm -F
    50. #启动一个进程,占用前台。

    2、配置相关文件

    2.1 配置php.ini文件

    1. vim /opt/php/php.ini
    2. [PHP]
    3. engine = On
    4. short_open_tag = Off
    5. precision = 14
    6. output_buffering = 4096
    7. zlib.output_compression = Off
    8. implicit_flush = Off
    9. unserialize_callback_func =
    10. serialize_precision = -1
    11. disable_functions =
    12. disable_classes =
    13. zend.enable_gc = On
    14. expose_php = On
    15. max_execution_time = 30
    16. max_input_time = 60
    17. memory_limit = 128M
    18. error_reporting = E_ALL
    19. display_errors = On
    20. display_startup_errors = On
    21. log_errors = On
    22. log_errors_max_len = 1024
    23. ignore_repeated_errors = Off
    24. ignore_repeated_source = Off
    25. report_memleaks = On
    26. track_errors = On
    27. html_errors = On
    28. variables_order = "GPCS"
    29. request_order = "GP"
    30. register_argc_argv = Off
    31. auto_globals_jit = On
    32. post_max_size = 8M
    33. auto_prepend_file =
    34. auto_append_file =
    35. default_mimetype = "text/html"
    36. default_charset = "UTF-8"
    37. doc_root =
    38. user_dir =
    39. enable_dl = Off
    40. file_uploads = On
    41. upload_max_filesize = 2M
    42. max_file_uploads = 20
    43. allow_url_fopen = On
    44. allow_url_include = Off
    45. default_socket_timeout = 60
    46. [CLI Server]
    47. cli_server.color = On
    48. [Date]
    49. date.timezone = Asia/Shanghai
    50. [filter]
    51. [iconv]
    52. [intl]
    53. [sqlite3]
    54. [Pcre]
    55. [Pdo]
    56. [Pdo_mysql]
    57. pdo_mysql.cache_size = 2000
    58. pdo_mysql.default_socket=
    59. [Phar]
    60. [mail function]
    61. SMTP = localhost
    62. smtp_port = 25
    63. mail.add_x_header = On
    64. [SQL]
    65. sql.safe_mode = Off
    66. [ODBC]
    67. odbc.allow_persistent = On
    68. odbc.check_persistent = On
    69. odbc.max_persistent = -1
    70. odbc.max_links = -1
    71. odbc.defaultlrl = 4096
    72. odbc.defaultbinmode = 1
    73. [Interbase]
    74. ibase.allow_persistent = 1
    75. ibase.max_persistent = -1
    76. ibase.max_links = -1
    77. ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
    78. ibase.dateformat = "%Y-%m-%d"
    79. ibase.timeformat = "%H:%M:%S"
    80. [MySQLi]
    81. mysqli.max_persistent = -1
    82. mysqli.allow_persistent = On
    83. mysqli.max_links = -1
    84. mysqli.cache_size = 2000
    85. mysqli.default_port = 3306
    86. mysqli.default_socket = /usr/local/mysql/mysql.sock
    87. mysqli.default_host =
    88. mysqli.default_user =
    89. mysqli.default_pw =
    90. mysqli.reconnect = Off
    91. [mysqlnd]
    92. mysqlnd.collect_statistics = On
    93. mysqlnd.collect_memory_statistics = On
    94. [OCI8]
    95. [PostgreSQL]
    96. pgsql.allow_persistent = On
    97. pgsql.auto_reset_persistent = Off
    98. pgsql.max_persistent = -1
    99. pgsql.max_links = -1
    100. pgsql.ignore_notice = 0
    101. pgsql.log_notice = 0
    102. [bcmath]
    103. bcmath.scale = 0
    104. [browscap]
    105. [Session]
    106. session.save_handler = files
    107. session.use_strict_mode = 0
    108. session.use_cookies = 1
    109. session.use_only_cookies = 1
    110. session.name = PHPSESSID
    111. session.auto_start = 0
    112. session.cookie_lifetime = 0
    113. session.cookie_path = /
    114. session.cookie_domain =
    115. session.cookie_httponly =
    116. session.serialize_handler = php
    117. session.gc_probability = 1
    118. session.gc_divisor = 1000
    119. session.gc_maxlifetime = 1440
    120. session.referer_check =
    121. session.cache_limiter = nocache
    122. session.cache_expire = 180
    123. session.use_trans_sid = 0
    124. session.sid_length = 26
    125. session.trans_sid_tags = "a=href,area=href,frame=src,form="
    126. session.sid_bits_per_character = 5
    127. [Assertion]
    128. zend.assertions = 1
    129. [COM]
    130. [mbstring]
    131. [gd]
    132. [exif]
    133. [Tidy]
    134. tidy.clean_output = Off
    135. [soap]
    136. soap.wsdl_cache_enabled=1
    137. soap.wsdl_cache_dir="/tmp"
    138. soap.wsdl_cache_ttl=86400
    139. soap.wsdl_cache_limit = 5
    140. [sysvshm]
    141. [ldap]
    142. ldap.max_links = -1
    143. [mcrypt]
    144. [dba]
    145. [opcache]
    146. [curl]
    147. [openssl]

    2.2 配置php-fpm.conf文件

    1. vim /opt/php/php-fpm.conf
    2. [global]
    3. pid = run/php-fpm.pid
    4. include=/usr/local/php/etc/php-fpm.d/*.conf

    2.3 配置www.conf文件

    1. vim /opt/php/www.conf
    2. [www]
    3. user = nginx
    4. group = nginx
    5. listen = 172.18.0.30:9000
    6. pm = dynamic
    7. pm.max_children = 5
    8. pm.start_servers = 2
    9. pm.min_spare_servers = 1
    10. pm.max_spare_servers = 3

    3、构建镜像、启动镜像

    1. docker build -t php:lnmp .
    2. #构建镜像
    3. docker images
    4. #查看

    1. docker run -itd --name php --net mynetwork --ip 172.18.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp
    2. #启动容器
    3. -----------------------------------------------
    4. --volumes-from nginx: #表示读取nginx容器的共享信息
    5. --volumes-from mysql: #表示读取mysql容器的共享信息
    6. -----------------------------------------------
    7. docker ps -a
    8. #查看容器

    五、启动wordpress服务

    1、登录到mysql容器中,授权

    1. docker exec -it mysql bash
    2. #登录到mysql容器
    3. mysql
    4. #登录到容器中
    5. create database wordpress;
    6. #创建一个数据库
    7. grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';
    8. grant all privileges on *.* to 'root'@'%' identified by 'abc123';
    9. flush privileges;

    2、网页访问:http://20.0.0.55/wordpress/wp-admin/setup-config.php

  • 相关阅读:
    交叉编译器gcc-linaro-7.5.0快速安装
    TikTok怎么开启社交电商?
    谷粒商城15-商品秒杀、Sentinel高并发、高并发方法论
    基于Java发起HTTP请求实现文件的上传
    图片拼接:如何将一堆杂乱无章的图片变成一个有意义的、协调的整体
    PaddleOCR学习笔记3-通用识别服务
    Redis -- 秒杀
    bp神经网络怎么看结果,bp神经网络结果不一样
    机器学习基础:奇异值分解(SVD)
    跨境电商:为民营经济注入新活力
  • 原文地址:https://blog.csdn.net/weixin_46254171/article/details/133653291