资讯专栏INFORMATION COLUMN

docker搭建lnmp环境

beanlam / 1828人阅读

摘要:项目由一组关联的应用容器组成的一个完整业务单元,在文件中定义。

docker搭建lnmp环境

一、Dockerfile定制镜像

二、docker-compose

三、docker-compose编排lnmp环境

1、mysql

2、redis

3、mongo

4、nginx

5、php

6、完整版

四、参考

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

代码仓库

docker搭建lnmp环境

一、Dockerfile定制镜像
# FROM 指定基础镜像
FROM 镜像

FROM php:7.2-fpm

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

RUN echo "

Hello, Docker!

" > /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 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.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
四、参考

Docker — 从入门到实践

laradock

Docker在PHP项目开发环境中的应用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28052.html

相关文章

  • 分解dockerlnmp环境搭建中的作用

    摘要:如果不用我们可能将上述讲的命令每搭建一次就需要执行一遍,有没有能统一管理的有,就是在环境搭建中的作用快速创建镜像,快速创建并运行容器,实现统一管理。 前言 初学者在dcoker学习过程中,可能不太清楚docker中那么多的命令,参数,工具在lnmp环境搭建中起了什么作用,下面跟着我来熟悉一下。(本文面向的是不怎么熟悉linux的:phper) 镜像,容器,仓库 镜像:Docker 镜像...

    tommego 评论0 收藏0
  • docker 搭建lnmp开发环境

    摘要:学习心得前言耗时一周零三天,终于用搭建起自己的开发环境。来搭建一下环境,然后,桌面没了。作为过来人,我只想说,一定要只做一件事,不要过多的去研究,我们只是想搭建本地运行环境。 docker学习心得 前言 耗时一周零三天,终于用docker搭建起自己的开发环境。详细过程:请参考分解docker在lnmp环境搭建中的作用showImg(https://segmentfault.com/im...

    Hydrogen 评论0 收藏0
  • docker 搭建lnmp环境

    摘要:基础命令关于搜索下载查看或者删除单个删除多个删除查看信息占用关于查看重启停止杂项命令网络相关清除网络缓存查看网络列表查看详情挂载目录清除缓存查看列表查看详情系统相关系统信息查看占用清除所有包含构建失败的镜像没有被使用的网络配 docker基础命令 关于images 搜索 docker search php 下载 docker pull php:7.3.6-fpm-alpine3....

    msup 评论0 收藏0
  • docker 搭建lnmp环境

    摘要:基础命令关于搜索下载查看或者删除单个删除多个删除查看信息占用关于查看重启停止杂项命令网络相关清除网络缓存查看网络列表查看详情挂载目录清除缓存查看列表查看详情系统相关系统信息查看占用清除所有包含构建失败的镜像没有被使用的网络配 docker基础命令 关于images 搜索 docker search php 下载 docker pull php:7.3.6-fpm-alpine3....

    cucumber 评论0 收藏0
  • CentOS 7 使用 Docker 快速搭建 LNMP 环境

    摘要:配置文件配置配置文件配置文件配置文件太大就不贴了,直接下载然后本地修改吧。不会使用的使用命令进行替换。是一种推出的免费的公共镜像库服务。本地对镜像打提交镜像到仓库参考Docker 安装安装 Dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun配置国内镜像mkdir -p /etc/docker cat...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<