三梵 發表於 2018-4-8 18:32:00

Docker 创建镜像、修改、上传镜像

<p><strong>Docker 创建镜像、修改、上传镜像</strong></p>
<p>&nbsp;</p>
<p>–创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。</p>
<p><strong>一、创建镜像</strong></p>
<p>创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。</p>
<p><strong>二、修改已有镜像</strong></p>
<p>1、先使用下载的镜像启动容器。</p>
<div class="jb51code">
<pre class="brush:bash;">$ docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#</pre>
</div>
<p>注意:记住容器的 ID,稍后还会用到。</p>
<p>2、在容器中添加 json 和 gem 两个应用。</p>
<div class="jb51code">
<pre class="brush:bash;">root@0b2616b0e5a8:/# gem install json</pre>
</div>
<p>当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c</pre>
</div>
<p><strong>其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。</strong></p>
<p><strong>使用 docker images 来查看新创建的镜像。</strong></p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker images
REPOSITORY   TAG   IMAGE ID    CREATED    VIRTUAL SIZE
training/sinatralatest 5bc342fa0b9110 hours ago 446.7 MB
ouruser/sinatra   v2   3c59e02ddd1a10 hours ago 446.7 MB
ouruser/sinatra   latest 5db5f847126110 hours ago 446.7 MB</pre>
</div>
<p>之后,可以使用新的镜像来启动容器</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
root@78e82f680994:/#</pre>
</div>
<p><strong>三、利用 Dockerfile 来创建镜像</strong></p>
<p>使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。<br>新建一个目录和一个 Dockerfile</p>
<div class="jb51code">
<pre class="brush:bash;">$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile</pre>
</div>
<p>Dockerfile 中每一条指令都创建镜像的一层,例如:</p>
<div class="jb51code">
<pre class="brush:bash;"># This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee &lt;newbee@docker.com&gt;
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
</pre>
</div>
<p>Dockerfile 基本的语法是</p>
<p>使用 # 来注释&nbsp;</p>
<p><strong>FROM&nbsp;</strong>指令告诉 Docker 使用哪个镜像作为基础&nbsp;</p>
<p>接着是维护者的信息&nbsp;</p>
<p><strong>RUN</strong>&nbsp;开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件&nbsp;</p>
<p>编写完成 Dockerfile 后可以使用 docker build 来生成镜像。</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker build -t="ouruser/sinatra:v2" .
Uploading context 2.56 kB
Uploading context
Step 0 : FROM ubuntu:14.04
---&gt; 99ec81b80c55
Step 1 : MAINTAINER Newbee &lt;newbee@docker.com&gt;
---&gt; Running in 7c5664a8a0c1
---&gt; 2fa8ca4e2a13
Removing intermediate container 7c5664a8a0c1
Step 2 : RUN apt-get -qq update
---&gt; Running in b07cc3fb4256
---&gt; 50d21070ec0c
Removing intermediate container b07cc3fb4256
Step 3 : RUN apt-get -qqy install ruby ruby-dev
---&gt; Running in a5b038dd127e
Selecting previously unselected package libasan0:amd64.
(Reading database ... 11518 files and directories currently installed.)
Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ...
Setting up ruby (1:1.9.3.4) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
---&gt; 2acb20f17878
Removing intermediate container a5b038dd127e
Step 4 : RUN gem install sinatra
---&gt; Running in 5e9d0065c1f7
. . .
Successfully installed rack-protection-1.5.3
Successfully installed sinatra-1.4.5
4 gems installed
---&gt; 324104cde6ad
Removing intermediate container 5e9d0065c1f7
Successfully built 324104cde6ad
</pre>
</div>
<p><strong>其中 -t 标记来添加 tag,指定新的镜像的用户信息。“.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。</strong></p>
<p>可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。</p>
<p><strong>注意一个镜像不能超过 127 层</strong></p>
<p>此外,还可以利用 ADD 命令复制本地文件到镜像;用 EXPOSE 命令来向外部开放端口;用 CMD 命令来描述容器启动后运行的程序等。例如</p>
<div class="jb51code">
<pre class="brush:bash;"># put my local web site in myApp folder to /var/www
ADD myApp /var/www
# expose httpd port
EXPOSE 80
# the command to run
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]</pre>
</div>
<p>现在可以利用新创建的镜像来启动一个容器。</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
root@8196968dac35:/#
</pre>
</div>
<p>还可以用 docker tag 命令来修改镜像的标签。</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel
$ sudo docker images ouruser/sinatra
REPOSITORY   TAG   IMAGE ID   CREATED    VIRTUAL SIZE
ouruser/sinatra   latest 5db5f8471261 11 hours ago446.7 MB
ouruser/sinatra   devel5db5f8471261 11 hours ago446.7 MB
ouruser/sinatra   v2   5db5f8471261 11 hours ago446.7 MB</pre>
</div>
<p><strong>四、从本地文件系统导入</strong></p>
<p>要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建:openvz 的模板下载地址为templates 。</p>
<p>比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:</p>
<div class="jb51code">
<pre class="brush:bash;">sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04</pre>
</div>
<p>然后查看新导入的镜像。</p>
<div class="jb51code">
<pre class="brush:bash;">docker images
REPOSITORY   TAG         IMAGE ID      CREATED       VIRTUAL SIZE
ubuntu       14.04      05ac7c0b9383    17 seconds ago   215.5 MB</pre>
</div>
<p><strong>五、上传镜像</strong></p>
<p>用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。例如,用户在 Docker Hub 上完成注册后,可以推送自己的镜像到仓库中。</p>
<div class="jb51code">
<pre class="brush:bash;">$ sudo docker push ouruser/sinatra
The push refers to a repository (len: 1)
Sending image list
Pushing repository ouruser/sinatra (3 tags)</pre>
</div>
<p>&nbsp;</p>
<h1 class="YaHei">Docker镜像保存为文件及从文件导入镜像的方法</h1>
<p><strong>1、概述</strong></p>
<p>我们制作好镜像后,有时需要将镜像复制到另一台服务器使用。</p>
<p>能达到以上目的有两种方式,一种是上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所以如果使用仓库的方式,只能自己搭建私有仓库,这会在另一篇文章中介绍。</p>
<p>如果我们仅仅是要复制到另外少数的服务器,搭建私有仓库显然没有这个必要,而将镜像保存为文件上传到其他服务器再从文件中载入镜像也是一个不错的选择。</p>
<p>可以使用Docker save和Docker load命令来存储和载入镜像。</p>
<p><strong>2、保存镜像为文件</strong></p>
<p>如果要讲镜像保存为本地文件,可以使用Docker save命令。</p>
<p>命令格式:</p>
<div class="jb51code">
<div>
<div id="highlighter_432609" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker save -o 要保存的文件名&nbsp; 要保存的镜像</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>首先查看当前的镜像列表:</p>
<div class="jb51code">
<div>
<div id="highlighter_239048" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker images</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><img src="http://files.jb51.net/file_images/article/201703/201703100917531.png"></p>
<p>比如这里,我们将java8的镜像保存为文件:</p>
<div class="jb51code">
<div>
<div id="highlighter_735878" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker save -o java8.</code><code class="bash functions">tar</code> <code class="bash plain">lwieske</code><code class="bash plain">/java-8</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>完成后通过 ls 命令即可看到文件。&nbsp;</p>
<p><strong>3、从文件载入镜像</strong></p>
<p>从文件载入镜像可以使用Docker load命令。</p>
<p>命令格式:</p>
<div class="jb51code">
<div>
<div id="highlighter_910624" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load --input 文件</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>或者</p>
<div class="jb51code">
<div>
<div id="highlighter_382995" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load &lt; 文件名</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>此时会导入镜像以及相关的元数据信息等。</p>
<p>首先使用SSH工具将文件上传到另一台服务器。</p>
<p>然后通过命令载入镜像:</p>
<div class="jb51code">
<div>
<div id="highlighter_271970" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load &lt; java8.</code><code class="bash functions">tar</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>导入后可以使用docker images命令查看:</p>
<p><img src="http://files.jb51.net/file_images/article/201703/201703100917532.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 class="YaHei">Docker镜像制作详解介绍</h1>
<p>最近由于工作原因,需要对Docker镜像进行制作,这里记录下,也许对大家也有一定帮助!&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>写在前面:本文docker镜像制作方法更适用于基于已有docker镜像一次性修改。</p>
<p><strong>推荐用Docker File制作docker镜像。<br></strong></p>
<p>原理是一样的,但是用docker file制作docker镜像能够记录下操作步骤,方便以后更改或者镜像丢失后重新创建。<br>本文以Ubuntu为基础镜像,预启动一个django项目和ssh服务,制作一个新的镜像。</p>
<p><strong>1、基础镜像</strong></p>
<p>我选用的是从Docker官网下载的ubuntu镜像。</p>
<p>docker run ubuntu</p>
<p>或者</p>
<p>docker pull ubuntu</p>
<p><strong>2、安装ssh服务</strong></p>
<p>docker run -i -t ubuntu /bin/bash #创建一个容器,-t是临时终端。</p>
<p>进入ubuntu后,安装openssh</p>
<p>apt-get install openssh-server #安装ssh</p>
<p>#需要修改/etc/sshd/sshd_config文件中内容</p>
<p>PermitRootLogin yes</p>
<p>UsePAM no</p>
<p>修改ubuntu的root用户密码,以便以后ssh登陆:</p>
<p>sudo passwd root</p>
<p><strong>3、制作新的镜像</strong></p>
<p>到此,我们需要把这个带有ssh服务的容器提交成一个镜像,方便以后在这个基础上各种改造:</p>
<p>docker commit &lt;container id&gt; &lt;image name&gt;</p>
<p><strong>4、基于现有ssh服务的Ubuntu镜像,加入django项目,并设置随容器自启动</strong></p>
<p>ok,经过以上步骤,doker images可以查看,新提交的doker镜像已经在里面了,例如image name为ssh-ubuntu的新镜像。<br>最基础的Ubuntu容器已经没有作用了<br>利用</p>
<p>doker stop &lt;container id&gt;<br>doker rm &lt;Container id&gt;</p>
<p>清楚刚刚启动的最基础的Ubuntu容器</p>
<p>下面,要基于我们新的ssh-ubuntu进行个性化定制,首先,要将这个镜像运行起来</p>
<p>docker run -d -p 5001:22 ssh-ubuntu /usr/sbin/sshd -D</p>
<p>(-p为端口映射 容器中22端口应射程主机5001端口&nbsp; ||&nbsp;&nbsp; /usr/sbin/sshd -D是指定容器启动后要运行的command,本处是启动ssh服务)</p>
<p>容器启动后,我们可以通过ssh的方式,登陆到容器中</p>
<p>ssh root@doker0_ip -p 5001(22映射端口)</p>
<p>进入到容器后,就可以进行下一步个性化定制了。例如我要把我的django项目放到镜像中,并随着容器启动而启动。</p>
<p>(1)把django项目拷贝到容器中,用scp命令即可。</p>
<p>(2)比较通用的开机启动进程方法:</p>
<p>安装supervisor!</p>
<p>apt-get update &amp;&amp; apt-get install supervisor</p>
<p>(如果apt-get install找不到包,先update一下)</p>
<p>然后编辑配置文件,vi /etc/supervisord.conf</p>
<div class="jb51code">
<div>
<div id="highlighter_27203" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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 plain"></code></div>
<div class="line number2 index1 alt1"><code class="bash plain">nodaemon=</code><code class="bash functions">true</code></div>
<div class="line number3 index2 alt2"><code class="bash plain"></code></div>
<div class="line number4 index3 alt1"><code class="bash functions">command</code><code class="bash plain">=</code><code class="bash plain">/usr/sbin/sshd</code> <code class="bash plain">-D</code></div>
<div class="line number5 index4 alt2">&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain"></code></div>
<div class="line number7 index6 alt2"><code class="bash functions">command</code><code class="bash plain">=python ~</code><code class="bash plain">/manager</code><code class="bash plain">.py runserver 0.0.0.0:9999</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>然后保存退出即可。</p>
<p>用3小节方法重新制作新的镜像,清除当前容器即可。</p>
<p><strong>5、运行新镜像</strong></p>
<p>docker run -d -p 5001:22 -p 5000:9999 &lt;image-name&gt; /etc/supervisord&nbsp;<br>此时,可以访问主机5000端口,看看能不能访问到容器里面的django项目。<br>镜像制作大体过程至此完成。</p>
<p>*****************************************************************************************************************************************************</p>
<p>docker 本身是有push 来上传的 index.docker.io 的,使用是用pull拉取。但是没有条件搭建本地docker仓库或者需要将应用导出到另外一个Docker环境中,我们可以将docker镜像导出到一个文件,具体做法如下:</p>
<p>&nbsp;sudo docker export &lt;容器id&gt;&nbsp; &gt;&nbsp; docker_app.tar</p>
<p>完成后我们刚才制作的容器就导出成了 docker_app.tar 文件, 以后在其他机器部署的时候执行导入</p>
<p>cat docker_app.tar | sudo docker import - docker_app</p>
<p>管道后面的 docker_app 为导入后image命名,自己指定。</p>
<p>&nbsp;</p>
<h1>Docker镜像的创建、存出、载入</h1>
<p>创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建,本博文讲解前两种。</p>
<h2>基于已有镜像的容器创建</h2>
<p>该方法是使用docker commit命令,其命令格式为:</p>
<div id="crayon-579c365f91c28199153630" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-v">commit&nbsp;<span class="crayon-sy">[<span class="crayon-v">OPTIONS<span class="crayon-sy">]&nbsp;<span class="crayon-v">CONTAINER&nbsp;<span class="crayon-sy">[<span class="crayon-v">REPOSITORY<span class="crayon-sy">[<span class="crayon-o">:<span class="crayon-v">TAG<span class="crayon-sy">]<span class="crayon-sy">]</span></span></span></span></span></span></span></span></span></span></span></span></span></div>


