docker部署lnmp环境

文章目录

  • 前期准备:
  • 一、部署mysql
    • 1.1 获取 Mysql 5.7.22 镜像
    • 1.2 启动mysql容器
  • 二、部署php
    • 2.1 获取php 7.2镜像
    • 2.2 启动php 容器
    • 2.3 php的扩展安装
  • 三、部署nginx
    • 3.1 获取nginx:1.14镜像
    • 3.2 启动nginx容器
    • 3.3 编写nginx虚拟主机配置文件,使其支持php
    • 3.4 php测试静态页编写
  • 四、访问浏览器测试

前期准备:

  • 系统环境:centos7
  • 软件环境:docker:18.09.6
  • lnmp环境:nginx:1.14 ,mysql:5.7.22,php:7.2

注:软件版本可自选

一、部署mysql

1.1 获取 Mysql 5.7.22 镜像

[root@localhost ~]# docker pull mysql:5.7.22
5.7.22: Pulling from library/mysql
be8881be8156: Pull complete 
......
c3995dabd1d7: Pull complete 
2b3c2e6bacee: Pull complete 
Digest: sha256:aaba540cdd9313645d892f4f20573e8b42b30e5be71c054b7befed2f7da5f85b
Status: Downloaded newer image for mysql:5.7.22

1.2 启动mysql容器

  • 创建mysql挂载目录
[root@localhost ~]# mkdir -p /opt/app/mysql/mysql
  • 编写mysql挂载配置文件
[root@localhost ~]# vim  /opt/app/mysql/my.cnf

[client]
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
port=3306
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
long_query_time = 5
slow_query_log = 1
slow_query_log_file = slow.log
max_connections=3000
skip-name-resolve
back_log=384
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days = 7
server-id = 123
  • 编写mysql容器启动脚本
[root@localhost ~]# cd /opt/app/mysql/
[root@localhost mysql]# ls
my.cnf  mysql
[root@localhost mysql]# vim mysql-run.sh 
#!/bin/bash

docker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name mysql -p 13306:3306 -v /opt/app/mysql/mysql:/var/lib/mysql -v /opt/app/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.22
  • 为启动脚本赋予执行权限
[root@localhost mysql]# chmod +x mysql-run.sh 

[root@localhost mysql]# ll mysql-run.sh 
-rwxr-xr-x 1 root root 271 8月   6 15:10 mysql-run.sh

  • 启动mysql数据库容器
[root@localhost mysql]# pwd
/opt/app/mysql

[root@localhost mysql]# ./mysql-run.sh 
c6d5d69bcede92f6b5ea685af50277924c76ca04b7808bc7dda48292a1b862b9
  • 查看mysql容器启动情况
[root@localhost php]# docker ps  -a --no-trunc --filter name=^mysql$
CONTAINER ID                                                       IMAGE               COMMAND                         CREATED             STATUS              PORTS                     NAMES
c6d5d69bcede92f6b5ea685af50277924c76ca04b7808bc7dda48292a1b862b9   mysql:5.7.22        "docker-entrypoint.sh mysqld"   18 minutes ago      Up 18 minutes       0.0.0.0:13306->3306/tcp   mysql,php/mysql

二、部署php

2.1 获取php 7.2镜像

[root@localhost mysql]# docker pull php:7.2-fpm
7.2-fpm: Pulling from library/php
f5d23c7fed46: Pull complete 
......
8d5ce70a71c0: Pull complete 
Digest: sha256:e52c0cd1487d76decf8523da5b0a65f2cfd47d8bbbfef077476fff90ceae2fa8
Status: Downloaded newer image for php:7.2-fpm

2.2 启动php 容器

  • 创建php存放文件目录
[root@localhost ~]# mkdir -p /opt/app/php
  • 编写php容器启动脚本
[root@localhost ~]# cd /opt/app/php/
[root@localhost php]# vim php-run.sh
#!/bin/bash

docker run -d -v /opt/app/nginx/html:/var/www/html -p 9000:9000 --link mysql:mysql --name php php:7.2-fpm
  • 为启动脚本赋予执行权限
[root@localhost php]# chmod +x php-run.sh 

[root@localhost php]# ll php-run.sh 
-rwxr-xr-x 1 root root 120 8月   6 15:28 php-run.sh
  • 启动php容器
[root@localhost php]# ./php-run.sh 
7750e24826b74c8fb355cf2abfa27d4eb8a7104672728ad18cd75332e62e2fb9
  • 查看php容器启动情况
[root@localhost php]# docker ps  -a --no-trunc --filter name=^php$
CONTAINER ID                                                       IMAGE               COMMAND                           CREATED             STATUS              PORTS                    NAMES
7750e24826b74c8fb355cf2abfa27d4eb8a7104672728ad18cd75332e62e2fb9   php:7.2-fpm         "docker-php-entrypoint php-fpm"   54 seconds ago      Up 53 seconds       0.0.0.0:9000->9000/tcp   php

php容器启动参数说明

-d 让容器运行在后台

-p 添加主机到容器的端口映射

-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一定非要一样,如果不一样在配置nginx的时候需要注意

-name 容器的名称

-link 容器之间建立起来联系 (需要建立联系的容器名:mysql)

2.3 php的扩展安装

  • 安装php-redis

进入php容器
docker exec -it php bash

安装php-redis命令
pecl install redis && docker-php-ext-enable redis

