• 基于Dockerfile搭建LNMP环境


    准备工作

    1. #关闭防火墙和防护机制
    2. systemctl stop firewalld 
    3. systemctl disable firewalld
    4. setenforce 0
    1. docker network create --subnet=172.18.0.0/16
    2. --opt "com.docker.network.bridge.name"="docker1"  mynetwork
    3. #设置自定义网络模式,模式为bridge模式,
    4. docker1的ip地址为172.18.0.1,显示的网络名称mynetwork。
    5. docker network ls
    6. #查看使用的网络模式
    7. ifconfig

    部署nginx

    (容器IP 为 172.18.0.10)

    编写Dockerfile文件

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

     配置nginx.conf文件

    1. vim nginx.conf
    2. #user nobody;
    3. worker_processes 1;
    4. #error_log logs/error.log;
    5. #error_log logs/error.log notice;
    6. #error_log logs/error.log info;
    7. #pid logs/nginx.pid;
    8. events {
    9. worker_connections 1024;
    10. }
    11. http {
    12. include mime.types;
    13. default_type application/octet-stream;
    14. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    15. # '$status $body_bytes_sent "$http_referer" '
    16. # '"$http_user_agent" "$http_x_forwarded_for"';
    17. #access_log logs/access.log main;
    18. sendfile on;
    19. #tcp_nopush on;
    20. #keepalive_timeout 0;
    21. keepalive_timeout 65;
    22. #gzip on;
    23. server {
    24. listen 80;
    25. server_name localhost;
    26. charset utf-8;
    27. #access_log logs/host.access.log main;
    28. location / {
    29. root html;
    30. index index.html index.php;
    31. }
    32. #error_page 404 /404.html;
    33. # redirect server error pages to the static page /50x.html
    34. #
    35. error_page 500 502 503 504 /50x.html;
    36. location = /50x.html {
    37. root html;
    38. }
    39. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    40. #
    41. #location ~ \.php$ {
    42. # proxy_pass http://127.0.0.1;
    43. #}
    44. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    45. #
    46. location ~ \.php$ {
    47. root html;
    48. fastcgi_pass 172.18.0.30:9000;
    49. fastcgi_index index.php;
    50. fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    51. include fastcgi_params;
    52. }
    53. # deny access to .htaccess files, if Apache's document root
    54. # concurs with nginx's one
    55. #
    56. #location ~ /\.ht {
    57. # deny all;
    58. #}
    59. }
    60. # another virtual host using mix of IP-, name-, and port-based configuration
    61. #
    62. #server {
    63. # listen 8000;
    64. # listen somename:8080;
    65. # server_name somename alias another.alias;
    66. # location / {
    67. # root html;
    68. # index index.html index.htm;
    69. # }
    70. #}
    71. # HTTPS server
    72. #
    73. #server {
    74. # listen 443 ssl;
    75. # server_name localhost;
    76. # ssl_certificate cert.pem;
    77. # ssl_certificate_key cert.key;
    78. # ssl_session_cache shared:SSL:1m;
    79. # ssl_session_timeout 5m;
    80. # ssl_ciphers HIGH:!aNULL:!MD5;
    81. # ssl_prefer_server_ciphers on;
    82. # location / {
    83. # root html;
    84. # index index.html index.htm;
    85. # }
    86. #}
    87. }

     对接php的IP地址

    构建启动nginx镜像

    1. docker build -t nginx:lnmp .
    2. #构建nginx镜像(别忘记最后的点)
    3. 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
    4. #启动容器
    5. docker ps -a
    6. #查看容器

    部署mysql

    (容器IP 为 172.18.0.20)

    1. mkdir /opt/mysqld
    2. cd /opt/mysqld
    3. 上传 mysql-boost-5.7.20.tar.gz 到 /opt/mysqld 目录中

     编写Dockerfile文件

    1. vim Dockerfile
    2. FROM centos:7
    3. #基础镜像
    4. MAINTAINER this is mysql image <wl>
    5. #维护人描述信息
    6. RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
    7. #安装依赖环境
    8. ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
    9. #上传包到指定目录
    10. WORKDIR /usr/local/src/mysql-5.7.20/
    11. #切换到解压后的目录
    12. RUN cmake \
    13. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    14. -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
    15. -DSYSCONFDIR=/etc \
    16. -DSYSTEMD_PID_DIR=/usr/local/mysql \
    17. -DDEFAULT_CHARSET=utf8  \
    18. -DDEFAULT_COLLATION=utf8_general_ci \
    19. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    20. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    21. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    22. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    23. -DMYSQL_DATADIR=/usr/local/mysql/data \
    24. -DWITH_BOOST=boost \
    25. -DWITH_SYSTEMD=1 && make && make install
    26. #编译安装
    27. ADD my.cnf /etc/
    28. #将主机上的 "my.cnf" 文件复制到镜像中的 "/etc/" 目录中
    29. ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
    30. #设置环境变量
    31. RUN useradd -M -s /sbin/nologin  mysql
    32. 创建mysql用户
    33. RUN chown mysql:mysql /etc/my.cnf
    34. #将 "/etc/my.cnf" 文件的所有者和组设置为 "mysql:mysql"
    35. RUN chown -R mysql:mysql /usr/local/mysql/
    36. #将 "/usr/local/mysql/" 目录及其子目录下的所有文件的所有者和组设置为 "mysql:mysql"
    37. RUN /usr/local/mysql/bin/mysqld \
    38. --initialize-insecure \
    39. --user=mysql \
    40. --basedir=/usr/local/mysql \
    41. --datadir=/usr/local/mysql/data
    42. #初始化mysql
    43. EXPOSE 3306
    44. #开放3306端口
    45. CMD ["/usr/local/mysql/bin/mysqld"]

     配置my.conf文件

    1. vim my.cnf
    2. [client]
    3. port = 3306
    4. socket = /usr/local/mysql/mysql.sock
    5. [mysql]
    6. port = 3306
    7. socket = /usr/local/mysql/mysql.sock
    8. [mysqld]
    9. user = mysql
    10. basedir = /usr/local/mysql
    11. datadir = /usr/local/mysql/data
    12. port = 3306
    13. character_set_server=utf8
    14. pid-file = /usr/local/mysql/mysqld.pid
    15. socket = /usr/local/mysql/mysql.sock
    16. server-id = 1
    17. 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

     构建启动Mysql镜像

    1. docker build -t mysql:lnmp .
    2. docker run --name=mysql -d --privileged -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp
    3. -----------------------------------------
    4. --privileged: #让容器内拥有root权限
    5. -v /usr/local/mysql: #共享这个目录,其它容器可以使用--volumes-from 指定读取本容器的共享目录。然后也会生成一样的目录。
    6. --net mynetwork: #指定--net网络模式,mynetwork为自定义网络模式。
    7. --ip 172.18.0.20: #指定ip地址,自定义网络模式也可以指定ip地址。
    8. -----------------------------------------
    9. docker ps -a
    10. #查看容器

    部署php

    (容器IP 为 172.18.0.30)

    1. mkdir /opt/php
    2. cd /opt/php
    3. 上传 php-7.1.10.tar.bz2/opt/php 目录中

     编写Dockerfile文件

    1. vim Dockerfile
    2. FROM centos:7
    3. MAINTAINER this is php image <wl>
    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. #下载环境 创建用户
    15. ADD php-7.1.10.tar.bz2 /usr/local/src/
    16. #上传包到指定目录
    17. WORKDIR /usr/local/src/php-7.1.10
    18. 进入到指定目录
    19. RUN ./configure \
    20. --prefix=/usr/local/php \
    21. --with-mysql-sock=/usr/local/mysql/mysql.sock \
    22. --with-mysqli \
    23. --with-zlib \
    24. --with-curl \
    25. --with-gd \
    26. --with-jpeg-dir \
    27. --with-png-dir \
    28. --with-freetype-dir \
    29. --with-openssl \
    30. --enable-fpm \
    31. --enable-mbstring \
    32. --enable-xml \
    33. --enable-session \
    34. --enable-ftp \
    35. --enable-pdo \
    36. --enable-tokenizer \
    37. --enable-zip && make && make install
    38. #编译安装
    39. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
    40. 设置环境变量
    41. ADD php.ini    /usr/local/php/lib/
    42. ADD php-fpm.conf /usr/local/php/etc/
    43. ADD www.conf /usr/local/php/etc/php-fpm.d/
    44. #上传配置文件到指定目录
    45. EXPOSE 9000
    46. ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
    47. #启动镜像 占用前台

     配置php的配置文件

    1. vim php.ini
    2. vim www.conf
    3. vim php-fpm.conf

    构建启动php镜像

    1. docker build -t php:lnmp .
    2. docker run --name=php -d -p 9000:9000 --volumes-from mysql --volumes-from nginx --net mynetwork --ip 172.18.0.30 php:lnmp

    登陆mysql容器 授权

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

    访问测试wordpress

    浏览器访问
    http://20.0.0.60/wordpress/index.php

  • 相关阅读:
    异硫氰酸荧光素,CAS号: 3012-71-3
    【大数据技术】!重要!MySQL里按某字段指定内容顺序排序的几种实现方法
    斯坦福NLP课程 | 第12讲 - NLP子词模型
    adb 查找应用包名,应用 Activity 等信息
    网络安全筑基篇——CSRF、SSRF
    RK3399平台开发系列讲解(I/O篇)Linux最大文件数的限制机制
    程序员健康防猝指南6:[科学]运动
    学生HTML个人网页作业作品 HTML+CSS+JavaScript环保页面设计与实现制作
    Excel VBA编程
    AtCoder Beginner Contest 354 (ABCDEFG题)视频讲解
  • 原文地址:https://blog.csdn.net/weixin_54959847/article/details/133688326