docker搭建lnmp环境

2019-01-18 13:56:25   docker

  docker   lnmp  

<!-- TOC -->

<!-- /TOC -->

有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连

一、Dockerfile定制镜像

  1. # FROM 指定基础镜像
  2. FROM 镜像
  3. FROM php:7.2-fpm
  4. # RUN 执行
  5. RUN <命令>
  6. or
  7. RUN ["可执行文件", "参数1", "参数2"]
  8. RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  9. RUN ["php", "-S", "0.0.0.0:8080"]
  10. # COPY 复制文件
  11. COPY <源路径>... <目标路径>
  12. COPY swoole-4.2.10.tgz /home
  13. COPY nginx.conf /etc/nginx/nginx.conf
  14. # ADD 复制文件或目录,如果是.tgz,会被解压缩
  15. ADD <源路径>... <目标路径>
  16. ADD nginx.conf /etc/nginx/nginx.conf
  17. # CMD 容器启动
  18. CMD echo $HOME => CMD [ "/bin/sh", "-c", "echo $HOME" ]
  19. CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
  20. # ENTRYPOINT 入口点
  21. ENTRYPOINT ["docker-entrypoint.sh"]
  22. 存在 ENTRYPOINT 后,CMD 的内容将会作为参数传给 ENTRYPOINT
  23. # ENV 环境变量
  24. ENV <key> <value>
  25. ENV MYSQL_ROOT_PASSWORD root
  26. # ARG与ENV差不多
  27. ARG 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的
  28. ENV MYSQL_ROOT_PASSWORD root
  29. # VOLUME 匿名卷
  30. VOLUME ["<路径1>", "<路径2>"...]
  31. VOLUME ["/data"]
  32. # EXPOSE 暴露端口
  33. EXPOSE <端口1> [<端口2>...]
  34. EXPOSE 80 443
  35. # WOEKDIR 指定工作目录,进入容器后的落地目录
  36. WORKDIR <工作目录路径>
  37. WORKDIR /var/www
  38. # USER 指定当前用户
  39. USER <用户名>
  40. USER root

二、docker-compose

详细请查看 https://docker_practice.gitee.io/compose/

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

三、docker-compose编排lnmp环境

1、mysql

这里我们使用了mysql5.5版本,没其它用意,相比5.7以上版本,占内存和硬盘最小的一个版本

我们准备了一个my.cnf作为额外配置,这里我修改了数据库的时区

  1. [mysqld]
  2. default-time-zone = '+8:00'
  1. FROM mysql:5.5
  2. COPY my.cnf /etc/mysql/conf.d
  3. EXPOSE 3306

2、redis

我们使用准备的配置文件redis.conf覆盖容器默认启动的配置文件,修改了ip绑定密码

  1. bind 0.0.0.0
  2. requirepass root
  1. FROM redis:latest
  2. COPY redis.conf /usr/local/etc/redis/redis.conf
  3. CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
  4. EXPOSE 6379

3、mongo

mongodb我们没有特殊处理

  1. FROM mongo:latest
  2. EXPOSE 27017

4、nginx

我们准备了一份nginx.conf和虚拟目录conf.d,为了以后可以动态的配置网站的代理和负载均衡

还有一个日志目录,放在外层logs目录里面,记录nginx的访问日志

特别注意的是fastcgi_pass php:9000;而不是fastcgi_pass 127.0.0.1:9000;,目前自己也没明白

  1. FROM nginx:alpine
  2. COPY nginx.conf /etc/nginx/nginx.conf
  3. EXPOSE 80

5、php

php算是这里面最难搞定的,因为我们需要额外的添加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.iniopcache.ini

比如swoole扩展安装,记得安装包用完后清理,还有得用COPY命令,ADD会解压缩

  1. # swoole
  2. COPY swoole-4.2.10.tgz /home
  3. RUN pecl install /home/swoole-4.2.10.tgz && \
  4. docker-php-ext-enable swoole && \
  5. rm /home/swoole-4.2.10.tgz

6、完整版

  1. version: '3'
  2. networks:
  3. frontend:
  4. driver: bridge
  5. backend:
  6. driver: bridge
  7. volumes:
  8. mysql:
  9. driver: local
  10. mongo:
  11. driver: local
  12. redis:
  13. driver: local
  14. services:
  15. php:
  16. build: ./php
  17. volumes:
  18. - ${WORKER_DIR}:/var/www
  19. ports:
  20. - 9100:9000
  21. depends_on:
  22. - mysql
  23. - redis
  24. - mongo
  25. networks:
  26. - backend
  27. nginx:
  28. build: ./nginx
  29. volumes:
  30. - ${WORKER_DIR}:/var/www
  31. - ./logs/nginx:/var/log/nginx
  32. - ./nginx/conf.d:/etc/nginx/conf.d
  33. ports:
  34. - 8000:80
  35. depends_on:
  36. - php
  37. networks:
  38. - frontend
  39. - backend
  40. mysql:
  41. build: ./mysql
  42. environment:
  43. - MYSQL_ROOT_PASSWORD=root
  44. volumes:
  45. - ${DATA_PATH}/mysql:/var/lib/mysql
  46. ports:
  47. - 3310:3306
  48. networks:
  49. - backend
  50. mongo:
  51. build: ./mongo
  52. environment:
  53. - MONGO_INITDB_ROOT_USERNAME=root
  54. - MONGO_INITDB_ROOT_PASSWORD=root
  55. ports:
  56. - 27010:27017
  57. volumes:
  58. - ${DATA_PATH}/mongo:/data/db
  59. networks:
  60. - backend
  61. redis:
  62. build: ./redis
  63. volumes:
  64. - ${DATA_PATH}/redis:/data
  65. ports:
  66. - 6310:6379
  67. networks:
  68. - backend

四、参考