• 【docker】基于dockerfile编写LNMP


    一、基础环境准备

    所需软件包,点赞自提

    链接:https://pan.baidu.com/s/1ijpeK2bw6Bou_Bx-KrExTQ
    提取码:1234

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

    在这里插入图片描述

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

    1、整个Dockerfile文件内容

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

    在这里插入图片描述

    2、配置nginx.conf文件

    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$ {         #当访问以.php结尾的URL时,会连接到172.18.0.30的ip地址上
                root           html;
                fastcgi_pass   172.18.0.30:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
                include        fastcgi_params;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    3、构建镜像

    在构建镜像前,确保一下文件压缩包都在。
    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

    三、部署mysql

    1、整个Docker文件内容

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

    在这里插入图片描述

    2、准备my.conf文件

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

    在这里插入图片描述

    3、生成镜像

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

    在这里插入图片描述

    4、启动镜像容器

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

    在这里插入图片描述

    5、验证mysql

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

    在这里插入图片描述

    四、PHP部署

    1、整个Dockerfile文件内容

    mkdir /opt/php
    cd /opt/php
    #将php包上传到该目录
    
    vim Dockerfile
    FROM centos:7
    
    MAINTAINER ydq3
    
    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 nginx
    #下载环境,以及创建nginx用户。
    
    ADD php-7.1.24.tar.gz /opt
    #上传php包到/opt目录下
    
    WORKDIR /opt/php-7.1.24
    #进入到指定目录
    
    RUN ./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 install
    #编译安装
    
    ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
    #设置环境变量
    
    ADD 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 9000
    #暴露端口
    
    CMD /usr/local/php/sbin/php-fpm -F
    #启动一个进程,占用前台。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    2、配置需要上传的文件

    ①配置php.ini文件

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

    ②配置php-fpm.conf文件

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

    在这里插入图片描述

    ③配置www.conf文件

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

    在这里插入图片描述

    3、生成镜像

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

    在这里插入图片描述

    3、启动镜像容器

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

    在这里插入图片描述

    4、验证php

    docker exec -it php bash
    #登录该容器
    
    ps -aux
    #查看进程
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    五、启动wordpress服务

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

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

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

  • 相关阅读:
    /run/udev/data 磁盘满
    Util 应用框架 UI 全新升级
    使用EPPlus实现C#控件Excel文件内容导入转换
    汽车驾驶智能座舱太阳光模拟器老化试验
    BeanFactory与ApplicationContext
    python的列表
    逻辑漏洞(pikachu)
    交换机和路由器技术-22-OSPF动态路由协议
    【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)
    postman拦截浏览器请求
  • 原文地址:https://blog.csdn.net/m0_57515995/article/details/126894855