</blockquote>


</div>
<p>主要参数选项包括:</p>
<ul>
<li>-a ,–author=”” 作者信息</li>
<li>-m,–message=”” 提交信息</li>
<li>-p,–pause=true 提交是暂停容器运行</li>


</ul>
<p>比如,先创建一个运行bash的ubuntu容器:</p>
<div id="crayon-579c365f91c36026816996" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">
<div id="crayon-579c365f91c36026816996-1" class="crayon-line"><span class="crayon-e">docker&nbsp;<span class="crayon-v">run&nbsp;<span class="crayon-o">–<span class="crayon-e">it&nbsp;<span class="crayon-v">ubuntu&nbsp;<span class="crayon-o">/<span class="crayon-v">bin<span class="crayon-o">/<span class="crayon-r">bash</span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c36026816996-2" class="crayon-line crayon-striped-line"><span class="crayon-v">root<span class="crayon-sy">@<span class="crayon-v">d8990fec2141<span class="crayon-o">:<span class="crayon-o">/<span class="crayon-c"># touch test</span></span></span></span></span></span></div>
<div id="crayon-579c365f91c36026816996-3" class="crayon-line"><span class="crayon-v">root<span class="crayon-sy">@<span class="crayon-v">d8990fec2141<span class="crayon-o">:<span class="crayon-o">/<span class="crayon-c"># exit</span></span></span></span></span></span></div>


