摘要:构建镜像时,首先要有一个基础镜像,然后有中间件镜像,最后生成一个应用镜像。现在作为基础镜像,下面来构建两个中间件镜像镜像具有和能力的镜像。同时,用文件覆盖默认的配置文件。构建镜像查看镜像以上镜像已经做好了。
以上已经构建好了一个基础的docker镜像centos7。
构建docker镜像时,首先 要有一个基础镜像,然后有中间件镜像,最后生成一个应用镜像。
现在centos7作为基础镜像,下面来构建两个中间件镜像:DB镜像、具有PHP和Nginx能力的镜像。
php-fpm文件目录如下
[root@Optimus docker-training]# ls centos7 mysql php-fpm README.md wordpress [root@Optimus docker-training]# cd php-fpm/ [root@Optimus php-fpm]# ls Dockerfile nginx_default.conf nginx_nginx.conf php_www.conf supervisor_nginx.conf supervisor_php-fpm.conf
[supervisor_php-fpm.conf] 用于启动php-fpm.
[supervisor_nginx.conf] 用于启动Nginx服务。
Dockerfile
[root@Optimus php-fpm]# vim Dockerfile # # MAINTAINER Carson,C.J.Zeong# DOCKER-VERSION 1.6.2 # # Dockerizing php-fpm: Dockerfile for building php-fpm images # FROM csphere/centos:7.1 MAINTAINER Carson,C.J.Zeong # Set environment variable ENV APP_DIR /app RUN 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 ADD nginx_nginx.conf /etc/nginx/nginx.conf ADD nginx_default.conf /etc/nginx/conf.d/default.conf 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 RUN mkdir -p /app && echo "" > ${APP_DIR}/info.php EXPOSE 80 443 ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf ONBUILD ADD . /app ONBUILD RUN chown -R nginx:nginx /app
[FROM csphere/centos:7.1] 基于cento:7.1作为基础镜像(父镜像)。
[MAINTAINER] 说明dockerfile由谁来维护
[ENV APP_DIR /app]设置了一个APP_DIR变量,文件目录为/app.(因为后面对Nginx做了一些修改。修改了Nginx的网站根目录,改为了/app。同时,用nginx_default.conf文件覆盖默认的配置文件/etc/nginx/conf.d/default.conf)。
[RUN 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] 主要安装了Nginx、php-mysql、php-fpm以及其他php的拓展包。
[ADD php_www.conf /etc/php-fpm.d/www.conf] 在之前安装php和Apache的时候,里面的用户是Apache,今天用的是Nginx,所以需要把Apache的用户替换成Nginx.
[RUN mkdir -p /app && echo "" > ${APP_DIR}/info.php] 创建/app目录。phpinfo用来来测试Nginx和php-fpm之间有没有创建成功,因此创建了info.php文件放到了/app目录下。
[EXPOSE 80 443] Nginx默认端口号是80,https是443.该指令可以不写,但是推荐写上,让人一眼就知道要暴露端口80和443.
[ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf] 添加启动Nginx和启动php-pfm的配置文件
[ADD supervisor_php-fpm.conf /etc/supervisor.conf.d/php-fpm.conf] 添加启动Nginx和启动php-pfm的配置文件
[ONBUILD ADD . /app] onbuild是dockerfile中非常重要的一条命令。onbuild在构建这一个镜像的时候不生效。他在什么时候生效呢?比如说现在生成了一个php-pfm的镜像,他会在下一个镜像里面生效。用好onbuild发布产品非常的快,开发人员要做的工作也非常少。
[ONBUILD RUN chown -R nginx:nginx /app]
构建php-fpm镜像
docker build -t csphere/php-fpm:5.4 .
查看镜像
docker images
以上镜像已经做好了。下面测试它能不能提供一个php和Nginx的功能。
测试PHP和Nginx功能
创建docker容器
[root@Optimus php-fpm]# docker run -d -p 8080:80 --name website csphere/php-fpm:5.4 e274049db704780a4742103afbf206a9a924eb2f9982dbc18432b94008f8a032 创建docker容器,用8080映射Nginx的80端口,docker容器名为website,使用docker镜像为csphere/php-fpm:5.4.
查看docker container状态
docker ps -a [root@Optimus php-fpm]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e274049db704 csphere/php-fpm:5.4 "/usr/bin/supervisor 58 seconds ago Up 55 seconds 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp website 2d36dbfc72a0 csphere/centos:7.1 "/usr/bin/supervisor 23 hours ago Up 23 hours 0.0.0.0:2222->22/tcp base 0d1f6225836b centos "/bin/bash" 2 days ago Exited (127) 2 days ago naughty_engelbart [root@Optimus php-fpm]#
查看公网IP
ifconfig eth1 eth1 这块网卡是公网IP。公网IP地址为 inet addr:10.10.4.182
访问浏览器
http://inet addr:8080/info.php 比如: http://10.10.4.182:8080/info.php 映射的是宿主机的8080端口。Nginx默认加载的是index.html或者index.php,刚才在创建的时候没有加这些文件。这里访问的是info.php。
看到下面的界面说明Nginx已经启动成功,并能够和php-fpm进行结合来解析PHP代码
进入container中查看Nginx和PHP是否启动
docker exec -it website /bin/bash 进入交互式模式,进入website这个container的/bin/bash界面 [root@Optimus /]# docker exec -it website /bin/bash [root@e274049db704 /]#
查看有多个服务的的container
supervisorctl 由于是基于centos基础镜像构建的php-fpm这个docker镜像,因此已经具备了基础镜像的所有功能。 [root@e274049db704 /]# supervisorctl nginx RUNNING pid 7, uptime 0:34:43 php-fpm RUNNING pid 8, uptime 0:34:43 supervisor> 可以看到php-fpm和Nginx已经完全启动在了docker容器中。 exit 退出 supervisor> exit [root@e274049db704 /]# exit exit
退出后查看container状态(仍然还是UP状态)
docker ps -a
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27109.html
摘要:构建镜像时,首先要有一个基础镜像,然后有中间件镜像,最后生成一个应用镜像。现在作为基础镜像,下面来构建两个中间件镜像镜像具有和能力的镜像。同时,用文件覆盖默认的配置文件。构建镜像查看镜像以上镜像已经做好了。 以上已经构建好了一个基础的docker镜像centos7。 构建docker镜像时,首先 要有一个基础镜像,然后有中间件镜像,最后生成一个应用镜像。 现在centos7作为基础镜...
摘要:如果有服务器需要维护重启时,也会重启,此时端口会发生变化,仍然会随机拿一个没有使用的端口号来和号端口做端口映射。除非该删掉后,端口号会被分配给其他使用。 Dockerfile Docker是软件工业上的集装箱技术。 通过以下文件制作Docker镜像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...
摘要:用法在当中只有最后一条生效,其他都不生效第一种写法类似数组形式,推荐使用。第二章方法执行命令启动的进程,该进程的为执行完这个的。命令覆盖掉了中的命令,直接进入到了中。删除镜像前,先停止。 ENTRYPOINT用法showImg(https://segmentfault.com/img/bVXNu5?w=702&h=322); entrypoint在dockerfile当中只有最后一条生...
阅读 1822·2021-11-25 09:43
阅读 3652·2021-11-24 10:32
阅读 1039·2021-10-13 09:39
阅读 2267·2021-09-10 11:24
阅读 3308·2021-07-25 21:37
阅读 3447·2019-08-30 15:56
阅读 818·2019-08-30 15:44
阅读 1391·2019-08-30 13:18