详解在 CentOS 6.x上安装 docker.io
<p>docker容器最早受到RHEL完善的支持是从最近的CentOS 7.0开始的,官方说明是只能运行于64位架构平台,内核版本为2.6.32-431及以上(即>=CentOS 6.5,运行docker时实际提示3.8.0及以上),升级内核请参考CentOS 6.x 内核升级(2.6.32 -> 3.10.58)过程记录</p>
<p>
需要注意的是CentOS 6.5与7.0的安装是有一点点不同的,CentOS-6上docker的安装包叫docker-io,并且来源于Fedora epel库,这个仓库维护了大量的没有包含在发行版中的软件,所以先要安装EPEL,而CentOS-7的docker直接包含在官方镜像源的Extras仓库(CentOS-Base.repo下的节enable=1启用)。前提是都需要联网,具体安装过程如下。</p>
<p>
<strong>1. 禁用selinux</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_647555">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># getenforce</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">enforcing</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments"># setenforce 0</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">permissive</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash comments"># vi /etc/selinux/config</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">SELINUX=disabled</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">...</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>2. 安装 Fedora EPEL</strong></p>
<p>
epel-release-6-8.noarch.rpm包在发行版的介质里面已经自带了,可以从rpm安装。</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_557133">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># yum install epel-release-6-8.noarch.rpm</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">//</code><code class="bash plain">或</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">yum -y </code><code class="bash functions">install</code> <code class="bash plain">http:</code><code class="bash plain">//dl</code><code class="bash plain">.fedoraproject.org</code><code class="bash plain">/pub/epel/6/x86_64/epel-release-6-8</code><code class="bash plain">.noarch.rpm</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
如果出现GPG key retrieval failed: Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6问题,请在线安装epel,下载RPM-GPG-KEY-EPEL-6文件。</p>
<p>
这一步执行之后,会在/etc/yum.repos.d/下生成epel.repo、epel-testing.repo两个文件,用于从Fedora官网下载rpm包。</p>
<p>
<strong>3. 检查内核版本</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_39747">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># uname -r</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">2.6.32-431.el6.x86_64</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments"># cat /etc/redhat-release </code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">CentOS release 6.5 (Final)</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
看到这个最低的内核版本,事实运行起来是没太大问题的,你也可以升级到3.10.x版本。</p>
<p>
另外你也可以运行脚本check-config.sh,来检查内核模块符不符合(下面有些missing的,我的docker还是可以正常启动):</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_661005">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"></code><code class="bash comments"># ./check-config </code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">warning: </code><code class="bash plain">/proc/config</code><code class="bash plain">.gz does not exist, searching other paths </code><code class="bash keyword">for</code> <code class="bash plain">kernel config...</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">info: reading kernel config from </code><code class="bash plain">/boot/config-2</code><code class="bash plain">.6.32-431.el6.x86_64 ...</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">Generally Necessary:</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">- cgroup hierarchy: properly mounted [</code><code class="bash plain">/cgroup</code><code class="bash plain">]</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">- CONFIG_NAMESPACES: enabled</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">- CONFIG_NET_NS: enabled</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">- CONFIG_PID_NS: enabled</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">- CONFIG_IPC_NS: enabled</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain">- CONFIG_UTS_NS: enabled</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash plain">- CONFIG_DEVPTS_MULTIPLE_INSTANCES: enabled</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash plain">- CONFIG_CGROUPS: enabled</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">- CONFIG_CGROUP_CPUACCT: enabled</code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">- CONFIG_CGROUP_DEVICE: enabled</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash plain">- CONFIG_CGROUP_FREEZER: enabled</code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">- CONFIG_CGROUP_SCHED: enabled</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash plain">- CONFIG_MACVLAN: enabled</code>
</div>
<div class="line number19 index18 alt2">
<code class="bash plain">- CONFIG_VETH: enabled</code>
</div>
<div class="line number20 index19 alt1">
<code class="bash plain">- CONFIG_BRIDGE: enabled</code>
</div>
<div class="line number21 index20 alt2">
<code class="bash plain">- CONFIG_NF_NAT_IPV4: missing</code>
</div>
<div class="line number22 index21 alt1">
<code class="bash plain">- CONFIG_IP_NF_TARGET_MASQUERADE: enabled</code>
</div>
<div class="line number23 index22 alt2">
<code class="bash plain">- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing</code>
</div>
<div class="line number24 index23 alt1">
<code class="bash plain">- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled</code>
</div>
<div class="line number25 index24 alt2">
<code class="bash plain">- CONFIG_NF_NAT: enabled</code>
</div>
<div class="line number26 index25 alt1">
<code class="bash plain">- CONFIG_NF_NAT_NEEDED: enabled</code>
</div>
<div class="line number27 index26 alt2">
</div>
<div class="line number28 index27 alt1">
<code class="bash plain">Optional Features:</code>
</div>
<div class="line number29 index28 alt2">
<code class="bash plain">- CONFIG_MEMCG_SWAP: missing</code>
</div>
<div class="line number30 index29 alt1">
<code class="bash plain">- CONFIG_RESOURCE_COUNTERS: enabled</code>
</div>
<div class="line number31 index30 alt2">
<code class="bash plain">- CONFIG_CGROUP_PERF: enabled</code>
</div>
<div class="line number32 index31 alt1">
<code class="bash plain">- Storage Drivers:</code>
</div>
<div class="line number33 index32 alt2">
<code class="bash spaces"> </code><code class="bash plain">- </code><code class="bash string">"aufs"</code><code class="bash plain">:</code>
</div>
<div class="line number34 index33 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_AUFS_FS: missing</code>
</div>
<div class="line number35 index34 alt2">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_EXT4_FS_POSIX_ACL: enabled</code>
</div>
<div class="line number36 index35 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_EXT4_FS_SECURITY: enabled</code>
</div>
<div class="line number37 index36 alt2">
<code class="bash spaces"> </code><code class="bash plain">- </code><code class="bash string">"btrfs"</code><code class="bash plain">:</code>
</div>
<div class="line number38 index37 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_BTRFS_FS: enabled</code>
</div>
<div class="line number39 index38 alt2">
<code class="bash spaces"> </code><code class="bash plain">- </code><code class="bash string">"devicemapper"</code><code class="bash plain">:</code>
</div>
<div class="line number40 index39 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_BLK_DEV_DM: enabled</code>
</div>
<div class="line number41 index40 alt2">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_DM_THIN_PROVISIONING: enabled</code>
</div>
<div class="line number42 index41 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_EXT4_FS: enabled</code>
</div>
<div class="line number43 index42 alt2">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_EXT4_FS_POSIX_ACL: enabled</code>
</div>
<div class="line number44 index43 alt1">
<code class="bash spaces"> </code><code class="bash plain">- CONFIG_EXT4_FS_SECURITY: enabled</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
假如你是自己编译内核,请特别留意几个绝对不能缺少的:DM_THIN_PROVISIONING、IP_NF_TARGET_MASQUERADE、NF_NAT。(AUFS_FS没有对应选项,还不清楚怎么回事,但不是必须)</p>
<p>
<strong>4. 安装 docker-io</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_919431">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># yum install docker-io</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Dependencies Resolved</code>
</div>
<div class="line number3 index2 alt2">
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">===========================================================================================</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">Package Arch Version Repository Size</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">===========================================================================================</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">Installing:</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash spaces"> </code><code class="bash plain">docker-io x86_64 1.1.2-1.el6 epel 4.5 M</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">Installing </code><code class="bash keyword">for</code> <code class="bash plain">dependencies:</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash spaces"> </code><code class="bash plain">lua-alt-getopt noarch 0.7.0-1.el6 epel 6.9 k</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash spaces"> </code><code class="bash plain">lua-filesystem x86_64 1.4.2-1.el6 epel 24 k</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash spaces"> </code><code class="bash plain">lua-lxc x86_64 1.0.6-1.el6 epel 15 k</code>
</div>
<div class="line number13 index12 alt2">
<code class="bash spaces"> </code><code class="bash plain">lxc x86_64 1.0.6-1.el6 epel 120 k</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash spaces"> </code><code class="bash plain">lxc-libs x86_64 1.0.6-1.el6 epel 248 k</code>
</div>
<div class="line number15 index14 alt2">
</div>
<div class="line number16 index15 alt1">
<code class="bash plain">Transaction Summary</code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">===========================================================================================</code>
</div>
<div class="line number18 index17 alt1">
<code class="bash plain">Install 6 Package(s)</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
许多文档介绍到这里,下一步为挂载/cgroup文件系统,我的docker版本为1.1.2,没有修改/etc/fstab的步骤。</p>
<p>
<strong>5. 启动试运行</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_875341">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash comments"># service docker start</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">//</code><code class="bash plain">或</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash comments"># docker -d</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>6. 异常</strong></p>
<p>
在我的一次安装过程中,很不幸遇到下面的问题:</p>
<p>
docker -d启动,或tail -f /var/log/docker查看日志</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_303613">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain"> +job initserver()</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain"> Creating server</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain"> +job serveapi(unix:</code><code class="bash plain">///var/run/docker</code><code class="bash plain">.sock)</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">2014</code><code class="bash plain">/10/22</code> <code class="bash plain">13:02:45 Listening </code><code class="bash keyword">for</code> <code class="bash plain">HTTP on unix (</code><code class="bash plain">/var/run/docker</code><code class="bash plain">.sock)</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">Error running DeviceCreate (createPool) dm_task_run failed</code>
</div>
<div class="line number6 index5 alt1">
<code class="bash plain"> -job initserver() = ERR (1)</code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">2014</code><code class="bash plain">/10/22</code> <code class="bash plain">13:02:45 Error running DeviceCreate (createPool) dm_task_run failed</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">\nWed Oct 22 14:35:54 CST 2014\n</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
再或者是service docker restart</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_866745">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">Stopping docker: [ OK ]</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Starting cgconfig service: Error: cannot </code><code class="bash functions">mount</code> <code class="bash plain">cpuset to </code><code class="bash plain">/cgroup/cpuset</code><code class="bash plain">: Device or resource busy</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">/sbin/cgconfigparser</code><code class="bash plain">; error loading </code><code class="bash plain">/etc/cgconfig</code><code class="bash plain">.conf: Cgroup mounting failed</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">Failed to parse </code><code class="bash plain">/etc/cgconfig</code><code class="bash plain">.conf </code>
</div>
<div class="line number5 index4 alt2">
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">Starting docker: [ OK ]</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
Unable to enable network bridge NAT: iptables failed: iptables -I POSTROUTING -t nat -s 172.17.42.1/16 ! -d 172.17.42.1/16 -j MASQUERADE: iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)<br>
Perhaps iptables or your kernel needs to be upgraded.</p>
<p>
上面的三个异常都是由于内核模块的缺失导致的,这也是自己编译内核来升级带来的风险,于是就有了sciurus的kernel-ml-aufs的rpm包(见参考的第一个链接)。</p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。</p>
<p>
原文链接:https://segmentfault.com/a/1190000000735011</p>
頁:
[1]