docker搭建lnmp环境

栏目: 后端 · 发布时间: 6年前

内容简介:<!-- TOC --><!-- /TOC -->有收获的话请

<!-- TOC -->

    • 一、Dockerfile定制镜像
    • 三、docker-compose编排lnmp环境

<!-- /TOC -->

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

一、Dockerfile定制镜像

# FROM 指定基础镜像
FROM 镜像

FROM php:7.2-fpm

# RUN 执行
RUN <命令>
or
RUN ["可执行文件", "参数1", "参数2"]

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
RUN ["php", "-S", "0.0.0.0:8080"]

# COPY 复制文件
COPY <源路径>... <目标路径>

COPY swoole-4.2.10.tgz /home
COPY 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

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

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

[mysqld]

default-time-zone = '+8:00'
FROM mysql:5.5

COPY my.cnf /etc/mysql/conf.d

EXPOSE 3306

2、redis

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

bind 0.0.0.0
requirepass root
FROM redis:latest

COPY redis.conf /usr/local/etc/redis/redis.conf

CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

EXPOSE 6379

3、mongo

mongodb我们没有特殊处理

FROM mongo:latest

EXPOSE 27017

4、nginx

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

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

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

FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf

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

# swoole
COPY swoole-4.2.10.tgz /home
RUN 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: bridge

volumes: 
  mysql: 
    driver: local
  mongo:
    driver: local
  redis:
    driver: local

services: 
  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

四、参考


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具