Docker在PHP中的实践过程
来源:互联网 发布:2015乘用车销量数据 编辑:程序博客网 时间:2024/05/18 13:06
最近微服务很火,很多人都在尝试,我们公司也在这段时间尝试着来时间微服务化,其中就涉及到Docker。
在实践docker中踩了很多坑,也对Docker有了更多的认识,下面记录一下。
Docker在打包Spring boot项目时候,因为Spring boot内部集成了tomcat并且提供了直接打包成jar包的方式,Spring boot如何打包。
Dockerfile文件如下:
FROM java:8COPY target/your-project-name.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]
因为公司中还有一个之前的PHP项目,所以也需要对PHP进行打包,查了很多资料,最后在实践中发现,PHP项目需要一个nginx来管理网络,用如何的Dockerfile文件打包的话就会有问题。
FROM php:7.0-cliRUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng12-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gdFROM php:7.1-fpmRUN pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redisRUN docker-php-ext-install mysqli pdo pdo_mysqlEXPOSE 80COPY . /phpWORKDIR /php
经过再三查找资料,发现这么一篇文章:
http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/
在里面找到了解决办法,使用docker-compose就好了,docker-compose.yml文件如下:
version: '2'services: web: image: nginx:latest ports: - "8080:80" volumes: - ./:/php - ./site.conf:/etc/nginx/conf.d/default.conf networks: - code-network php: image: php:fpm volumes: - ./:/php networks: - code-networknetworks: code-network: driver: bridge
上面提到的site.conf文件如下:
server { listen 80; index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /php; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }}
直接在命令行执行:
$sudo docker-compose up
就可以看看到运行的结果了,可是因为我们是直接部署到阿里云容器服务上面的,docker-compose这种方式就有了缺陷,因为阿里云容器服务不支持server
这种方式,不得已最终经过查询,找到了:
https://hub.docker.com/r/richarvey/nginx-php-fpm/
直接使用如下Dockerfile就可以了:
FROM richarvey/nginx-php-fpm:latestMAINTAINER Ric Harvey <ric@ngd.io>ENV PHPREDIS_VERSION 3.0.0RUN mkdir -p /usr/src/php/ext/redis \ && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \ && echo 'redis' >> /usr/src/php-available-exts \ && docker-php-ext-install redisEXPOSE 80ADD ./ /var/www/html/
既然当初选择了Docker这种方式,就要想办法吃透这门技术,否则在生产环境中的话出了问题就麻烦了。以上对与PHP的Docker化的实践过程,盯着一行行的日志信息查找原因,因为对PHP不是特别熟,还向PHP的同事请教了很多问题。
记录下来面的日后再遇到,虽然以上内容没有针对每个Docker的技术点进行介绍,找时间把每个技术点都记录下来。简单来说就是,PHP必须要搭配nginx使用。
- Docker在PHP中的实践过程
- Windows 10中的Docker实践
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- Docker在PHP项目开发环境中的应用
- 理论与实践在创新过程中的作用
- Docker在云环境中的应用实践初探:优势、局限性与效能评测
- 在阿里云centos6.5系统上用docker搭建php环境的失败过程
- Docker在Ubuntu的部署实践
- Docker在Ubuntu的部署实践
- docker实践(1) 在ubuntu15.10里面安装docker
- Docker实践 - 安装Docker并在容器里运行tomcat
- Docker实践-安装Docker并在容器里运行tomcat
- php中json在使用过程中的中文乱码问题解决
- linux环境下监控日志的变化命令 tail -f
- OkHttp 网络请求
- 顺序表应用1:多余元素删除之移位算法
- springboot-shiro
- SSH spring+springmvc+hibernate+maven 整合详解
- Docker在PHP中的实践过程
- HDU 6215 链表
- Java之List&Set&Map详解
- Batch Normalization:加速神经网络训练的通用手段
- 输入信息,按‘回车键’,自动登录的代码
- 将前台获得的转义符编码转回转义符
- 宝贵的成长
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- 微信顽固缓存解决之道