</div>


</blockquote>


</div>
<p>然后根据创建的这个容器来提交一个新的镜像,提交时需要用到容器ID。</p>
<div id="crayon-579c365f91c3c513543654" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-v">commit&nbsp;<span class="crayon-o">–<span class="crayon-i">m&nbsp;<span class="crayon-s">“test”&nbsp;<span class="crayon-o">–<span class="crayon-i">a&nbsp;<span class="crayon-s">“zmc”&nbsp;<span class="crayon-e">d8990fec2141&nbsp;<span class="crayon-v">testimage</span></span></span></span></span></span></span></span></span></span></div>


</blockquote>


</div>
<p>如果成功的话,就会返回新镜像的长ID号,然后可以查看看在本地已有的镜像:</p>
<div id="crayon-579c365f91c41669575423" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">
<div id="crayon-579c365f91c41669575423-1" class="crayon-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">images</span></span></div>
<div id="crayon-579c365f91c41669575423-2" class="crayon-line crayon-striped-line"><span class="crayon-e">REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">IMAGE&nbsp;<span class="crayon-r">ID<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">VIRTUAL&nbsp;<span class="crayon-e">SIZE</span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c41669575423-3" class="crayon-line crayon-marked-line crayon-top crayon-bottom"><span class="crayon-e">testimage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">baea98d5a437&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">About&nbsp;<span class="crayon-i">a&nbsp;<span class="crayon-e">minute&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;<span class="crayon-cn">188.3&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c41669575423-4" class="crayon-line crayon-striped-line">&nbsp;</div>
<p>……</p>


