<!– TOC –>docker搭建lnmp环境一、Dockerfile定制镜像二、docker-compose三、docker-compose编排lnmp环境1、mysql2、redis3、mongo4、nginx5、php6、完整版四、参考<!– /TOC –>有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连代码仓库docker搭建lnmp环境一、Dockerfile定制镜像# FROM 指定基础镜像FROM 镜像FROM php:7.2-fpm# RUN 执行RUN <命令>orRUN [“可执行文件”, “参数1”, “参数2”]RUN echo ‘<h1>Hello, Docker!</h1>’ > /usr/share/nginx/html/index.htmlRUN [“php”, “-S”, “0.0.0.0:8080”]# COPY 复制文件COPY <源路径>… <目标路径>COPY swoole-4.2.10.tgz /homeCOPY nginx.conf /etc/nginx/nginx.conf# ADD 复制文件或目录,如果是.tgz,会被解压缩ADD <源路径>… <目标路径>ADD nginx.conf /etc/nginx/nginx.conf# CMD 容器启动CMD echo $HOME => CMD [ “/bin/sh”, “-c”, “echo $HOME” ]CMD [ “redis-server”, “/usr/local/etc/redis/redis.conf” ]# ENTRYPOINT 入口点ENTRYPOINT [“docker-entrypoint.sh”]存在 ENTRYPOINT 后,CMD 的内容将会作为参数传给 ENTRYPOINT# ENV 环境变量ENV <key> <value>ENV MYSQL_ROOT_PASSWORD root# ARG与ENV差不多ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的ENV MYSQL_ROOT_PASSWORD root# VOLUME 匿名卷VOLUME ["<路径1>", “<路径2>”…]VOLUME ["/data"]# EXPOSE 暴露端口EXPOSE <端口1> [<端口2>…]EXPOSE 80 443# WOEKDIR 指定工作目录,进入容器后的落地目录WORKDIR <工作目录路径>WORKDIR /var/www# USER 指定当前用户USER <用户名>USER root二、docker-compose详细请查看 https://docker_practice.gitee…服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。三、docker-compose编排lnmp环境1、mysql这里我们使用了mysql5.5版本,没其它用意,相比5.7以上版本,占内存和硬盘最小的一个版本我们准备了一个my.cnf作为额外配置,这里我修改了数据库的时区[mysqld]default-time-zone = ‘+8:00’FROM mysql:5.5COPY my.cnf /etc/mysql/conf.dEXPOSE 33062、redis我们使用准备的配置文件redis.conf覆盖容器默认启动的配置文件,修改了ip绑定和密码bind 0.0.0.0requirepass rootFROM redis:latestCOPY redis.conf /usr/local/etc/redis/redis.confCMD [ “redis-server”, “/usr/local/etc/redis/redis.conf” ]EXPOSE 63793、mongomongodb我们没有特殊处理FROM mongo:latestEXPOSE 270174、nginx我们准备了一份nginx.conf和虚拟目录conf.d,为了以后可以动态的配置网站的代理和负载均衡还有一个日志目录,放在外层logs目录里面,记录nginx的访问日志特别注意的是fastcgi_pass php:9000;而不是fastcgi_pass 127.0.0.1:9000;,目前自己也没明白FROM nginx:alpineCOPY nginx.conf /etc/nginx/nginx.confEXPOSE 805、phpphp算是这里面最难搞定的,因为我们需要额外的添加php扩展,虽然php的docker官方提供了docker-php-ext-configure, docker-php-ext-install, docker-php-ext-enable,还是有些扩展需要通过手动编译或者pecl安装由于pecl官网下载慢,我们事先下载好了几个需要的扩展php-fpm用的是debian的linux系统,下载也很慢,我们备用了阿里云的镜像sources.list我们还准备了php的默认配置php.ini和opcache.ini比如swoole扩展安装,记得安装包用完后清理,还有得用COPY命令,ADD会解压缩# swooleCOPY swoole-4.2.10.tgz /homeRUN pecl install /home/swoole-4.2.10.tgz && \ docker-php-ext-enable swoole && \ rm /home/swoole-4.2.10.tgz6、完整版version: ‘3’networks: frontend: driver: bridge backend: driver: bridgevolumes: mysql: driver: local mongo: driver: local redis: driver: localservices: php: build: ./php volumes: - ${WORKER_DIR}:/var/www ports: - 9100:9000 depends_on: - mysql - redis - mongo networks: - backend nginx: build: ./nginx volumes: - ${WORKER_DIR}:/var/www - ./logs/nginx:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d ports: - 8000:80 depends_on: - php networks: - frontend - backend mysql: build: ./mysql environment: - MYSQL_ROOT_PASSWORD=root volumes: - ${DATA_PATH}/mysql:/var/lib/mysql ports: - 3310:3306 networks: - backend mongo: build: ./mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=root ports: - 27010:27017 volumes: - ${DATA_PATH}/mongo:/data/db networks: - backend redis: build: ./redis volumes: - ${DATA_PATH}/redis:/data ports: - 6310:6379 networks: - backend四、参考Docker — 从入门到实践laradockDocker在PHP项目开发环境中的应用