原由:
因为有一个Nginx的cache服务需要迁移到新的主机,所以最终决定使用docker的容器来解决这个问题:
思路:
首先肯定要使用到docker的服务,那么在centos6.6上面本来是没有办法安装docker服务的,
因为centos6.6上面的内核版本是2.6.32-504.el6.x86_64,而需要安装docker服务的话,必须为
3.10以上的内核版本才可以。所以需要升级内核才可以。

Centos6.6下的Docker安装:

1.升级linux-centos内核版本:

查看内核版本

uname –r

2.6.32-504.el6.x86_64

第一步:
替换key文件:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
第二步:
根据本地centos版本下载对应的Elrepo:
CentOS 5x版本:
rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm
CentOS 6x版本:
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
CentOS 7x版本:
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

第三步:

安装内核:

yum --enablerepo=elrepo-kernel install kernel-lt -y

修改/etc/grub.conf的配置文件:
vi /etc/grub.conf

修改/etc/grub.cof文件内的default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)

最后修改完成和保存完毕之后,记得reboot重启系统。

2.再次查看内核并确认升级成功:

uname –r
3.10.5-3.el6.x86_64

3.安装docker

a. 关闭selinux
vim /etc/selinux/config
修改内容SELINUX=disabled
b. 在下epel的rpm包,因为epel里面带有docker-io的包:
cd /etc/yum.repos.d/
wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
vim epel.repo

修改epel.repo文件内的mirror=https为mirros=http
c. Yum安装docker-io
yum -y install docker-io
安装完成以后启动docker并查看版本
Service docker start
docker version

也可以查看docker的日志
cat /var/log/docker

在centos下创建Nginx的cache缓存docker镜像及端口映射

1.查看现有的镜像: docker images


2.创建容器:docker run -itd -v /root:/root --name=centos-Nginx --restart=always centos /bin/bash

(这里先不做端口映射是为了后面生成可灵活运用的镜像使用)


“-i”表示输入

“-t”表示终端

“-d”表示后台运行

“--name=centos-Nginx”表示即将生成的docker镜像的名字

“--restart=always”表示容器开启以后,不会因为exit退出容器而关闭容器(如果没有这一条,那么在使用exit退出容器的时候,容器会自动关闭,需要重新启动)

“-v /root:/root”表示挂载本地/root目录到docker这个新建容器的/root目录下面

“/bin/bash”表示让新建立的容器有根本交互的能力(这里可以替换成命令执行)

“-p 60001:60001” 表示将内里容器的60001端口映射到docker宿主机的60001端口

(只有在映射了端口之后,才能通过宿主机的curl通过端口访问容器内的website)

3.查看刚刚创建的容器:docker ps -a


ContainerID 就是容器ID

IMAGE 就是从属镜像,表示从哪一个现有的镜像上面生成的

COMMAND 生成容器时候的交互命令

CREATED 创建时间

STATUS 当前状态

PORT 当前应用的端口映射状态

NAMES 创建的容器名称

4.进入容器:docker attach ae8(ae8是containerID,可以简写为钱三个以上的字符串)


5.进行必要的yum安装:(因为再选取镜像生成容器以后,有些基础的功能是没有的,所以需要安装,不过建议先进行yum的update的升级)

yum -y install wget vim curl

wget http://Nginx.org/download/Nginx-1.8.1.0.tar#下载Nginx的安装包

wget http://labs.frickle.com/Nginx_ngx_cache_purge.tar.gz#下载Nginx_ngx_cache_purge的清除cache缓存用的purge安装包

tar -zxvf Nginx-1.8.1.0.tar#解压

tar -zxvf ngx_cache_purge-2.3.tar.gz

6.进行Nginx依赖包的安装:

yum install -y make gcc pcre-devel zlib-devel openssl*

7.进行Nginx的正式安装:

cdNginx-1.8.1.0

./configure --user=Nginx --group=Nginx --add-module=/home/ngx_cache_purge-2.3 --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/Nginx

make

make install#最后一步安装完成

8.启动Nginx服务

/usr/local/Nginx/sbin/Nginx

9.验证Nginx安装成功,只要可以访问Nginx的欢迎页面就可以了

curl localhost:80


10.修改Nginx配置文件:

-------------------------------------------------------

user Nginx;
worker_processes 4;

error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/Nginx.pid;
worker_rlimit_nofile 65535;

