Docker配置LNMP环境

目录规划

  • 根目录下新建www目录,集中存放相关的配置文件和web文件

Mysql

  • 从dockerhub拉取mysql镜像
    $ docker pull mysql
  • 实例化镜像,启动一个mysql容器
    $ docker run -p 3306:3306 --name mysql -v /www/mysql/conf:/etc/mysql/conf.d -v /www/mysql/logs:/logs -v /www/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql
    -p 端口映射(主机:容器)
    -v 目录挂载(主机:容器)
    -e MYSQL_ROOT_PASSWORD=123456:初始化mysql root 用户密码
    --privileged 使容器内root拥有真正的的root权限

PHP-FPM

  • 从dockerhub拉取PHP-FPM镜像
    $ docker pull php:fpm
    $ docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v /www/html:/var/www/html -v /www/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /www/php/php.ini:/usr/local/etc/php/php.ini -d php:fpm
    找到容器中php.ini-production的位置
$ docker exec -it php-fpm bash
$ cd /usr/src/
$ xz -d php.tar.xz  
$ tar -xvf  php.tar

复制到本地
$ docker cp php-fpm:/usr/src/php-7.3.10/php.ini-production php.ini

Nginx

  • 从dockerhub拉取nginx镜像并实例化
    $ docker pull nginx
    $ docker run --name nginx -p 80:80 --link php-fpm -v /www/html:/usr/share/nginx/html -v /www/nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx

此时web服务已可以正常运行,并可解析php文件。如果要安装ThinkPHP或phpcms等,还要安装相关的php扩展,因此需要对官方镜像进行重新编译,下面是用到的Dockerfile,这个文件放在/www目录下

# PHP-FPM支持ThinkPHP、phpcms
# v1.0

# Base images
FROM php:7.3.10-fpm

MAINTAINER moore "lee_moore@foxmail.com"

# 设置时区
ENV TZ=Asia/Shanghai
RUN echo $TZ > /etc/timezone

# 将主机配置文件上传至镜像中
ADD php/www.conf   /usr/local/etc/php-fpm.d/www.conf
ADD php/php.ini    /usr/src/php/php.ini

# 更换中科大源(非必须)
RUN echo "deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free" > /etc/apt/sources.list
# 安装相关扩展
RUN apt update && apt install -y 
        libfreetype6-dev 
        libjpeg62-turbo-dev 
        libpng-dev 
    && docker-php-ext-install -j$(nproc) iconv 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
    && docker-php-ext-install -j$(nproc) gd 
    && docker-php-ext-install pdo_mysql 
    && docker-php-ext-install mysqli

#开放9000端口
EXPOSE 9000

删除原来的php-fpm容器,已新编译的php-fpm镜像新启动一个容器

$ cd /www
$ docker build -t php-fpm:v1 ./
$ docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v /www/html:/var/www/html -v /www/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /www/php/php.ini:/usr/local/etc/php/php.ini -d php:fpm:v1

此时LNMP环境部署完毕

原文地址:https://www.cnblogs.com/captainmoore/p/11670642.html