• 基于Docker-compose搭建LNMP


    1、配置nginx

    • 创建nginx目录
    • 上传所需压缩包
    • 将wordress解压到指定路径下

    • 配置Dockerfile文本文件
    1. vim Dockerfile
    2. FROM centos:7
    3. MAINTAINER this is nginx image
    4. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    5. RUN useradd -M -s /sbin/nologin nginx
    6. ADD nginx-1.12.0.tar.gz /usr/local/src
    7. WORKDIR /usr/local/src/nginx-1.12.0
    8. RUN ./configure \
    9. --prefix=/usr/local/nginx \
    10. --user=nginx \
    11. --group=nginx \
    12. --with-http_stub_status_module && make && make install
    13. ENV PATH /usr/local/nginx/sbin:$PATH
    14. ADD nginx.conf /usr/local/nginx/conf/
    15. ADD html /usr/local/nginx/
    16. RUN chmod 777 -R /usr/local/nginx/html
    17. EXPOSE 80
    18. EXPOSE 443
    19. ENTRYPOINT [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

    • 配置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. }
    • nginx相关文件

    2、配置mysql

    • 创建mysql目录
    • 上传所需压缩包
    • 配置my.cnf文件
    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

    • 配置Dockerfile文本文件
    1. vim Dockerfile
    2. FROM centos:7
    3. MAINTAINER this is mysql image
    4. RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
    5. ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
    6. WORKDIR /usr/local/src/mysql-5.7.20/
    7. RUN cmake \
    8. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    9. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    10. -DSYSCONFDIR=/etc \
    11. -DSYSTEMD_PID_DIR=/usr/local/mysql \
    12. -DDEFAULT_CHARSET=utf8 \
    13. -DDEFAULT_COLLATION=utf8_general_ci \
    14. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    15. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    16. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    17. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    18. -DMYSQL_DATADIR=/usr/local/mysql/data \
    19. -DWITH_BOOST=boost \
    20. -DWITH_SYSTEMD=1 && make -j 4 && make install
    21. ADD my.cnf /etc/
    22. ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
    23. RUN useradd -M -s /sbin/nologin mysql
    24. RUN chown mysql:mysql /etc/my.cnf
    25. RUN chown -R mysql:mysql /usr/local/mysql/
    26. RUN /usr/local/mysql/bin/mysqld \
    27. --initialize-insecure \
    28. --user=mysql \
    29. --basedir=/usr/local/mysql \
    30. --datadir=/usr/local/mysql/data
    31. EXPOSE 3306
    32. CMD ["/usr/local/mysql/bin/mysqld"]

    3、配置php

    • 创建php目录
    • 上传php压缩包

    • 配置Dockerfile文本文件
    1. vim Dockerfile
    2. FROM centos:7
    3. MAINTAINER this is php image
    4. RUN yum -y install gd \
    5. libjpeg libjpeg-devel \
    6. libpng libpng-devel \
    7. freetype freetype-devel \
    8. libxml2 libxml2-devel \
    9. zlib zlib-devel \
    10. curl curl-devel \
    11. openssl openssl-devel \
    12. gcc gcc-c++ make pcre-devel
    13. RUN useradd -M -s /sbin/nologin nginx
    14. ADD php-7.1.10.tar.bz2 /usr/local/src/
    15. WORKDIR /usr/local/src/php-7.1.10
    16. RUN ./configure \
    17. --prefix=/usr/local/php \
    18. --with-mysql-sock=/usr/local/mysql/mysql.sock \
    19. --with-mysqli \
    20. --with-zlib \
    21. --with-curl \
    22. --with-gd \
    23. --with-jpeg-dir \
    24. --with-png-dir \
    25. --with-freetype-dir \
    26. --with-openssl \
    27. --enable-fpm \
    28. --enable-mbstring \
    29. --enable-xml \
    30. --enable-session \
    31. --enable-ftp \
    32. --enable-pdo \
    33. --enable-tokenizer \
    34. --enable-zip && make && make install
    35. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
    36. ADD php.ini /usr/local/php/lib/
    37. ADD php-fpm.conf /usr/local/php/etc/
    38. ADD www.conf /usr/local/php/etc/php-fpm.d/
    39. EXPOSE 9000
    40. ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]

    • 配置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]
    • 配置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
    • 配置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

    4、创建compose

    •  创建compose_lnmp目录,并将上述创建的服务cp至目录下

    •  配置docker-compose.yml文件
    1. #定义docker-compose版本,可以是2 或 3
    2. version: '3'
    3. #使用services定义服务
    4. services:
    5. #第一个service
    6. nginx:
    7. #设置容器名
    8. container_name: nginx
    9. #使用dockerfile来构建镜像
    10. build:
    11. #指定Dockerfile文件所在位置
    12. context: ./nginx
    13. #指定文件名
    14. dockerfile: Dockerfile
    15. #映射端口
    16. ports:
    17. - 80:80
    18. - 443:443
    19. #设置数据卷挂载
    20. volumes:
    21. - ./nginx/html:/usr/local/nginx/html
    22. #加入网络
    23. networks:
    24. lnmp:
    25. ipv4_address: 172.18.0.10
    26. mysql:
    27. container_name: mysql
    28. build:
    29. context: ./mysql
    30. dockerfile: Dockerfile
    31. ports:
    32. - 3306:3306
    33. networks:
    34. lnmp:
    35. ipv4_address: 172.18.0.20
    36. volumes:
    37. - db-data:/usr/local/mysql
    38. privileged: true
    39. php:
    40. container_name: php
    41. build:
    42. context: ./php
    43. dockerfile: Dockerfile
    44. ports:
    45. - 9000:9000
    46. networks:
    47. lnmp:
    48. ipv4_address: 172.18.0.30
    49. volumes:
    50. - db-data:/usr/local/mysql
    51. - ./nginx/html:/usr/local/nginx/html
    52. depends_on:
    53. - nginx
    54. - mysql
    55. #设置网络为自定义网络
    56. networks:
    57. lnmp:
    58. driver: bridge
    59. ipam:
    60. config:
    61. - subnet: 172.18.0.0/16
    62. volumes:

    • 创建所需挂载目录 

    •  构建镜像
    docker-compose -f docker-compose.yml up -d

    • 验证:访问192.168.247.70/wordpress/wp-admin/setup-config.php 

     

  • 相关阅读:
    字符编码转换时发生内存越界引发的摄像头切换失败问题的排查
    ipad下载的文件在哪里可以找到
    事件的节流(throttle)与防抖(debounce)
    Qt应用软件【协议篇】GPIO控制LED灯
    python爬取每日天气情况
    杂记 | 使用阿里云函数计算服务代理OpenAI的API接口
    自制肥鲨HDO2电源升压延长线
    设计模式代码
    使用nsenter在容器内部执行宿主机的命令
    数据分类分级指南范围
  • 原文地址:https://blog.csdn.net/weixin_46254171/article/details/133695534