本文衔接上一篇文章, 基于 CentOS 基础镜像构建 php-fpm 中间件镜像。
小贴士:
新的 Docker 镜像都是使用一个名为 Dockerfile 的文件构建的,该文件指定的元素包括但不限于:
- FROM:新镜像所基于的基础镜像,因为它继承了基础镜像的所有层
- ADD/COPY:需要复制到新镜像的文件
- EXPOSE:新镜像应公开的网络端口
- RUN:应在构建新镜像时运行的 命令,比如安装额外的包
- ENV:可在使用该镜像启动容器时设置的环境变量
- ENTRYPOINT:在容器启动时运行的命令
而
中间件镜像
最重要的区别
在于: 新增了ONBUILD
为 Dockerfile 传递给用于构建新镜像
的docker build
命令;
下面是基于 CentOS 基础镜像构建 php-fpm 中间件镜像的全部过程 。。。
好文章 记得收藏+点赞+关注额 !!!---- Nick.Peng
一、撰写Dockerfile
-
一个 docker 镜像的好坏取决于 Dockerfile 写的好不好,写好的Dockerfile以及解释如下:
# # MAINTAINER Nick,Y.Peng <nickyp@dockerstu.com> # DOCKER-VERSION 1.6.2 # # Dockerizing php-fpm: Dockerfile for building php-fpm images # # 基于上一篇创建的centos:7.1作为此中间件镜像的基础镜像 FROM csphere/centos:7.1 MAINTAINER Nick,Y.Peng <nickyp@dockerstu.com> # 指明该镜像的维护者 # Set environment variable ENV APP_DIR /app # 创建镜像要执行的命令,这里主要是安装一些依赖和环境 RUN rpm --rebuilddb && yum -y swap -- remove fakesystemd -- install systemd systemd-libs && \ yum -y install nginx php-cli php-mysql php-pear php-ldap php-mbstring php-soap php-dom php-gd php-xmlrpc php-fpm php-mcrypt && \ yum clean all # 添加nginx配置文件到镜像指定目录 ADD nginx_nginx.conf /etc/nginx/nginx.conf # 添加nginx默认配置文件到镜像指定目录 ADD nginx_default.conf /etc/nginx/conf.d/default.conf # 添加php配置文件到镜像指定目录 ADD php_www.conf /etc/php-fpm.d/www.conf RUN sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php.ini # 给上面app环境变量创建app目录,并在这个app目录下用phpinfo()创建一个info.php文件,用来测试nginx与info.php之间能不能正常连接 RUN mkdir -p /app && echo "<?php phpinfo(); ?>" > ${APP_DIR}/info.php # 对外开放80和443端口,http协议默认80,https协议默认443 EXPOSE 80 443 # 给进程管理工具添加nginx配置文件 ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf # 给进程管理工具添加php-fpm配置文件 ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf # ONBUILD:在中间件镜像的Dockerfile里面并不生效,而是在用这个中间件镜像build成应用镜像时才生效 # (即:FROM csphere/php-fpm:5.4 时才生效),提升发布效率 ONBUILD ADD . /app ONBUILD RUN chown -R nginx:nginx /app
二、构建Docker镜像
- 执行命令:
docker build -t csphere/php-fpm:5.4 .
- 命令解析: 后面
.
的意思是指 Dockerfile 所在目录的相对路径,这里 Dockerfile 在当前路径下,所以用.
表示,如果不在当前路径,就写相对路径,例如:./xxx
- 构建成功, 如图:
- 验证是否构建成功: 在终端输入命令:
docker images
,如下图 php-fpm:5.4 已被我们成功构建;
三、创建Docker容器
- 通过我们刚刚构建的 Docker 镜像,创建 Docker 容器;
- 创建容器命令如下:
docker run -d -p 8080:80 --name website csphere/php-fpm:5.4
- 查看是否创建成功:
输入命令:docker ps -a
,如图,website 容器已被成功创建;
- 验证nginx服务是否正常:
- 用我们刚build时创建的info.php文件,来验证其与nginx之间是否成功建立连接;
- 打开浏览器,在地址栏输入:
http://服务器IP地址:创建容器时映射的端口8080/info.php
,如下图所示能访问成功,即证明nginx服务正常;
- 验证nginx方法二:
- 进入运行的website容器里面,查看服务状态
- 在服务器终端输入:
docker exec -it 正在运行容器的ID /bin/bash
,使用supervisorctl进程管理工具来查看服务启动状况 - 查看完成后使用
exit
退出容器