</div>


</blockquote>


</div>
<p>第三行就是刚刚创建的镜像。</p>
<p>PS:利用此容器创建的镜像Id与此容器的镜像id不同,可知它们不是同一镜像。</p>
<h2>基于本地模板导入</h2>
<p>也可以从操作系统模板文件导入一个镜像,比如使用OpenVZ提供的模板创建,OPENVZ下载模板在:<strong>http://openvz.org/Download/template/precreated。</strong></p>
<p>我尝试使用了Ubuntu14.04的模板:</p>
<div id="crayon-579c365f91c46251157529" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap">
<div id="crayon-579c3ac715522627457033" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap">&nbsp;</div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-579c3ac715522627457033-1">1</div>


</div>


</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-579c3ac715522627457033-1" class="crayon-line"><span class="crayon-e">wget&nbsp;<span class="crayon-v">http<span class="crayon-o">:<span class="crayon-c">//download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz</span></span></span></span></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>


</div>
<p>下载完之后就可以导入了:</p>
<div id="crayon-579c365f91c4b404455644" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-main"><span class="crayon-e">sudo&nbsp;<span class="crayon-r">cat&nbsp;<span class="crayon-v">ubuntu<span class="crayon-o">–<span class="crayon-cn">14.04<span class="crayon-o">–<span class="crayon-v">x86_64<span class="crayon-o">–<span class="crayon-v">minimal<span class="crayon-e">.tar<span class="crayon-e">.gz&nbsp;<span class="crayon-o">|&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-v">import&nbsp;<span class="crayon-o">–&nbsp;<span class="crayon-v">ubuntu<span class="crayon-o">:<span class="crayon-cn">14.04</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>


</blockquote>


</div>
<p>其实只是两个命令,不过很显而易见,就不加解释了。成功的话,就会返回根据模板建立的镜像的长ID</p>
<blockquote>
<div id="crayon-579c365f91c50116687080-1" class="crayon-line crayon-marked-line crayon-top crayon-bottom"><span class="crayon-e">sudo&nbsp;<span class="crayon-r">cat&nbsp;<span class="crayon-v">ubuntu<span class="crayon-o">–<span class="crayon-cn">14.04<span class="crayon-o">–<span class="crayon-v">x86_64<span class="crayon-o">–<span class="crayon-v">minimal<span class="crayon-e">.tar<span class="crayon-e">.gz&nbsp;<span class="crayon-o">|&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-v">import&nbsp;<span class="crayon-o">–&nbsp;<span class="crayon-v">ubuntu<span class="crayon-o">:<span class="crayon-cn">14.04</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c50116687080-2" class="crayon-line crayon-striped-line"><span class="crayon-e">ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35</span></div>


