准备:linux 64bit,安装好docker,并启动服务
一、下载centos的docke官方r镜像
docker pull centos
二、查看并运行centos镜像,进入shell
docker images
docker run -i -t --name centos /bin/bash
三、安装php7和nginx,因为不是本文重点,详细过程请看相关文档
四、保存为新的镜像
docker commit -m “nginx-php7” centos centos/nginx-php:v1
到此,nginx+php的基础镜像已经搭建完毕,可距离完善可靠运行还有差距
五、编辑Dockerfile完善镜像
1.新建Dockerfile文件,内容如下 :
FROM centos/nginx-php:v1
# Install supervisor
RUN yum install -y python-setuptools
RUN easy_install supervisor
ADD supervisord.conf /etc/supervisord.conf
EXPOSE 80 443
CMD ["/usr/bin/supervisord"]
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/local/nginx/sbin/nginx
[program:php-fpm]
command=/usr/local/php/sbin/php-fpm -c /etc/php.ini -y /usr/local/php/etc/php-fpm.conf
3.运行dockerfile,生成新的镜像
docker build -t centos/nginx-php-sup:v1 .
docker run -d --name nginx-php-sup -p 80:80 centos/nginx-php-sup:v1
如果运行成功docker ps -a,会看到这个进程
docker exec -it nginx-php-sup bash 可以进入这个docker的命令行
七、正式运行
1、创建几个新的目录
mkdir /data/centos-nps/{log,php.conf,data,nginx.conf} -p
其中log目录我打算把nginx的日志映射到这个目录下,php.cof目录我打算把php的配置文件映射到这个目录下,data目录我打算把网页文件映射到这个目录下,conf我打算 把nginx的配置文件映射到这个目录下
2、编辑好/data/centos-nps/php.conf(php.ini,php-fpm.conf),/data/centos-nps/nginx.conf(nginx 相关配置文件)
3、启动容器,使用命令:
docker run -d --name centos-nps -v /etc/localtime:/etc/localtime:ro --restart=always -p 8000:80 -v /data/centos-nps/log:/var/log/ -v /data/centos-nps/php.conf/php.ini:/etc/php.ini -v /data/centos-nps/php.conf/php-fpm.conf:/usr/local/php/etc/php-fpm.conf -v /data/centos-nps/data:/home/webroot -v /data/centos-nps/nginx.conf:/usr/local/nginx/conf/ centos/nginx-php-sup:v1
4、更新docker中的项目文件,直接更新宿主机上/data/centos-nps/data/目录下的文件
5、如果要修改nginx的配置文件,直接在宿主机上的/data/centos-nps/nginx.conf目录下修改nginx.conf ;修改完成后,你可以使用下面命令:
docker exec centos-nps /usr/local/nginx/sbin/nginx -t #检查配置文件是否正确
docker exec centos-nps /usr/local/nginx/sbin/nginx -s reload #让容器里的nginx重新读取nginx配置文件
6、如果要修改php的配置文件,直接在宿主机上的/data/centos-nps/php.conf目录下修改php.ini或者修改php-fpm.conf ;修改完成后要重启容器才能生效
docker restart centos-nps
7、容器里的nginx日志输出映射到了宿主机上的/data/centos-nps/log目录下
八、将制作好的镜像push到仓库
1.登陆到dockerhub,没有账号请到官网注册
docker login
2.给镜像打tag
docker tag imageID hub账号/imageName:tag
3.将镜像push到仓库
docker push hub账号/imageName:tag