yulu

配置php5.6.30 扩展 Dockerfile

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
FROM php:5.6-fpm
RUN apt-get update && apt-get install -y\
libz-dev \
libmemcached-dev \
libmcrypt-dev \
libssl-dev \
git
RUN apt-get install wget -y
#install nginx 1.10.3
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
ENV NGINX_VERSION 1.10.3-1~jessie
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
&& echo "deb http://nginx.org/packages/debian/ jessie nginx" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
ca-certificates \
nginx=${NGINX_VERSION} \
nginx-module-xslt \
nginx-module-geoip \
nginx-module-image-filter \
nginx-module-perl \
nginx-module-njs \
gettext-base \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /usr/src/php/ext
#install php-ext mongo
RUN git clone --branch v1.6 https://github.com/mongodb/mongo-php-driver-legacy.git /usr/src/php/ext/mongophp/
RUN cd /usr/src/php/ext/mongophp && phpize && ./configure && make && make install
#install php-ext memcached
RUN cd /usr/src/php/ext && wget -O memcached.tar.gz https://pecl.php.net/get/memcached-2.2.0.tgz && tar zxvf memcached.tar.gz
RUN cd /usr/src/php/ext/memcached-2.2.0 && phpize && ./configure && make && make install
#install php-ext redis
RUN cd /usr/src/php/ext && wget -O redis.tar.gz https://pecl.php.net/get/redis-2.2.5.tgz && tar zxvf redis.tar.gz
RUN cd /usr/src/php/ext/redis-2.2.5 && phpize && ./configure && make && make install
RUN apt-get remove -y git wget && apt-get autoremove -y
RUN rm -rf /usr/src/php
RUN echo "extension=memcached.so">/usr/local/etc/php/conf.d/memcached.ini
RUN echo "extension=mongo.so">/usr/local/etc/php/conf.d/mongo.ini
RUN echo "extension=redis.so">/usr/local/etc/php/conf.d/redis.ini
RUN echo "memcached.use_sasl = 1">>/usr/local/etc/php/conf.d/memcached.ini
CMD nginx && php-fpm

关于此Dockerfile

在这个Dockerfile中为php5.6官方镜像加载了redis、mongo、memcached扩展,且包括nginx1.10.3版本

关于最近一段时间学习Docker

刚开始接触docker的时候以为docker是把nginx+php+mongo(或者mysql,因为我们用的是mongo,配置mongo也比较繁琐,一半dockerhub给出的php镜像是已经加载了mysql)放到虚拟机中,这个虚拟机只有这三个进程,其他的进程都没有。
后来搜了很多资料,知道了容器,镜像和仓库的概念。但是对于是该把nginx,php和mongo放在一个容器中还是该拆开每一个服务制作成单一的镜像很困惑。还有一点就是我是在阿里云上部署的环境,阿里云比普通的docker多了一层应用,此外阿里云还有一个编排模版来自己定义镜像,后来发现即使编排镜像的时候一次性的编排了两个镜像,阿里云还是给拆分成了2个服务,这里就说的通了,在github上浏览了一下,大部分都是nginx和php放在一起,但是dockerhub以及github上有一小部分是php和nginx单独做成了两个镜像。
后来想了一下单独做成两个容器的好处就是,每一部分升级的时候很容易,更新换代的代价小。如果将nginx和php制作成一个镜像,那后续无论是升级php还是nginx都要重新制作镜像。
此外,在自己定制镜像的时候,最好基于dockerhub官方镜像给出的版本进行定制。这样做的好处就是,如果自己基于系统进行定制的话,镜像构建成功运行的时候,如果容器中没有进程运行的话会直接退出。这是因为当启动容器的时候其实就是启动了容器里面的进程,如果一个容器里面没有一个一直在前台执行的进程,那容器启动后就会立即退出。这也很好的解释了容器的本质,即进程。
最后,就是熟练运用shell对于写Dockerfile有很大的帮助,Dockerfile中执行的命令与shell的命令很相似。