</blockquote>
<p>然后就可以查看本地的镜像:</p>
<div id="crayon-579c365f91c50116687080" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-main">
<div id="crayon-579c365f91c50116687080-3" class="crayon-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">images</span></span></div>
<div id="crayon-579c365f91c50116687080-4" class="crayon-line crayon-striped-line"><span class="crayon-e">REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">IMAGE&nbsp;<span class="crayon-r">ID<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">VIRTUAL&nbsp;<span class="crayon-e">SIZE</span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c50116687080-5" class="crayon-line"><span class="crayon-i">ubuntu<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">14.04<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">ab80404d13d5<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">56&nbsp;<span class="crayon-e">seconds&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">215.4&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c50116687080-6" class="crayon-line crayon-striped-line"><span class="crayon-e">testimage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">baea98d5a437<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">29&nbsp;<span class="crayon-e">minutes&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">188.3&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c50116687080-7" class="crayon-line"><span class="crayon-e">….</span></div>


</div>


</blockquote>


</div>
<p>其实可以看出,虽然模板才75M,但创建的镜像并不小。</p>
<h2><strong>镜像的存出和载入</strong></h2>
<p>可以利用docker save和docker命令来存出和载入镜像。</p>
<h2>存出镜像</h2>
<p>如果想要把镜像存出到本地文件,可以使用docker save命令,例如,存出本地的刚才创建的testimage:lastest为镜像文件testimage.tar文件:</p>
<div id="crayon-579c365f91c55144336667" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-main">
<div id="crayon-579c365f91c55144336667-1" class="crayon-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">images</span></span></div>
<div id="crayon-579c365f91c55144336667-2" class="crayon-line crayon-striped-line"><span class="crayon-e">REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">IMAGE&nbsp;<span class="crayon-r">ID<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">VIRTUAL&nbsp;<span class="crayon-e">SIZE</span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c55144336667-3" class="crayon-line"><span class="crayon-e">testimage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">baea98d5a437<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">25&nbsp;<span class="crayon-e">minutes&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">188.3&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c55144336667-4" class="crayon-line crayon-striped-line"><span class="crayon-e">ubuntu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">fa81ed084842<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">3&nbsp;<span class="crayon-e">days&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">188.3&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c55144336667-5" class="crayon-line">….</div>
<div id="crayon-579c365f91c55144336667-6" class="crayon-line crayon-marked-line crayon-top crayon-bottom crayon-striped-line"><span class="crayon-e">docker&nbsp;<span class="crayon-v">save&nbsp;<span class="crayon-o">–<span class="crayon-v">o&nbsp;<span class="crayon-o">/<span class="crayon-v">data<span class="crayon-o">/<span class="crayon-v">testimage<span class="crayon-e">.tar&nbsp;<span class="crayon-v">testimage<span class="crayon-o">:<span class="crayon-v">latest</span></span></span></span></span></span></span></span></span></span></span></span></div>


</div>


</blockquote>


</div>
<p>上面的第6行就是存出代码,这时在/data下就有一个testimage.tar文件,这时我们把本地镜像rmi掉,然后尝试载入。</p>
<h2>载入镜像</h2>
<p>删除镜像之后的状态:</p>
<div id="crayon-579c365f91c5b537310874" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap">&nbsp;</div>
<blockquote>
<div class="crayon-main">
<div id="crayon-579c365f91c5b537310874-1" class="crayon-line"><span class="crayon-v">ubuntu<span class="crayon-sy">@<span class="crayon-v">VM<span class="crayon-o">–<span class="crayon-cn">223<span class="crayon-o">–<span class="crayon-cn">238<span class="crayon-o">–<span class="crayon-v">ubuntu<span class="crayon-o">:<span class="crayon-o">/<span class="crayon-v">data<span class="crayon-sy">$&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-e">rmi&nbsp;<span class="crayon-e">baea98d5a437</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c5b537310874-2" class="crayon-line crayon-striped-line"><span class="crayon-v">Untagged<span class="crayon-o">:&nbsp;<span class="crayon-v">testimage<span class="crayon-o">:<span class="crayon-e">latest</span></span></span></span></span></div>
<div id="crayon-579c365f91c5b537310874-3" class="crayon-line"><span class="crayon-v">Deleted<span class="crayon-o">:&nbsp;<span class="crayon-e">baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5b</span></span></span></div>
<div id="crayon-579c365f91c5b537310874-4" class="crayon-line crayon-striped-line"><span class="crayon-v">ubuntu<span class="crayon-sy">@<span class="crayon-v">VM<span class="crayon-o">–<span class="crayon-cn">223<span class="crayon-o">–<span class="crayon-cn">238<span class="crayon-o">–<span class="crayon-v">ubuntu<span class="crayon-o">:<span class="crayon-o">/<span class="crayon-v">data<span class="crayon-sy">$&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-e">images</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c5b537310874-5" class="crayon-line"><span class="crayon-e">REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">IMAGE&nbsp;<span class="crayon-r">ID<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">VIRTUAL&nbsp;<span class="crayon-e">SIZE</span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c5b537310874-6" class="crayon-line crayon-striped-line"><span class="crayon-i">ubuntu<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">14.04<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">ab80404d13d5<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">5&nbsp;<span class="crayon-e">minutes&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">215.4&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></span></span></div>


</div>


</blockquote>


