安装的时候,最好能参照此官方教程进行https://docs.docker.com/installation/centos/

升级内核

CentOS6.7的默认内核版本是2.6.32-431.23.3.el6.x86_64 可以通过uname -r命令查看

而docker要求的内核是至少3.10往上

可以参考此篇文章来进行内核升级使用yum快速升级CentOS 6.5内核到 3.10.28

虽然说的是CentOS6.5 但是也同样适用于CentOS6.7

升级完毕之后,重启电脑,执行uname -r命令,确定内核已经正确切换为3.10的

安装docker

安装比较简单

先使用 sudo yum update 来确保所有包是最新的

然后使用官方的curl -sSL https://get.docker.com/ | sh 进行docker的安装

启用和配置docker

如果你的运气不错的话,执行sudo service docker start就可以顺利启动docker。

尝试着跑一个hello-world的image,sudo docker run hello-world。如果一切正常。那后面就不需要看。

很不幸,看到这块的都是有问题了。

问题和解决方法

内网IP被占

如果执行docker -d看到的错误类似如下

INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] [graphdriver] using prior storage driver "devicemapper"
WARN[0000] Running modprobe bridge nf_nat failed with message: , error: exit status 1
FATA[0000] Error starting daemon: Error initializing network controller: Error creating default "bridge" network: can't find an address range for interface "docker0"

那可以尝试一下我的一些操作

参考了http://www.baijinping.com/pages/2015/07/19/zai-a-li-yun-shang-yun-xing-dockerfu-wu.htmlhttp://www.cnblogs.com/MicroTeam/p/see-docker-run-in-debian-with-aliyun-ecs.html

编辑网络配置文件 vim /etc/sysconfig/network-scripts/route-eth0

注释掉有172.16.0.0的一行

# 172.16.0.0/12 via 10.116.111.247 dev eth0

执行命令route del -net 172.16.0.0 netmask 255.240.0.0 删除掉已经加载的路由信息

然后执行 /etc/init.d/network restart 重启network服务

最后再次启动docker service start docker 成功!

无法限制docker内存

当然,如果还是很不幸的,又有问题,在启动的时候提示

WARNING: WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

这是提示无法对docker进行内存限制。

可以修改/etc/grub.conf 在当前使用的内核的kernel项的最后加上cgroup_enable=memory swapaccount=1

reboot

然后 cat /proc/cmdline 就会发现,配置生效了

这下就真的没问题了。久违的hello, world

参考资料

  • 服务器环境:ubuntu 14.04, nginx/1.4.6

  • 执行命令:sudo nginx -t -c /etc/nginx/conf.d/default.conf

  • 命令目的:查看新修改的nginx是否有错误,避免上线导致服务器出错

执行结果:

nginx: [emerg] "server" directive is not allowed here in /etc/nginx/conf.d/default.conf:1
nginx: configuration file /etc/nginx/conf.d/default.conf test failed

default.conf里面的内容:

server {
    listen                      80; 
    server_name                 localhostmanager.com www.shuizhongyueming.com;
    root                        /var/www/www.shuizhongyueming.com;

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

    # 媒体资源文件
    # TODO: 用一个static.hostmanager.com 之类的域名放置
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
         expires      30d;
    }   

    # 前端代码
    # TODO: 用一个fe.hostmanager.com之类的域名放置
    location ~ .*.(js|css)$ {
         expires      1h; 
    }   
}

一开始以为是语法错误,可是复制了官方文档里面的一个简单PHP站点配置之后,还是报同样的错误,所以基本算排除了语法错误

上网Google的结果,大多说的是server的配置应该放在http里面

可是我的default.conf 是在/etc/nginx/nginx.conf 里面,在http模块下include的,不应该有任何的错误才对

最后自己根据网上这些答案猜测,是我进行语法检测的对象有问题。

要检测现有的修改过的Nginx配置是否有错误,不是单单检测那个修改过的扩展的.conf文件。而是不管任何时候,始终都是去检测主文件/etc/nginx/nginx.conf,只有这样,才能顺利的在对应的模块加载扩展的.conf文件。

这样一来保证了配置的前后语境的正确性,二来,这样才是真正的检测(完全和实际运行情况相符)

所以正确的检测修改的Nginx的语法是否错误的命令应该是:sudo nginx -t -c /etc/nginx/nginx.conf,然后一个欣喜的结果就会是:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

希望这个小的发现能帮助到大家。