events {
use epoll;
worker_connections 10240;
}
http {
server_tokens off;
# server_tag off;
# autoindex off;
access_log off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 10m;
client_body_buffer_size 256k;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 128k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_temp_path /usr/local/Nginx/proxy_temp; #注意这里两行的路径
proxy_cache_path /usr/local/Nginx/proxy_cache levels=1:2keys_zone=cache_one:2048m inactive=30m max_size=60g;

#这里的cache_one跟下一个配置文件对应
# backend web server address pool
# include set/*.conf;

# system resource overload protect
# server {
# sysguard on;
# sysguard_load load=10.5 action=/loadlimit;
# sysguard_mem swapratio=20% action=/swaplimit;
# sysguard_mem free=100M action=/freelimit;
# location /loadlimit {
# return 503;
# }
# location /swaplimit {
# return 503;
# }
# location /freelimit {
# return 503;
# }
# }

# refuse request server by ipaddr
# server {
# server_name _;
# return 404;
# }
# web page cache and proxy setting
include /usr/local/Nginx/conf/web/*.conf;#此处路径下的配置文件可以用作服务器集群下面单个website站点的缓存配置文件
}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

11.在/usr/local/Nginx/conf/下添加web目录,并建立站点配置文件:

cd /usr/local/Nginx/conf/

mkdir web

cd /usr/local/Nginx/conf/web/

vim web_60001.conf

--------------------------------------------------------------

upstream 60001_servers{
#consistent_hash $request_uri; #此处是哈希算法的模块,如果在编译Nginx的时候添加了,这里就可以不用注释掉

#server 10.0.0.41:60001 weight=1;
server 172.16.40.1:60001; #此处为调用真实环境资源的服务器地址

#check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
#check_http_expect_alive http_2xx http_3xx; #这两行是check健康检查模块,如果在编译Nginx的时候添加了,这里就可以不用注释掉
}

server {
listen 60001;

location ~ /_clear(/.*) {#此行内的“_clear”的名称是可以更改的
allow all;#这一行可以添加允许使用这个清除缓存命令的主机IP地址,类似于:“allow 192.168.100.100;”
proxy_cache_purge cache_one $host$1$is_args$args;
} #这里的整个模块就是缓存清除模块了,请务必将整个模块置于静态页面的前方,让其优先匹配,否则会有可能报“404 not found”错误

location /_status {
#check_status; #check模块
allow 172.16.0.0/16;
deny all;
}

location ~* /Shopping/ActivityPage.aspx {
#proxy_hide_header "cache-control";
#proxy_hide_header Expires;
proxy_hide_header Set-Cookie;
proxy_hide_header X-AspNet-Version;
proxy_hide_header X-Powered-By;

proxy_ignore_headers Set-Cookie;
proxy_ignore_headers Cache-Control;
proxy_ignore_headers Expires;
proxy_ignore_headers X-Accel-Expires;

#add_header Cache-Control 'private max-age=300';

proxy_cache cache_one; #这里注意跟上面的名称对应一致
proxy_cache_valid 200 304 30m;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 60s;

proxy_pass http://60001_servers;#跟开头一样
proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
proxy_set_header X-Real-IP $remote_addr;
add_header Nginx-Cache "$upstream_cache_status";
#add_header Kss-Upstream $upstream_addr;
proxy_cache_key $host$uri$is_args$args; #这一行必须要有,参数不要随意更改

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plainapplication/x-javascript text/css application/xml;
gzip_vary on;

#expires 10m;
}
}

------------------------------------------------------------------------------------------------------------------------------------------------------

12.经过上面的步骤之后,请重启Nginx的服务,这里不建议是使用 /usr/local/Nginx/sbin/Nginx -s reload

请使用:(因为reload后配置不一定生效,经验之谈。说不定也可以的。)

/usr/local/Nginx/sbin/Nginx -s stop

/usr/local/Nginx/sbin/Nginx

重新启动Nginx之后,使用 curl localhost:60001 进行验证,如果成功,则会出现几大篇的60001的网页代码文件。

如果可以,则证明已经可以成功调取到60001的网页文件了。那么Nginx安装没有问题,接着再次测试“_clear”是否生效:

curl localhost:60001/_clear/

如果出现下面的页面,则证明缓存模块也已经可以启用了。

<html>
<head><title>Successful purge</title></head>
<body bgcolor="white">
<center><h1>Successful purge</h1>
<br>Key : www.xxxxxx.com/
<br>Path: /usr/local/Nginx/proxy_cache/1/53/36a66aaffb1ebcd9f532f3f2d121b531
</center>
<hr><center>Nginx/1.8.1</center>
</body>
</html>

13.验证完了之后,那么证明这个容器的环境没有问题,那么就可以制作镜像了,不过在制作镜像之后,有两个问题需要面对,我也是在踩过坑之后,才明白:

a.要解决容器在exit退出后,容器还能保持继续运行,这个问题在上面已经解决了,在建容器的时候加入 --restart=always 就可以了。

b.既然容器在exit退出后,那么里面的服务还会在继续运行吗?答案是不会,所以必须要保证在容器运行的时候,里面的服务也能够正常的跑起来,而不会停止。

比如上面创建的容器里面的Nginx服务,而我再查了诸多资料之后,发现还是需要将这个服务吊着,不让它运行完了就自动关闭了。

而我解决这个问题的办法是给Nginx的配置文件的最末行加上“daemon off;” 让其以非daemon的方式运行。

echo “daemon off;” >> /usr/local/Nginx/conf/Nginx.conf

再然后为了让里面的服务能够跟随容器一起启动,再添加一个简单的脚本文件:

cd /opt

vim run.sh

脚本内容:

######################

#!/bin/bash

/usr/local/Nginx/sbin/Nginx

######################

最后exit退出容器,查看容器ID:

docker ps -a


14.好了,一切准备就绪,开始创建镜像:

docker commit ae8982926fec -m=“this is for Nginx cache” -a=“franz” Nginxcache:v1

“docker commit” 创建镜像的命令

“ae8982926fec” containerID 容器ID

“-m=“this is for Nginx cache” ”表示添加容器的描述

-a=“franz” ”表示添加创建容器的人名

Nginxcache:v1” 表示即将要创建的镜像的名称,冒号后面的v1就是版本号的意思

镜像创建完成以后,需要让之前创建的Nginxcache的服务跑起来,那么还得在刚刚创建的镜像的基础上再生成一个容器来跑:

docker run -itd -p 60001:60001 --dns=172.16.30.10 --dns=172.16.30.11 --restart=always Nginxcache:v3 /opt/run.sh

“--dns=172.16.30.10”表示给容器添加DNS,可以添加两条

/opt/run.sh表示当容器运行起来的时候,运行run.sh的脚本文件,以便启动内里的Nginx服务。

15.再次沿用之前第12步的方法在宿主机上进行验证测试,没问题之后,就可以直接在浏览器里面进行验证了,如下图所示:


到此就全部安装完成了。

参考文献:

http://www.centoscn.com/image-text/install/2014/1128/4202.html

CentOS下的Docker容器-<nginx下的cache服务>的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  3. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  4. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  5. 在两个屏幕上运行的iOS应用程序(无镜像)

    我创建了一个包含幻灯片的iPad应用程序,当用户点击此幻灯片时,他/她可以输入一些信息.我现在要做的是在通过AirPlay连接电视和iPad时在电视上显示幻灯片显示内容可以这样做吗?如何在iOS中完成?所以不要反映整个应用程序.解决方法您可以使用Airplay和AppleTV编写应用程序以处理2个UIScreens,然后为电视UIScreen和iPadUIScreen设置单独的根视图控制器.然后在电视的视图控制器上显示图像或幻灯片,并从iPad视图控制器的事件中运行该图像或幻灯片!

  6. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

  7. ios – 如何镜像UIBezierPath?

    我有一个UIBezierPath,我想得到它的镜像.我该如何做到这一点?

  8. ios – 编程嵌入UIViewController?

    我有一个带有一个容器视图的UIViewController的Storyboard设置,以便我可以在其中嵌入另一个UIViewController.在某种情况下,我需要更改嵌入式视图控制器.在我的故事板中,我的容器视图不能有两个区段.这导致我以编程方式进行.我的容器视图在我的故事板,没有连接的嵌入.现在从这一点开始,我如何以编程方式嵌入我所选择的UIViewController对象?

  9. ios – 使用Swift访问非默认的Cloudkit容器

    我有一个IOS8应用程序,它成功地将记录写入其默认的Cloudkit容器.现在我希望在OSX下的不同应用程序中读取和处理这些记录.我已经设置了具有iCloud访问权限的新应用程序,并选中了“指定自定义容器”选项.这已成功找到原始应用程序和我的容器没有错误要在Capabilities界面上修复.我的所有搜索都告诉我“同一个开发人员签署的两个应用程序可能共享同一个容器”但我找不到的任何教程文档都告诉我

  10. ios – Airplay:外部窗口镜像子视图

    米解决方法称为AirPlay镜像的技术命名不佳.它实际上以两种模式运行,一种是将整个iOS设备镜像到AirPlay设备,另一种模式下,一旦连接了镜像AirPlay设备,开发人员就可以使用两个UIWindow/UIScreen.您正在使用后一种模式,通常被称为“镜像”,但是您真的有一个完全独立的窗口/屏幕进行管理,应该有更好的术语来指代这种操作模式.上面所描述的内容基本上是将UIView从设备窗口移动到AirPlay窗口,它的工作原理与之一致!

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部