[root@localhost ~]# docker exec -it php bash
root@7750e24826b7:/var/www/html# pecl install redis && docker-php-ext-enable redis
downloading redis-5.0.2.tgz ...
Starting to download redis-5.0.2.tgz (243,270 bytes)
..................................................done: 243,270 bytes
25 source files, building
running: phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
enable igbinary serializer support? [no] :  //no  或者空格都可以
enable lzf compression support? [no] :      //no  或者空格都可以
building in /tmp/pear/temp/pear-build-defaultuser9cKHej/redis-5.0.2
running: /tmp/pear/temp/redis/configure 
......此处省略
configuration option "php_ini" is not set to php.ini location
You should add "extension=redis.so" to php.ini
  • 查看安装的php插件
    容器内执行:php -m
root@7750e24826b7:/var/www/html# php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
redis   //这就是安装的redis
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

三、部署nginx

3.1 获取nginx:1.14镜像

[root@localhost ~]# docker pull nginx:1.14
1.14: Pulling from library/nginx
27833a3ba0a5: Pull complete 
0f23e58bd0b7: Pull complete 
8ca774778e85: Pull complete 
Digest: sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Status: Downloaded newer image for nginx:1.14

3.2 启动nginx容器

  • 新建nginx挂载目录
[root@localhost ~]# mkdir -p /opt/app/nginx/{conf,html,logs,cert}
  • 编写nginx主配置文件
[root@localhost ~]# cd /opt/app/nginx/

[root@localhost nginx]# vim nginx.conf

worker_processes  4;
user  nginx;
#pid /opt/app/nginx/sbin/nginx.pid;
events {
    worker_connections  409600;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens  off;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    keepalive_timeout  65;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log  error;
    include /etc/nginx/conf.d/*.conf;
}

  • 编写nginx容器启动脚本
[root@localhost nginx]# pwd
/opt/app/nginx


[root@localhost nginx]# vim  nginx-run.sh
#!/bin/bash

docker run -itd --restart=unless-stopped  -v /etc/localtime:/etc/localtime  -v /etc/timezone:/etc/timezone  -p 80:80  --name nginx  -v /opt/app/nginx/html:/usr/share/nginx/html  -v /opt/app/nginx/logs:/var/log/nginx  -v /opt/app/nginx/cert:/etc/nginx/cert  -v /opt/app/nginx/nginx.conf:/etc/nginx/nginx.conf  -v /opt/app/nginx/conf:/etc/nginx/conf.d --link php:phpfpm nginx:1.14

参数解释:

-v 添加目录映射,这里nginx容器的静态页目录最好和php容器中静态页目录映射的目录一致。但是不一定非要一样,如果不一样在配置nginx的时候需要注意

–link 容器之间建立起来联系,此处nginx需要与php容器建立联系(写法:php容器名称:phpfpm),此参数必须写在使用镜像名称之前。

  • 为启动脚本赋予执行权限
[root@localhost nginx]# chmod +x nginx-run.sh 

[root@localhost nginx]# ll nginx-run.sh 
-rwxr-xr-x 1 root root 393 8月   6 16:28 nginx-run.sh
  • 启动nginx容器
[root@localhost nginx]# ./nginx-run.sh 
850e27b026be83886f2deee90d8b36754eb29eeffd1e27e18a6e5724bc29f3f7
  • 查看nginx容器启动情况
[root@localhost nginx]# docker ps -a --no-trunc --filter name=nginx$
CONTAINER ID                                                       IMAGE               COMMAND                    CREATED             STATUS              PORTS                NAMES
850e27b026be83886f2deee90d8b36754eb29eeffd1e27e18a6e5724bc29f3f7   nginx:1.14          "nginx -g 'daemon off;'"   30 seconds ago      Up 29 seconds       0.0.0.0:80->80/tcp   nginx

3.3 编写nginx虚拟主机配置文件,使其支持php

[root@localhost conf]# pwd
/opt/app/nginx/conf


[root@localhost conf]# vim nginx-php.conf 

server {
        listen       80;
        server_name  10.20.29.36;
        location / {
            root /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }
        location ~ \.php$ {
             root    html;
             fastcgi_pass 10.20.29.36:9000;
             fastcgi_index index.php;
             fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
             include fastcgi_params;
        }
        access_log  /var/log/nginx/access.php.log  main;

}

注意!!!

location / {
            root /usr/share/nginx/html;   //修改这里的默认路径为nginx静态页面路径
fastcgi_pass 10.20.29.93:9000;   
#这里可以用容器ID,容器名称,容器IP+端口或者宿主机IP+端口,都可以找到php服务
即:fastcgi_pass 7750e24826b7/php/172.17.0.3/10.20.29.93:9000;   
  • 进入到容器里面重新加载配置文件
[root@localhost conf]# docker exec -it nginx bash   #进入nginx容器
root@850e27b026be:/# nginx -t    #nginx检测配置文件是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@850e27b026be:/# nginx -s reload   #平滑重启nginx,不影响nginx服务使用

3.4 php测试静态页编写

在主机/opt/app/nginx/html 目录下创建php测试页面,会直接映射到容器里面

[root@localhost html]# pwd
/opt/app/nginx/html

[root@localhost html]# vim index.php



四、访问浏览器测试

看到php静态测试页面说明搭建成功了!

你可能感兴趣的:(docker,docker,容器,lnmp)