博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker搭建lnmp环境
阅读量:6239 次
发布时间:2019-06-22

本文共 3504 字,大约阅读时间需要 11 分钟。

<!-- TOC -->

<!-- /TOC -->

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

一、Dockerfile定制镜像

# FROM 指定基础镜像FROM 镜像FROM php:7.2-fpm# RUN 执行RUN 
<命令>
orRUN ["可执行文件", "参数1", "参数2"]RUN echo '

Hello, Docker!

' > /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
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 3306

2、redis

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

bind 0.0.0.0requirepass root
FROM redis:latestCOPY redis.conf /usr/local/etc/redis/redis.confCMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]EXPOSE 6379

3、mongo

mongodb我们没有特殊处理

FROM mongo:latestEXPOSE 27017

4、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 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会解压缩

# 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.tgz

6、完整版

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 — 从入门到实践

转载地址:http://lgzia.baihongyu.com/

你可能感兴趣的文章
北大AI公开课2019 | 驭势科技吴甘沙:AI时代的自动驾驶趋势
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Docker4Dev #7 新瓶装老酒 – 使用 Windows Container运行ASP.NET MVC 2 + SQLExpress 应用
查看>>
亚马逊一口气发布了9款机器学习产品
查看>>
Visual Studio 2017 15.9 Previews扩展C++调试功能
查看>>
别了MongoDB?
查看>>
Codeweavers的丰田模式
查看>>
【译文】Node.js官方文档(前言&目录)
查看>>
用关系型NoSQL回到未来
查看>>
Kotlin 1.2引入多平台项目特性
查看>>
隐私和安全是macOS Mojave和Safari 12的第一要务
查看>>
静态网站生成器将会成为下一个大热门
查看>>
Microsoft 推出在AzureApp Service上支持Windows容器的公开预览版
查看>>
杠上Spark、Flink?Kafka为何转型流数据平台
查看>>
运用供应链管理实现更快速、更高质量的交付
查看>>
刚刚,ACM宣布三位深度学习之父共同获得2018年图灵奖!
查看>>
Python将迁移到GitHub
查看>>
《JavaScript Cookbook 2nd》之 Function
查看>>
Facebook冷存储系统
查看>>
微软发布Azure Storage不可变存储功能的正式版本
查看>>