详解ubuntu下安装Docker
<p>Docker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。</p>
<p>
<strong>注意:</strong>由于Docker需要在Linux Kernel 3.8及以上才可以很好的工作【本人在ubuntu12.04 lts 内核3.2也正常安装】,官方更是推荐Ubuntu系统,这里有两种选择:Ubuntu 12.04 LTS或最新的Ubuntu 13.10 而本文比较喜欢倾向LTS,幸好有办法解决Kernel版本问题。</p>
<p>
<strong>1、更新Ubuntu内核</strong></p>
<p>
使用如下命令行更新内核至3.8.0-25</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_576753">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">linux-image-3.8.0-25-generic</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">linux-headers-3.8.0-25-generic</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
完成后重启电脑,通过命令 “uname -r” 来查看内核是否成功更新。</p>
<p>
<strong>2、安装lxc-docker</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_699307">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">root@ubuntu: </code><code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">software-properties-common </code><code class="bash comments">#增加 add-apt-repository 命令</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">root@ubuntu: </code><code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">python-software-properties </code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">root@ubuntu: </code><code class="bash functions">sudo</code> <code class="bash plain">add-apt-repository ppa:dotcloud</code><code class="bash plain">/lxc-docker</code> <code class="bash comments">#增加一个ppa源,如:ppa:user/ppa-name</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">root@ubuntu: </code><code class="bash functions">sudo</code> <code class="bash plain">apt-get update </code><code class="bash comments">#更新系统</code>
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">root@ubuntu: </code><code class="bash functions">sudo</code> <code class="bash plain">apt-get </code><code class="bash functions">install</code> <code class="bash plain">lxc-docker</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>3、测试doctor是否安装成功</strong></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_455060">
<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">root@ubuntu:~</code><code class="bash comments"># docker #出现如下信息表示docker安装成功</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Usage: docker COMMAND </code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">-H=: tcp:</code><code class="bash plain">//host</code><code class="bash plain">:port to bind</code><code class="bash plain">/connect</code> <code class="bash plain">to or unix:</code><code class="bash plain">//path/to/socket</code> <code class="bash plain">touse</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash plain">A self-sufficient runtime </code><code class="bash keyword">for</code> <code class="bash plain">linux containers.</code>
</div>
<div class="line number6 index5 alt1">
<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>4、Hello World</strong></p>
<p>
4.1、下载官方ubuntu image</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_378397">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker pull ubuntu </code><code class="bash comments">#pull命令需要到国外的镜像仓库,拉取镜像,因为GFW的关系,拉取失败的可能性很大</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
4.2、运行hello world</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_121609">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker run ubuntu </code><code class="bash plain">/bin/echo</code> <code class="bash plain">hello world</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>5、docker常用命令</strong></p>
<p>
5.1、docker三种命令运行模式</p>
<p>
docker有三种命令运行的方式:短暂方式、交互方式、daemon方式。</p>
<p>
a、短暂方式:就是刚刚的那个”hello world”,命令执行完后,container就终止了,不过并没有消失,可以用 sudo docker ps -</p>
<p>
a 看一下所有的container,第一个就是刚刚执行过的container,可以再次执行一遍:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_793714">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker start container_id</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
不过这次看不到”hello world”了,只能看到ID,用logs命令才能看得到:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_878664">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker logs container_id</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
可以看到两个”hello world”,因为这个container运行了两次。</p>
<p>
b、交互方式</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_430973">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker run -i -t image_name </code><code class="bash plain">/bin/bash</code> <code class="bash comments">#image_name为docker镜像名称</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
c、daemon方式</p>
<p>
即让软件作为长时间服务运行,这就是SAAS啊!<br>
例如,一个无限循环打印的脚本(替换为memcached、apache等,操作方法仍然不变!):</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_594049">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ CONTAINER_ID=$(</code><code class="bash functions">sudo</code> <code class="bash plain">docker run -d ubuntu </code><code class="bash plain">/bin/sh</code> <code class="bash plain">-c </code><code class="bash string">"while true; do echo hello world; sleep 1; done"</code><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>
在container外面查看它的输出</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_269241">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker logs $CONTAINER_ID</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
或者连接上容器实时查看</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_828205">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker attach $CONTAINER_ID</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
终止容器</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_821559">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker stop $CONTAINER_ID</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">ps</code> <code class="bash comments">#看一下,已经没了</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.2、docker ps命令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_973663">
<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 plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">ps</code> <code class="bash comments">#列出当前所有正在运行的container</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">ps</code> <code class="bash plain">-l </code><code class="bash comments">#列出最近一次启动的,且正在运行的container</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">ps</code> <code class="bash plain">-a </code><code class="bash comments">#列出所有的container</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>注意:</strong></p>
<p>
a、其他用法请参考 sudo docker ps -h</p>
<p>
b、还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon</p>
<p>
5.3、docker export命令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_646872">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ container_id=`docker run -d <image_name> </code><code class="bash functions">ls</code><code class="bash plain">`</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ docker </code><code class="bash functions">export</code> <code class="bash plain">$container_id > image.tgz</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.4、docker import命令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_846312">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">cat</code> <code class="bash plain">image.tgz | </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">import</code> <code class="bash plain">- simple_dev </code><code class="bash comments">#simple_dev为自定义的镜像名称</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.5、docker port命令</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_885913">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ docker run -p 80:8080 <image> <cmd> </code><code class="bash comments">#映射容器的8080端口到宿主机的80端口</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.6、删除容器</p>
<p>
5.6.1、删除所有容器</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_866911">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">rm</code> <code class="bash plain">`</code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">ps</code> <code class="bash plain">-a -q`</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.6.1、删除具体某个容器</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_699602">
<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>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker </code><code class="bash functions">rm</code> <code class="bash plain">$CONTAINER_ID</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
5.7、docker命令快速参考</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_411887">
<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">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker images </code><code class="bash comments">#查看本地镜像</code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker attach $CONTAINER_ID </code><code class="bash comments">#启动一个已存在的docker实例</code>
</div>
<div class="line number3 index2 alt2">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker stop $CONTAINER_ID </code><code class="bash comments">#停止docker实例</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker logs $CONTAINER_ID </code><code class="bash comments">#查看docker实例运行日志,确保正常运行</code>
</div>
<div class="line number5 index4 alt2">
</div>
<div class="line number6 index5 alt1">
<code class="bash plain">linjiqin@ubuntu:~$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker inspect $CONTAINER_ID </code><code class="bash comments">#查看container的实例属性,比如ip等等 </code>
</div>
<div class="line number7 index6 alt2">
</div>
<div class="line number8 index7 alt1">
<code class="bash functions">sudo</code> <code class="bash plain">docker run -t -i -</code><code class="bash functions">v</code> <code class="bash plain">/home/linjiqin/dev/docker</code><code class="bash plain">:</code><code class="bash plain">/home/mycontainer</code><code class="bash plain">:rw -p 8000:8000 mydocker </code><code class="bash plain">/bin/bash</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
写在前面,运行我们的镜像的命令使用上面的为参考,这样会挂载本地文件夹,并且会映射container的8000端口到宿主机的8000端口</p>
<p>
/home/linjiqin/dev/docker为要挂载的本地文件夹,需提前创建</p>
<p>
/home/mycontainer为docker映射路径,执行上面命令会帮我们创建</p>
<p>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
原文链接:http://www.cnblogs.com/linjiqin/p/3625609.html</p>
頁:
[1]