</div>
<p>然后载入镜像:</p>
<blockquote>
<div id="crayon-579c365f91c60080745479-1" class="crayon-line crayon-marked-line crayon-top crayon-bottom"><span class="crayon-e">docker&nbsp;<span class="crayon-v">load&nbsp;<span class="crayon-o">—<span class="crayon-e">input&nbsp;<span class="crayon-v">testimage<span class="crayon-e">.tar</span></span></span></span></span></span></div>
<div id="crayon-579c365f91c60080745479-2" class="crayon-line crayon-striped-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">images</span></span></div>
<div id="crayon-579c365f91c60080745479-3" class="crayon-line"><span class="crayon-e">REPOSITORY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">TAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">IMAGE&nbsp;<span class="crayon-r">ID<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">CREATED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">VIRTUAL&nbsp;<span class="crayon-e">SIZE</span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c60080745479-4" class="crayon-line crayon-striped-line"><span class="crayon-i">ubuntu<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">14.04<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">ab80404d13d5<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">6&nbsp;<span class="crayon-e">minutes&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">215.4&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c60080745479-5" class="crayon-line"><span class="crayon-e">testimage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-e">latest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-i">baea98d5a437<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">35&nbsp;<span class="crayon-e">minutes&nbsp;<span class="crayon-i">ago<span class="crayon-h">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="crayon-cn">188.3&nbsp;<span class="crayon-e">MB</span></span></span></span></span></span></span></span></span></span></div>


</blockquote>
<p>第一行就是载入镜像,还可以简化写成:</p>
<div id="crayon-579c365f91c65472884309" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-main"><span class="crayon-e">docker&nbsp;<span class="crayon-v">load&nbsp;<span class="crayon-o">&lt;&nbsp;<span class="crayon-v">testimage<span class="crayon-e">.tar</span></span></span></span></span></div>


</blockquote>


</div>
<p>载入操作将会导入镜像以及相关的元数据信息(包括标签等)。</p>
<h1>镜像的上传</h1>
<p>最后说点镜像的上传,镜像的管理方式非常像git,可以使用docker push命令上传自己本地镜像到仓库,默认上传到DockerHub官方仓库(需要登陆),命令格式:</p>
<div id="crayon-579c365f91c6a303288162" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">&nbsp;<span class="crayon-e">docker&nbsp;<span class="crayon-e">push&nbsp;<span class="crayon-v">NAME<span class="crayon-sy">[<span class="crayon-o">:<span class="crayon-v">TAG<span class="crayon-sy">]</span></span></span></span></span></span></span></div>


</blockquote>


</div>
<p>在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签:</p>
<div id="crayon-579c365f91c6f500380278" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<blockquote>
<div class="crayon-plain-wrap">
<div id="crayon-579c365f91c6f500380278-1" class="crayon-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">tag&nbsp;<span class="crayon-v">testimage<span class="crayon-o">:<span class="crayon-e">lastest&nbsp;<span class="crayon-v">zmc<span class="crayon-o">/<span class="crayon-v">testimage<span class="crayon-o">:<span class="crayon-e">lastest</span></span></span></span></span></span></span></span></span></span></div>
<div id="crayon-579c365f91c6f500380278-2" class="crayon-line crayon-striped-line"><span class="crayon-e">docker&nbsp;<span class="crayon-e">pushzmc<span class="crayon-o">/<span class="crayon-v">testimage<span class="crayon-o">:<span class="crayon-v">lastest</span></span></span></span></span></span></div>


</div>


</blockquote>


</div>
<p>有利于上传之后的区分。</p>
<p>我觉得无论是运维团队还是开发团队还是一个实验室,都有必要有一个自己的Docker仓库,可以存放符合自己需求的环境或系统镜像,可以实现快速部署。</p>
<p>&nbsp;</p>
<h1 class="YaHei">docker 镜像加速CentOS7详细介绍</h1>
<p><strong>前言</strong></p>
<p>在Docker Hub官网上注册帐号,即可下载使用仓库里的全部的docker镜像。而因为网络原因,国内的开发者没办法流畅的下载镜像,经常会出现下载中断的错误。解决方法就是使用国内的容器Hub加速服务,本质就是更改pull优先级较高的服务器为国内的站点。</p>
<p><strong>国内docker镜像加速站</strong></p>
<p>阿里云<br>DaoCloud<br>灵雀云</p>
<p><strong>系统环境</strong></p>
<p>操作系统: CentOS 7&nbsp;<br>docker版本: 1.9.1</p>
<p><strong>DaoCloud加速</strong></p>
<p>DaoCloud现在是提供一个一键脚本配置registry-mirror,然而对于上述环境是不起作用的。</p>
<p>执行docker守护服务的help命令,发现没有–registry-mirror这个选项,而是使用–add-registry选项。</p>
<p>具体命令如下:</p>
<div class="jb51code">
<div>
<div id="highlighter_50634" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">$ </code><code class="bash functions">sudo</code> <code class="bash plain">docker daemon -h</code></div>
<div class="line number2 index1 alt1">&nbsp;</div>
<div class="line number3 index2 alt2"><code class="bash plain">Usage: docker daemon </code></div>
<div class="line number4 index3 alt1">&nbsp;</div>
<div class="line number5 index4 alt2"><code class="bash plain">Enable daemon mode</code></div>
<div class="line number6 index5 alt1">&nbsp;</div>
<div class="line number7 index6 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--add-registry=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Registry to query before a public one</code></div>
<div class="line number8 index7 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--api-cors-header=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set CORS headers </code><code class="bash keyword">in</code> <code class="bash plain">the remote API</code></div>
<div class="line number9 index8 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">-b, --bridge=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attach containers to a network bridge</code></div>
<div class="line number10 index9 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--bip=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify network bridge IP</code></div>
<div class="line number11 index10 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--block-registry=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Don't contact given registry</code></div>
<div class="line number12 index11 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--cluster-advertise=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address or interface name to advertise</code></div>
<div class="line number13 index12 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--cluster-store=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set the cluster store</code></div>
<div class="line number14 index13 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--cluster-store-opt=map[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set cluster store options</code></div>
<div class="line number15 index14 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--confirm-def-push=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Confirm a push to default registry</code></div>
<div class="line number16 index15 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">-D, --debug=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable debug mode</code></div>
<div class="line number17 index16 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--default-gateway=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Container default gateway IPv4 address</code></div>
<div class="line number18 index17 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--default-gateway-v6=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Container default gateway IPv6 address</code></div>
<div class="line number19 index18 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--default-</code><code class="bash functions">ulimit</code><code class="bash plain">=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set default ulimits </code><code class="bash keyword">for</code> <code class="bash plain">containers</code></div>
<div class="line number20 index19 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--disable-legacy-registry=</code><code class="bash functions">false</code>&nbsp;&nbsp; <code class="bash plain">Do not contact legacy registries</code></div>
<div class="line number21 index20 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--dns=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DNS server to use</code></div>
<div class="line number22 index21 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--dns-opt=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DNS options to use</code></div>
<div class="line number23 index22 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--dns-search=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DNS search domains to use</code></div>
<div class="line number24 index23 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">-e, --</code><code class="bash functions">exec</code><code class="bash plain">-driver=native&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exec driver to use</code></div>
<div class="line number25 index24 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--</code><code class="bash functions">exec</code><code class="bash plain">-opt=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set </code><code class="bash functions">exec</code> <code class="bash plain">driver options</code></div>
<div class="line number26 index25 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--</code><code class="bash functions">exec</code><code class="bash plain">-root=</code><code class="bash plain">/var/run/docker</code>&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Root of the Docker execdriver</code></div>
<div class="line number27 index26 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--fixed-cidr=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPv4 subnet </code><code class="bash keyword">for</code> <code class="bash plain">fixed IPs</code></div>
<div class="line number28 index27 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--fixed-cidr-v6=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPv6 subnet </code><code class="bash keyword">for</code> <code class="bash plain">fixed IPs</code></div>
<div class="line number29 index28 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">-G, --group=docker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Group </code><code class="bash keyword">for</code> <code class="bash plain">the unix socket</code></div>
<div class="line number30 index29 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">-g, --graph=</code><code class="bash plain">/var/lib/docker</code>&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Root of the Docker runtime</code></div>
<div class="line number31 index30 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">-H, --host=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Daemon socket(s) to connect to</code></div>
<div class="line number32 index31 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--help=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Print usage</code></div>
<div class="line number33 index32 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--icc=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable inter-container communication</code></div>
<div class="line number34 index33 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--insecure-registry=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enable insecure registry communication</code></div>
<div class="line number35 index34 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--ip=0.0.0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default IP when binding container ports</code></div>
<div class="line number36 index35 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--ip-forward=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable net.ipv4.ip_forward</code></div>
<div class="line number37 index36 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--ip-masq=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable IP masquerading</code></div>
<div class="line number38 index37 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--iptables=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable addition of iptables rules</code></div>
<div class="line number39 index38 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--ipv6=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable IPv6 networking</code></div>
<div class="line number40 index39 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">-l, --log-level=info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set the logging level</code></div>
<div class="line number41 index40 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--label=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set key=value labels to the daemon</code></div>
<div class="line number42 index41 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--log-driver=json-</code><code class="bash functions">file</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Default driver </code><code class="bash keyword">for</code> <code class="bash plain">container logs</code></div>
<div class="line number43 index42 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--log-opt=map[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set log driver options</code></div>
<div class="line number44 index43 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--mtu=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set the containers network MTU</code></div>
<div class="line number45 index44 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">-p, --pidfile=</code><code class="bash plain">/var/run/docker</code><code class="bash plain">.pid&nbsp; Path to use </code><code class="bash keyword">for</code> <code class="bash plain">daemon PID </code><code class="bash functions">file</code></div>
<div class="line number46 index45 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--registry-mirror=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Preferred Docker registry mirror</code></div>
<div class="line number47 index46 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">-s, --storage-driver=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Storage driver to use</code></div>
<div class="line number48 index47 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--selinux-enabled=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Enable selinux support</code></div>
<div class="line number49 index48 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--storage-opt=[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set storage driver options</code></div>
<div class="line number50 index49 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--tls=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Use TLS; implied by --tlsverify</code></div>
<div class="line number51 index50 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--tlscacert=~/.docker</code><code class="bash plain">/ca</code><code class="bash plain">.pem&nbsp;&nbsp;&nbsp;&nbsp; Trust certs signed only by this CA</code></div>
<div class="line number52 index51 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--tlscert=~/.docker</code><code class="bash plain">/cert</code><code class="bash plain">.pem&nbsp;&nbsp;&nbsp;&nbsp; Path to TLS certificate </code><code class="bash functions">file</code></div>
<div class="line number53 index52 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--tlskey=~/.docker</code><code class="bash plain">/key</code><code class="bash plain">.pem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Path to TLS key </code><code class="bash functions">file</code></div>
<div class="line number54 index53 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">--tlsverify=</code><code class="bash functions">false</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Use TLS and verify the remote</code></div>
<div class="line number55 index54 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">--userland-proxy=</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">Use userland proxy </code><code class="bash keyword">for</code> <code class="bash plain">loopback traffic</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>在文件/etc/sysconfig/docker中增加以下代码:</p>
<p>ADD_REGISTRY='--add-registry&nbsp;[你的加速站网址]'</p>
<p>然后,重启Docker就可以了。</p>
<div class="jb51code">
<div>
<div id="highlighter_802811" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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 functions">sudo</code> <code class="bash plain">systemctl daemon-reload </code></div>
<div class="line number2 index1 alt1">&nbsp;</div>
<div class="line number3 index2 alt2"><code class="bash functions">sudo</code> <code class="bash plain">service docker restart</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>使用镜像加速</strong></p>
<p>1.拉取镜像前请先登录: docker login daocloud.io(请使用用户名进行 login)</p>
<p>2.docker pull [你需要的镜像]</p>
<p><strong>后续</strong></p>
<p>经过使用测试:下载docker镜像时不再出现下载失败提示,粗略估计下载速度在200k/s左右,基本满足使用需求。</p>
<p>&nbsp;</p>
<h1 class="YaHei">Docker镜像保存为文件及从文件导入镜像的方法</h1>
<p><strong>1、概述</strong></p>
<p>我们制作好镜像后,有时需要将镜像复制到另一台服务器使用。</p>
<p>能达到以上目的有两种方式,一种是上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所以如果使用仓库的方式,只能自己搭建私有仓库,这会在另一篇文章中介绍。</p>
<p>如果我们仅仅是要复制到另外少数的服务器,搭建私有仓库显然没有这个必要,而将镜像保存为文件上传到其他服务器再从文件中载入镜像也是一个不错的选择。</p>
<p>可以使用Docker save和Docker load命令来存储和载入镜像。</p>
<p><strong>2、保存镜像为文件</strong></p>
<p>如果要讲镜像保存为本地文件,可以使用Docker save命令。</p>
<p>命令格式:</p>
<div class="jb51code">
<div>
<div id="highlighter_229499" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker save -o 要保存的文件名&nbsp; 要保存的镜像</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p>首先查看当前的镜像列表:</p>
<div class="jb51code">
<div>
<div id="highlighter_244923" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker images</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p><img src="http://files.jb51.net/file_images/article/201703/201703100917531.png"></p>
<p>比如这里,我们将java8的镜像保存为文件:</p>
<div class="jb51code">
<div>
<div id="highlighter_701766" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker save -o java8.</code><code class="bash functions">tar</code> <code class="bash plain">lwieske</code><code class="bash plain">/java-8</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p>完成后通过 ls 命令即可看到文件。&nbsp;</p>
<p><strong>3、从文件载入镜像</strong></p>
<p>从文件载入镜像可以使用Docker load命令。</p>
<p>命令格式:</p>
<div class="jb51code">
<div>
<div id="highlighter_384298" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load --input 文件</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p>或者</p>
<div class="jb51code">
<div>
<div id="highlighter_494760" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load &lt; 文件名</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p>此时会导入镜像以及相关的元数据信息等。</p>
<p>首先使用SSH工具将文件上传到另一台服务器。</p>
<p>然后通过命令载入镜像:</p>
<div class="jb51code">
<div>
<div id="highlighter_296494" class="syntaxhighlighterbash">
<div class="toolbar">?</div>
<table border="0" cellspacing="0" cellpadding="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">docker load &lt; java8.</code><code class="bash functions">tar</code></div>


</div>


</td>


</tr>


</tbody>


</table>


</div>


</div>


</div>
<p>导入后可以使用docker images命令查看:</p>
<p><img src="http://files.jb51.net/file_images/article/201703/201703100917532.png"></p>
<p>&nbsp;</p>
<p><img src="https://common.cnblogs.com/images/loading.gif"></p><br><br>
来源:https://www.cnblogs.com/lsgxeva/p/8746644.html
頁: [1]
查看完整版本: Docker 创建镜像、修改、上传镜像