您的位置:首页 > 运维架构 > Docker

使用docker部署一套LNMP环境

2019-07-28 21:10 2391 查看

使用docker部署一套LNMP环境


以前要在一个全新的环境部署一套LNMP环境,需要花费很多时间,大部分时间耗在了各种依赖库的处理上,人生苦短,在这种重复机械的事情上耗费太多时间简直是在慢性自杀,普通的人沉浸于此而不自知,厉害的人早已利用新的技术栈,避免自己的时间浪费在这里

docker就是一个很好的解决方案,docker相关的技术资料网络上很多,不是本文的主题,本文主要讲解如何通过docker快速部署一个LNMP环境,并且docker配置文件写好了可移植性很高,你可以在其它机器上直接运行一个命令就能部署好。切记,从重复性的工作解脱出来,交给机器,它干的会比你好。


工作目录准备:

新建一个新的目录,就命名为docker吧,里面分别建立几个软件对应的文件夹,mysql,nginx,php,redis之类的,最终目录结构如下:

/docker/

├── mysql

├── nginx

├── php

└── redis


制作自己的php镜像


mysql,nginx,redis这些服务基本上可以直接用官方的docker镜像,php不行,因为我们肯定要安装一些自己的扩展,比如mysqli,redis,swoole之类的,所以我们需要针对php定制一个自己的镜像

进入php文件夹,编写Dockerfile文件,内容如下:

FROM php:7.2.7-fpm
ENV PHPREDIS_VERSION 4.0.0
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
# timezone
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo 'Asia/Shanghai' > /etc/timezone
# linux lib tool
RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.aliyun\.com\/ubuntu\//g' /etc/apt/sources.list \
        && apt remove lsb-base -y \
        && apt-get update \
        && apt-get install -y \
            curl \
            wget \
            git \
            zip \
            vim \
            libcurl3-dev \
            libz-dev \
            libssl-dev \
            libnghttp2-dev \
            libpcre3-dev \
            libmcrypt-dev \
            libpng-dev \
        && apt-get clean \
        && apt-get autoremove
# php base ext
RUN docker-php-ext-install mysqli \
        && docker-php-ext-install pdo_mysql \
        && docker-php-ext-install gd \
        && docker-php-ext-install  mbstring \
        && docker-php-ext-install bcmath
# swoole ext
RUN wget https://pecl.php.net/get/swoole-4.3.4.tgz -O /tmp/swoole-4.3.4.tgz \
        && pecl install /tmp/swoole-4.3.4.tgz \
        && rm -rf /tmp/swoole-4.3.4.tgz \
        && docker-php-ext-enable swoole
# redis ext
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
        && pecl install /tmp/redis.tar.tgz \
        && rm -rf /tmp/redis.tar.tgz \
        && docker-php-ext-enable redis
RUN useradd -m www && echo "www:www" | chpasswd  www && adduser www sudo
EXPOSE 9000
CMD php-fpm


大家如果需要安装其他扩展,照着上面的格式添加就可以了,可以通过pecl安装,也可以源码安装,执行命令和在Linux安装是一样的,需要注意的是,尽量在一条RUN命令下完成,通过&&来顺序执行多条Linux命令。另外,安装完的扩展源文件记得要删掉,避免最终的镜像太大


build镜像,-t指定镜像名,最后一个点别忘了,表示当前目录,也就是Dockerfile所在的目录

docker build -t php7:7.2.7 .


编写docker-compose.yml文件

docker-compose.yml是docker-compose的默认配置文件,是docker-compose用来编排多个容器的配置文件

回到最开始的docker目录下,新建docker-compose.yml

内容如下:


version: "3"
services:
    nginx:
        image: nginx:1.17. 
        ports:
            - "80:80"
            - "443:443"
            - "8000:8000"
            - "8080:8080"
        volumes:
            - ./nginx:/nginx
            - ./nginx/nginx.conf:/etc/nginx/nginx.conf
            - /home/www:/home/www
        depends_on:
            - php7
        privileged: true
        networks:
            mynetwork:
                ipv4_address: 172.19.0.100
    php:
        image: php7:7.2.7
        restart: always
        ports:
            - "7000:9000"
        volumes:
            - /home/www:/home/www
            - ./php/etc:/usr/local/etc/php
            - ./php/log:/var/log/php
        depends_on:
            - mysql
        restart: always
        command: php-fpm -c /usr/local/etc/php/php.ini -y /usr/local/etc/php/php-fpm.conf -F 
        networks:
            mynetwork:
                ipv4_address: 172.19.0.101
    redis:
        image: redis:4.0
        ports:
            - "6379:6379"
        volumes:
            - ./redis:/redis
            - ./redis/data:/data
        networks:
            mynetwork:
    mysql:
        image: mysql:5.7
        restart: always
        ports:
            - "3306:3306"
        volumes:
            - ./mysql/my.cnf:/etc/mysql/my.cnf
            - ./mysql/data:/var/lib/mysql
            - ./mysql:/mysql
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
        networks:
            mynetwork:
networks:
    mynetwork:
        ipam:
            config:
                - subnet: 172.19.0.0/16



以上就是docker-compose.yml的内容,编写好后,运行

docker-compose up -d

至此,一套LNMP服务就搭起来了。

分析下上面的配置文件

对于nginx,暴露了几个常见的web端口,并且把配置文件,www目录和宿主机的目录绑定,此外还配置了固定的网络和IP地址

对于php,用的是自己制作的镜像,同样的把配置文件,www目录和宿主机目录绑定

下面的mysql和redis也类似


参考资料:

docker官方文档: https://docs.docker.com/ 

docker技术文章: https://www.geek-share.com/cate/docker.html   


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker