本篇文章扣丁学堂PHP培训小编以及 各人分享一下怎么样 用Docker搭建自己的PHP开发环境,文章中会有代码列出供各人参考。关于 PHP感喜欢 的小同伴现在 就随扣丁学堂的小编一起 来相识一下吧。 起首,我们 来看一下,我创立 的这个Dockerfile名目 ,我大年夜 概分红 为了 上面 的目次(当然 这个是自己定的,实在没有 是要求这么去排版你的文件): zPhal-dockerfiles app/ index.php phpinfo.php data/ .gitignore files/ mysql/ conf.d/ mysql-file.cnf Dockerfile nginx/ conf.d/ default.conf zphal.conf Dockerfile nginx.conf php/ pkg/ .gitignore Dockerfile php.ini php-dev.ini php-fpm.conf redis/ Dockerfile docker-compose.yml logs/ .gitgnore README.md 在 这个名目 里,我用到PHP、MySQL、Nginx、Redis以及 Composer、Phalcon拓展等。 总的来说,我们 做这件事有三个流程:编写好各个软件的Dockerfile;编写好配置 文件;颠末 docker-compose处理惩罚全副 的Dockerfile,包罗 将配置 配置 文件扔出来 Dockerfile文件将构建的镜像中。 编写Dockerfile文件 PHP 上面 是PHP的Dockerfile: FROM php:7.2-fpm MAINTAINER goozp "gzp@goozp.com"配置 时区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 更新装置 依赖包以及 PHP焦点拓展 RUN apt-get update && apt-get install -y \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install zip \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install opcache \ && docker-php-ext-install mysqli \ && rm -r /var/lib/apt/lists/* 将事后 下载好的拓展包从宿主机拷贝出来 COPY ./pkg/redis.tgz /home/redis.tgz COPY ./pkg/cphalcon.tar.gz /home/cphalcon.tar.gz 装置 PECL 拓展,这里我们 装置 的是Redis RUN pecl install /home/redis.tgz && echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini 装置 第三方拓展,这里是 Phalcon 拓展 RUN cd /home \ && tar -zxvf cphalcon.tar.gz \ && mv cphalcon-* phalcon \ && cd phalcon/build \ && ./install \ && echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini 装置 Composer ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH RUN rm -f /home/redis.tgz \ rm -f /home/cphalcon.tar.gz WORKDIR /data Write Permission RUN usermod -u 1000 www-data 第一行界说了底子镜像,这里我们 用了PHP 7.2的fpm版本,这里第二行界说了一个保护 者。 接下来 界说了时区,在 每一 个Dockerfile都界说了这一句,重要是为了使全副 的容器的工夫 都与宿主机同步,实在我们 可以在 docker-composer.yml文件中这么界说: services: php-fpm: volumes: - /etc/localtime:/etc/localtime:ro但是在 非Linux体系,比如Windows中运行 时,我们 没有 能取到/etc/localtime,为了更大年夜 兼容全副 平台,我把工夫 同步写到Dockerfile中。 接下来 装置 一些拓展,实在装置 拓展的进程 类似于我们 徒手在 Linux中装置 PHP拓展,值得 一提的是Composer。我将Composer直接装置 在 了php-fpm的镜像中,实在官方也供给 了Composer的镜像,拉取Composer镜像实验也可以或许 到达目的,由于我们 利用Composer只是为了实验Composer下令来办理 我们 的包,假如Composer独自 是一个容器的话,我们 在 没有 历时 ,还可以将容器关失落 ;但是在 这里,我直接将Composer装进php-fpm镜像中,重要是我的名目 装置 了一些PHP拓展,在 编写composer.json文件时,我界说了extension的依赖,如许Composer实验时会查抄环境能否 装置 了这些依赖,全副 假如我直接用Composer镜像的话,还需要 把我用的拓展装置 到镜像里,就贫困多了,以是我直接在 PHP镜像中就把这个事做了,实在没什么差别 ,取决于你怎么样 用。 Nginx 上面 是Nginx的Dockerfile: FROM nginx:1.12set timezome ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 这个就简朴多了,我只配置 了一个工夫 。由于我没有 需要 装置 别的的东西 ,可以直接利用官方的镜像。 当然 ,我们 需要 修正 配置 文件,只需 事先 写好配置 文件就行,末了在 docker-compose.yml 文件中,将配置 文件扔出来 ,这个上面 会讲,包罗 PHP的配置 文件,MySQL的配置 文件,都是非常 的。 MySQL 上面 是 MySQL 的 Dockerfile: FROM mysql:5.7set timezome ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone MySQL也没有 什么特殊的地方 ,直接利用官方的镜像。 Redis 上面 是 Redis 的,也直接利用官方镜像: FROM redis:3.2set timezome ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 编写配置 文件 怎么样 处理惩罚配置 文件呢,我将配置 文件举行归类,PHP的配置 文件放在 PHP目次下,Nginx的配置 放在 Nginx目次下,至于要没有 要再新建一个子文件夹就看环境了,比如conf.d文件夹。 上面 以Nginx配置 文件为例,起首Nginx目次是如许的: nginx/ conf.d/ default.conf zphal.conf Dockerfile nginx.conf 除 了nginx.conf外,另有一个子文件夹conf.d用来寄存 全副 的域名配置 文件,在 Linux下搭建过PHP环境的该当 都比力 熟悉。这些配置 文件就是我们 到工夫 要传出来 容器中的文件,我们 实在没有 会在 宿主机利用这些文件。 以是需要 注意的最紧张一点就是,配置 文件中呈现 的途径 是容器底细 况的途径 ,而没有 是宿主机的途径 ,每一 个容器内都有一个运行 环境,都是一台微型小体系,这些途径 都是容器内的途径 。我们 可以颠末 挂载与容器内通讯来同步文件,在 下令行启动容器也需要 挂载文件途径 ,而现在 挂载这一步我们 也用docker-compose来办理 。 上面 是一个配置 文件示例: server { listen 80 default; index index.html index.htm; server_name localhost docker; root /data/www; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; } location ~ \.php { include fastcgi_params; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www/$fastcgi_script_name; } } 而root /data/www中,/data/www途径 ,是到工夫 Nginx容器的途径 ,而没有 因此 后 在 利用的宿主机的途径 ,以是到工夫 我们 要挂载Web步伐放的地位 到这个途径 。 编写 docker-compose.yml 在 PHP、Nginx等目次的同级,我们 创立 一个docker-compose.yml,我们 在 实验docker-compose干系下令时,会自动找到这个文件,并根据 内里的内容来实验。 接上面 Nginx的例子,我们 先谈挂载,由于这是最紧张的一步。在 docker-compose.yml中,Nginx的部分: build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;' 有一个volumes参数,这里就是我们 要挂载的目次的干系配置 ,第一条我们 将../app挂载到/data/www傍边 ,也是我们 配置 文件中界说的默认 监听的root,而APP目次是我们 宿主机中的一个目次,颠末 如许挂载我们 可以直接将我们 的名目 文件放到APP中,Docker会帮你传输到容器内的/data/www目次下。 别的的参数: build界说了你的Dockerfile在 那边,假如没有 写Dockerfile可以没有 用build,可以用images参数界说官方镜像,比如image:mysql:5.7; depends_on体现将依赖别的镜像,比如Nginx依赖php-fpm,没有 它我Nginx无法 玩; links界说毗邻 ,比如要毗邻 到php-fpm容器,就是php-fpm:php-fpm,反面是别名 ; ports体现端口映射,80:80体现将80端口映射到宿主机的80端口; restart重启,restart: always体现将自动重启; command是自动实验的下令; …… 参数许多,更多的可以参考官方文档。 上面 是一个齐备 的 docker-compose.yml 文件: version: '3.2' services: php-fpm: build: ./php/ ports: - "9000:9000" links: - mysql-db:mysql-db - redis-db:redis-db volumes: - ../app:/data/www:rw - ./php/php-dev.ini:/usr/local/etc/php/php.ini:ro - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro - ../logs/php-fpm:/var/log/php-fpm:rw restart: always command: php-fpm nginx: build: ./nginx depends_on: - php-fpm links: - php-fpm:php-fpm volumes: - ../app:/data/www:rw - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../logs/nginx:/var/log/nginx ports: - "80:80" - "8080:8080" - "443:443" restart: always command: nginx -g 'daemon off;' mysql-db: build: ./mysql ports: - "3306:3306" volumes: - ../data/mysql:/var/lib/mysql:rw - ../logs/mysql:/var/lib/mysql-logs:rw - ./mysql/conf.d:/etc/mysql/conf.d:ro environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: zphaldb MYSQL_USER: zphal MYSQL_PASSWORD: zphal123 restart: always command: "--character-set-server=utf8" redis-db: build: ./redis ports: - "6379:6379" volumes: - ../data/redis:/data restart: always 以上就是扣丁学堂PHP在 线学习小编给各人分享的怎么样 用Docker搭建自己的PHP开发环境,渴望关于 小同伴们有所资助。想要相识更多内容的小同伴可以登录扣丁学堂官网征询 ,扣丁学堂是业余 的PHP培训机构,没有 但有业余 的教师 以及 与时俱进的课程体系,另有少量 的PHP在 线视频供学员没有 雅 看学习。喜欢PHP开发想要学习的小同伴快快办法吧。 来源:https://www.jianshu.com/p/ed61904face0 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |