摘要:环境要求安装了的主机本文示例环境为准备镜像首先把所有需要用到的镜像拉取下来容器编排是容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
准备镜像环境要求:安装了docker的主机 (本文示例环境为centos7.4)
首先把所有需要用到的镜像拉取下来
# nginx $ docker pull nginx # php & php-fpm $ docker pull php:7.1.0-fpm # redis $ docker pull redisdocker-compose容器编排
Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
安装Compose直接从github下载即可,前提要先安装Docker,版本要1.9.1以上
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
安装后确认:
$ docker-compose --version使用Compose启动多个Nginx容器 创建编排脚本
在 /docker/nginx 目录下创建 docker-compose.yml
version: "2" services: web1: image: nginx links: - web2 - web3 - web4 ports: - "8080:8080" volumes: - "/docker/nginx/web1/conf.d:/etc/nginx/conf.d" web2: image: nginx volumes: - "/docker/slb/www2:/www" - "/docker/nginx/web2/conf.d:/etc/nginx/conf.d" web3: image: nginx volumes: - "/docker/slb/www3:/www" - "/docker/nginx/web3/conf.d:/etc/nginx/conf.d" web4: image: nginx volumes: - "/docker/slb/www4:/www" - "/docker/nginx/web4/conf.d:/etc/nginx/conf.d"
启动容器
# up:创建并启动 -d:后台运行 $ docker-compose up -d # 查看容器 $ docker-compose ps配置Nginx 反向代理Nginx配置
添加upstream节点,默认使用轮询方式进行负载
编辑并保存 /docker/nginx/web1/conf.d/slb.conf
upstream slb { server web2; server web3; server web4; } server { listen 8080; server_name 127.0.0.1; gzip on; location /{ root /www; index index.html index.php; # 反向代理的主机头 proxy_pass http://slb; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }web应用Nginx配置
编辑并保存 /docker/nginx/web2/conf.d/demo.conf (其余的web3与web4同理)
server { listen 80; server_name localhost; gzip on; location / { root /www; index index.html index.htm; autoindex off; } }标记Nginx目录
为了确定Nginx集群是否搭建成功,分别在 web2 web3 web4 的主目录放置不同的html文档
编辑并保存 /docker/nginx/slb/web2/index.html (其余的web3与web4同理)
Document web2
浏览器访问 127.0.0.1:8080 并刷新
至此,Nginx集群已搭建完成!
PHP环境安装在准备镜像的时候拉了一个php:7.1.0-fpm的镜像,但为了实现session共享,解决集群之间session问题,需要在此镜像改动一下,安装redis拓展,修改php的session储存方式为redis
在 /docker/php/ 目录下创建Dockerfile文件
FROM php:7.1.0-fpm MAINTAINER xiaowei "694623056@qq.com" # Install php extension--redis RUN cd /usr/local/ && mkdir redis_phpext && curl -o redis_phpext/redis-3.1.3.tgz http://101.96.10.64/pecl.php.net/get/redis-3.1.3.tgz && cd redis_phpext && tar zxvf redis-3.1.3.tgz && cd redis-3.1.3 && phpize && ./configure --with-php-config=/usr/local/bin/php-config && make && make install && rm -rf /usr/local/redis_phpext创建自定义镜像
# 切换目录 $ cd /docker/php # build: 创建,切记勿忽略后面的 . 意为当前目录 $ docker build -t php:add_redis .
创建完成后 docker images 查看是否成功
$ docker images容器依赖
修改docker-compose.yml文件,添加php与redis的编排,这里已经不需要测试集群,可以把Nginx应用网站根目录统一挂载到 /docker/www
最终编排脚本version: "2" services: web1: image: nginx links: - web2 - web3 - web4 ports: - "8080:8080" volumes: - "/docker/nginx/web1/conf.d:/etc/nginx/conf.d" web2: image: nginx links: - php volumes: - "/docker/www:/www" - "/docker/nginx/web2/conf.d:/etc/nginx/conf.d" web3: image: nginx links: - php volumes: - "/docker/www:/www" - "/docker/nginx/web3/conf.d:/etc/nginx/conf.d" web4: image: nginx links: - php volumes: - "/docker/www:/www" - "/docker/nginx/web4/conf.d:/etc/nginx/conf.d" php: build: /docker/php/ links: - redis volumes: - "/docker/www:/www" - "/docker/php/conf.d:/usr/local/etc/php/conf.d" redis: image: redis volumes: - "/docker/redis/data:/data" ports: - "6379:6379" command : redis-server --appendonly yes添加php配置文件
在 /docker/php/conf.d/ 目录下创建文件redis.ini
;添加redis拓展 extension = redis.so ;设置session储存方式为redis session.save_handler = redis session.save_path = redis:6379修改web应用Nginx配置
将php类型文件转发给php-fpm处理,修改 web2 web3 web4 Nginx配置文件
/docker/nginx/web[2-3]/demo.conf
server { listen 80; server_name localhost; gzip on; location / { root /www; index index.php index.html index.htm; autoindex off; } location ~ .php { root /www; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }重新编排容器
将一开始编排的集群容器停止并删除,重新创建并启动容器
# 停止 $ docker-compose stop # 删除 需要确认 y $ docker-compose rm # 创建容器启动并后台运行 $ docker-compose up -d测试环境! phpinfo
在 /docker/www 目录创建 index.php文件
浏览器访问 127.0.0.1:8080/index.php
session共享在 /docker/www 目录创建 session.php文件
浏览器访问 127.0.0.1:8080/session.php 每次的session_id相同则表明已实现session共享
本文出自个人博客 最好的安排 转载请注明出处!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39711.html
摘要:环境要求安装了的主机本文示例环境为准备镜像首先把所有需要用到的镜像拉取下来容器编排是容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。 环境要求:安装了docker的主机 (本文示例环境为centos7.4) 准备镜像 首先把所有需要用到的镜像拉取下来 # nginx $ docker pull nginx # php & php-fpm $ docker pul...
摘要:今天整理了一下近大半年以来的一些文章,和我的预期一样,很多文章我都忘记自己曾经写过了,这个记录的过程让我也有了新的理解。希望大家,收藏,点赞,加转发。 今天整理了一下近大半年以来的一些文章,和我的预期一样,很多文章我都忘记自己曾经写过了,这个记录的过程让我也有了新的理解。希望大家,收藏,点赞,加转发。 面试必备 面试必备:深入Spring MVC DispatchServlet 源码...
摘要:今天整理了一下近大半年以来的一些文章,和我的预期一样,很多文章我都忘记自己曾经写过了,这个记录的过程让我也有了新的理解。希望大家,收藏,点赞,加转发。 今天整理了一下近大半年以来的一些文章,和我的预期一样,很多文章我都忘记自己曾经写过了,这个记录的过程让我也有了新的理解。希望大家,收藏,点赞,加转发。 面试必备 面试必备:深入Spring MVC DispatchServlet 源码...
摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...
阅读 2881·2021-09-26 10:18
阅读 5125·2021-09-22 15:02
阅读 2745·2019-08-30 15:53
阅读 1820·2019-08-29 18:41
阅读 2669·2019-08-27 10:58
阅读 2605·2019-08-26 13:49
阅读 2725·2019-08-26 12:17
阅读 884·2019-08-26 11:49