制作Nginx+PHP的Docker镜像

一、准备工作:

使用工具:

1.主流版本的docker,本人使用的是 最新稳定版18.03

2.Centos的官方docker镜像作为基础镜像,这里选的版本是7.2

3.putty或Xshell作为SSH工具

思路:

众所周知,docker镜像的制作有2种方法,一种是启动一个容器并在容器里操作,再将容器提交为一个新的镜像;一种是写Dockerfile,然后执行dockerfile由docker给我们一步步自动生成新的镜像;显然第二种方法更高大上,也更适合容器需要不断版本更替的场景。本人在安装nginx和php的时候,习惯用第三方yum源,所以编译安装这里写Dockerfile实在是繁琐,而且nginx+php并不是需要频发更替版本,通常在制作容器前,跟开发确定好版本号,制作好容器可以一直使用;所以以下我的操作里,前半部分,nginx和php的安装,我会在容器里操作;最后让nginx和php同时启动起来,我则是写了一个Dockerfile。

二、制作容器

1、启动一个centos容器作为基础镜像

docker pull centos:7.2

docker run -it –name LNP centos:7.2 bash

2、这样就创建了一个以centos的官方镜像为基础的容器,并进如容器;在容器里用yum安装wget命令和编译安装需要的命令,替换成内网yum源,加上epel源、nginx源和php源
在附录中给出改好repo文件

3、更新yum源

yum update

4、yum安装nginx:

yum -y install nginx

5、yum安装php 7.1
yum -y install php71

6、yum安装常用的php扩展
yum -y install php71-php-mbstring php71-php-pdo php71-php-mcrypt php71-php-json php71-php-cli php71-php-gd php71-php-phpiredis php71-php-mysqlnd
7、安装PHP-FPM
yum -y install php71-php-fpm
8、配置整合nginx和PHP-FPM
nginx的配置文件放在/etc/nginx/conf.d/下,我们可以新增一个php.conf,内容参考如下

server{
    listen 80;
    #server_name domain.com;
    root /opt/php;

    location / {
        index index.php index.html index.htm;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_index index.php;
    }
}

9、整理,清理yum缓存,退出容器

   yum clean all

  exit

10、提交容器
docker commit -m “nginx-php” LNP yourname/nginx-php:v1
三、让这个镜像可以跑起来!

1、Dockefile如下:在宿主机下创建一个nginx目录,并到目录下vim Dockefile

FROM yourname/nginx-php:v1

# Install supervisor
RUN yum install -y python-setuptools
RUN easy_install supervisor

EXPOSE 80 443

CMD [“/usr/bin/supervisord”]

2.修改/etc/nginx/nginx.conf,加上“daemon off;”,如下:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

daemon off;

events {
    use epoll;
    worker_connections  1024;
}

3、创建/etc/supervisor.conf,内容为:

[supervisord]
nodaemon=true

[program:nginx]
command=/usr/sbin/nginx
stopsignal=QUIT

[program:php-fpm]
command=/opt/remi/php71/root/sbin/php-fpm –nodaemonize
stopsignal=QUIT

4、运行Dockerfile

docker build -t yourname/nginx-php .

到这里,这个镜像就完成了,可以简单的测试一下:

docker run -d –name LNP -p 80:80 yourname/nginx-php

然后用命令docker ps -a 查看下这个容器是否正常启动,如果有问题,可以docker logs -f nginx-php 查看下这个容器启动在哪里出了问题。

发表评论