• Docker之Dockerfile搭建lnmp


    目录

    一、搭建nginx

    ​编辑

    二、搭建Mysql(简略版)

    三、搭建PHP

    五、补充


    主机名ip地址主要软件
    mysql2192.168.11.22Docker

    代码示例

    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. setenforce 0
    4. docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
    5. #部署nginx(容器IP 为 172.18.0.10)
    6. mkdir /opt/nginx
    7. cd /opt/nginx/
    8. 上传 nginx-1.12.0.tar.gz、wordpress-4.9.4-zh_CN.tar.gz 到 /opt/nginx/ 目录中
    9. mkdir /opt/nginx/html
    10. tar zxvf wordpress-4.9.4-zh_CN.tar.gz -C /opt/nginx/html
    11. vim Dockerfile
    12. FROM centos:7
    13. MAINTAINER this is nginx image
    14. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    15. RUN useradd -M -s /sbin/nologin nginx
    16. ADD nginx-1.12.0.tar.gz /usr/local/src/
    17. WORKDIR /usr/local/src/nginx-1.12.0
    18. RUN ./configure \
    19. --prefix=/usr/local/nginx \
    20. --user=nginx \
    21. --group=nginx \
    22. --with-http_stub_status_module && make && make install
    23. ENV PATH /usr/local/nginx/sbin:$PATH
    24. ADD nginx.conf /usr/local/nginx/conf/
    25. #ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html/
    26. RUN chmod 777 -R /usr/local/nginx/html/
    27. EXPOSE 80
    28. EXPOSE 443
    29. ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]
    30. docker build -t nginx:lnmp .
    31. docker run -d --name nginx -p 80:80 -v /opt/nginx/html:/usr/local/nginx/html --net mynetwork --ip 172.18.0.10 nginx:lnmp
    32. #部署mysql(容器IP 为 172.18.0.20)
    33. mkdir /opt/mysqld
    34. cd /opt/mysqld
    35. 上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中
    36. vim Dockerfile
    37. FROM centos:7
    38. MAINTAINER this is mysql image
    39. RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
    40. ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
    41. WORKDIR /usr/local/src/mysql-5.7.20/
    42. RUN cmake \
    43. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    44. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    45. -DSYSCONFDIR=/etc \
    46. -DSYSTEMD_PID_DIR=/usr/local/mysql \
    47. -DDEFAULT_CHARSET=utf8 \
    48. -DDEFAULT_COLLATION=utf8_general_ci \
    49. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    50. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    51. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    52. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    53. -DMYSQL_DATADIR=/usr/local/mysql/data \
    54. -DWITH_BOOST=boost \
    55. -DWITH_SYSTEMD=1 && make && make install
    56. ADD my.cnf /etc/
    57. ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
    58. RUN useradd -M -s /sbin/nologin mysql
    59. RUN chown mysql:mysql /etc/my.cnf
    60. RUN chown -R mysql:mysql /usr/local/mysql/
    61. RUN /usr/local/mysql/bin/mysqld \
    62. --initialize-insecure \
    63. --user=mysql \
    64. --basedir=/usr/local/mysql \
    65. --datadir=/usr/local/mysql/data
    66. EXPOSE 3306
    67. CMD ["/usr/local/mysql/bin/mysqld"]
    68. vim my.cnf
    69. [client]
    70. port = 3306
    71. socket = /usr/local/mysql/mysql.sock
    72. [mysql]
    73. port = 3306
    74. socket = /usr/local/mysql/mysql.sock
    75. [mysqld]
    76. user = mysql
    77. basedir = /usr/local/mysql
    78. datadir = /usr/local/mysql/data
    79. port = 3306
    80. character_set_server=utf8
    81. pid-file = /usr/local/mysql/mysqld.pid
    82. socket = /usr/local/mysql/mysql.sock
    83. server-id = 1
    84. 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
    85. docker build -t mysql:lnmp .
    86. docker run --name=mysql -d --privileged -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp
    87. #部署php(容器IP 为 172.18.0.30)
    88. mkdir /opt/php
    89. cd /opt/php
    90. 上传 php-7.1.10.tar.bz2 到 /opt/php 目录中
    91. vim Dockerfile
    92. FROM centos:7
    93. MAINTAINER this is php image
    94. RUN yum -y install gd \
    95. libjpeg libjpeg-devel \
    96. libpng libpng-devel \
    97. freetype freetype-devel \
    98. libxml2 libxml2-devel \
    99. zlib zlib-devel \
    100. curl curl-devel \
    101. openssl openssl-devel \
    102. gcc gcc-c++ make pcre-devel
    103. RUN useradd -M -s /sbin/nologin nginx
    104. ADD php-7.1.10.tar.bz2 /usr/local/src/
    105. WORKDIR /usr/local/src/php-7.1.10
    106. RUN ./configure \
    107. --prefix=/usr/local/php \
    108. --with-mysql-sock=/usr/local/mysql/mysql.sock \
    109. --with-mysqli \
    110. --with-zlib \
    111. --with-curl \
    112. --with-gd \
    113. --with-jpeg-dir \
    114. --with-png-dir \
    115. --with-freetype-dir \
    116. --with-openssl \
    117. --enable-fpm \
    118. --enable-mbstring \
    119. --enable-xml \
    120. --enable-session \
    121. --enable-ftp \
    122. --enable-pdo \
    123. --enable-tokenizer \
    124. --enable-zip && make && make install
    125. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
    126. ADD php.ini /usr/local/php/lib/
    127. ADD php-fpm.conf /usr/local/php/etc/
    128. ADD www.conf /usr/local/php/etc/php-fpm.d/
    129. EXPOSE 9000
    130. ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
    131. docker build -t php:lnmp .
    132. docker run --name=php -d -p 9000:9000 --volumes-from mysql --volumes-from nginx --net mynetwork --ip 172.18.0.30 php:lnmp
    133. --volumes-from mysql:这个选项指示容器应该使用从另一个名为 "mysql" 的容器挂载的卷。这是一种通过卷在容器之间共享数据的方式。
    134. --volumes-from nginx:类似地,这个选项指示容器应该使用从另一个名为 "nginx" 的容器挂载的卷。
    135. --net mynetwork:这个选项指定容器应该连接到名为 "mynetwork" 的 Docker 网络。这允许容器在该网络中与其他容器进行通信。
    136. --ip 172.18.0.30:这个选项为容器分配了一个特定的 IP 地址(172.18.0.30)。这样可以确保容器具有固定的 IP 地址。
    137. 总之,这个命令的目的是创建一个名为 "php" 的容器,该容器运行 PHP 服务,并通过端口映射、卷共享和网络连接与其他容器("mysql""nginx")协同工作,组成一个 LNMP(Linux、Nginx、MySQL、PHP)堆栈。容器 "php" 具有固定的 IP 地址 172.18.0.30,并以后台模式运行。
    138. docker exec -it mysql /bin/bash
    139. mysql
    140. create database wordpress;
    141. grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
    142. grant all privileges on *.* to 'root'@'%' identified by 'abc123';
    143. flush privileges;
    144. 浏览器访问:
    145. http://192.168.80.15/wordpress/index.php

    一、搭建nginx

    二、搭建Mysql(简略版)

    还有以下步骤:

    1. 创建镜像
    2. docker build -t mysql:lnmp .
    3. 创建并启动以mysql:lnmp为镜像基础的容器
    4. docker run --name=mysql -d --privileged -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp

    三、搭建PHP

     

     

    四、验证

    浏览器中输入:http://192.168.11.22/wordpress/index.php

    五、补充

    1. 1、限制Nginx容器最多使用500Mb的内存和1G的Swap
    2. docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lamp
    3. 2、限制Mysql容器写 /dev/sda 的速率为 10 MB/s
    4. docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp

  • 相关阅读:
    如何设计元宇宙展厅,元宇宙展厅的展示和交互形式有哪些?
    【SpringMVC】面向全球的用户,我们该怎么办
    Mockito 如何 mock 静态方法
    电脑误删文件有多大几率能恢复回来
    2023-09-30 LeetCode每日一题(全部开花的最早一天)
    多年以后「PageHelper」又深深的给我上了一课
    波奇学Linux:日志
    uniapp 切换WIFI
    Node学习笔记之包管理工具
    Unittest基本使用
  • 原文地址:https://blog.csdn.net/m0_72359405/article/details/133634011