docker使用php搭建环境,有它就够了

  • docker搭建lnmp环境,php 7.2 + nginx latest + mysql 5.7 + redis 4

  • 不限制系统(mac、linux、windows专业版、虚拟机的linux等),可灵活定制和调整php + nginx + mysql + redis

前言

使用前,默认你已经安装了 dockerdocker-compose,或者windows/mac的docker桌面版

先使用阿里云镜像加速器

阿里云镜像加速器

进入之后登录,然后进到 [ 管理中心 ],找到镜像加速器,里面有教你怎么配置本地的加速器,不再赘述

克隆此包

 git clone  https://github.com/chichoyi/dnmp.git

修改docker-compose.yml

  • docker搭建lnmp环境,php 7.2 + nginx latest + mysql 5.7 + redis 4 + ...

参数说明

nginx:
  image: nginx:latest
  container_name: nginx
  hostname: nginx
  ports:
    - "80:80"
  volumes:
    - /data/www:/www  # /data/www 这个是宿主机的目录,可以修改指向你的代码文件夹,比如 /mnt/hgfs/www
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro  # 这里是配置文件,不多,可以打开看看
    - ./nginx/conf.d/:/etc/nginx/conf.d/:ro
  links:
    - php:PHP-FPM  # php容器的别名,nginx发送给php需要用到的,默认即可
  networks:
    - lnmp
  
php:
  build: ./phpfpm  # Dockerfile 文件地址
  container_name: php
  hostname: php
  ports:
    - "9000:9000"
  links:
    - mysql:mysql
    - redis:redis
  volumes:
    - /data/www:/www  # /data/www 这个是宿主机的目录,可以修改指向你的代码文件夹,比如 /mnt/hgfs/www
    - ./phpfpm/conf/:/usr/local/etc/php/conf.d
  networks:
    - lnmp
    
    # 注意,nginx和php挂载出来的宿主机目录一定要一致(/data/www),不然没法访问php文件

mysql:
  image: mysql:5.7
  container_name: mysql
  hostname: mysql
  ports:
    - "3306:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=root  #数据库的初始化密码,这里可以指定修改成你自己的
    networks:
      - lnmp
        
redis:
  image: redis:4
  container_name: redis
  hostname: redis
  ports:
    - "6379:6379"
  networks:
    - lnmp
    
networks:
  lnmp:
    driver: bridge

修改完之后执行命令

cd dnmp

docker-compose build

# 修改代码目录
vi docker-compose.yml
# 把42行和54行的 /Users/chenyinshan/code 修改为你本机的代码目录

vi ./nginx/conf.d/defualt.conf   修改你自己的虚拟域名和目录,容器的目录默认是/www,

docker-compose up -d

//如果没有目录的话请自己创建相关目录

第一次执行需要花点时间下载镜像

php连接mysql需要在本机hosts文件添加域名映射,例如:

127.0.0.1 mysql
127.0.0.1 nginx
127.0.0.1 php
127.0.0.1 redis

这样就不用去查找mysql的容器的IP了

# docker-compose up -d 的时候可能一些服务没有跑起来,
# 比如mysql,可能你给的dnmp目录权限不够,要给充足权限

sudo chmod -R 777 dnmp

如何composer安装php项目依赖包

docker run --rm --interactive --tty \
--volume $PWD:/app \
composer install --ignore-platform-reqs --no-scripts
  • docker 会自动拉取composer镜像然后在当前目录执行composer命令
  • --ignore-platform-reqs --no-scripts 这条命令是忽略扩展要求

docker php 如何安装扩展参考

php的dockerfile讲解

FROM php:7.2.2-fpm

ENV PHPREDIS_VERSION 3.1.3

#for redis and mysql
RUN curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz \
    && tar xfz /tmp/redis.tar.gz \
    && rm -r /tmp/redis.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis \
    && docker-php-ext-install redis \
        pdo pdo_mysql \
        bcmath

#for gd
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

# for grpc extention
RUN  apt-get install -y \
        libmemcached-dev zlib1g-dev \
    && pecl install grpc \
    && pecl install protobuf \
    && rm -rf /usr/src/php

# for zip
RUN apt-get update \
    && apt-get install -y --no-install-recommends libzip-dev \
    && rm -r /var/lib/apt/lists/* \
    && docker-php-ext-install -j$(nproc) zip
  • 定制化的php扩展,比如grpc扩展,你的项目不需要你可以注释掉,然后重新docker-compose build

  • 安装php扩展之前,优先去看官方是否有提供,比如这样的docker-php-ext-install

  • 如果docker php官方没有提供,那就需要自己去写dockerfile安装了,比如在./phpfpm/Dockerfile文件里面的rabbitmq,写出这些命令行的方法是,需要进去php容器,然后按照rabbitmq的安装方式一步一步去验证我的命令和依赖,最后才把命令总结出来写到dockerfile文件

  • 简书有人整理的安装扩展

命令参考

# 你自己修改了docker-compose文件或Dockerfile文件的话,请执行
docker-compose build

# 开启 dnmp 服务(-d 后台运行)
docker-compose up -d

# 重启 dnmp 服务
docker-compose restart

# 关闭 dnmp 服务
docker-compose down

# 如果修改或增加了 nginx 服务配置
docker restart nginx

tip

使用的都是官方的镜像,如有疑问,欢迎提出指正

contact me

email: chichoyi@163.com

你的支持

如果这篇文章对你有用,请在GitHub点亮小星星

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容