分类 docker 下的文章

阿里云部署Docker(2)
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

之前有一篇文章讲过在阿里云中安装Docker,相对来说那个是安装,但是安装完之后我们一般会碰到问题。

今天我给大家记录一下我的新的解决过程。

环境还是ubuntu12.04,假设我们已经把内核升级到了3.8以上。

便捷安装Docker命令:

curl -s https://get.docker.io/ubuntu/ | sudo sh

这样一条指令就完成了安装。

直接执行如下命令:

sudo docker run -i -t ubuntu /bin/bash

不行,会报错。

如下:

root@iZ28ikebrg6Z:~# docker run -i -t ubuntu /bin/bash
2014/10/15 21:19:19 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

好,我们的守候进程没有起来。
于是我们输入命令:
root@iZ28ikebrg6Z:~# docker -d

出现如下错误:
root@iZ28ikebrg6Z:~# docker -d

2014/10/15 21:21:01 docker daemon: 1.2.0 fa7b24f; execdriver: native; graphdriver: [be668f49] +job serveapi(unix:///var/run/docker.sock) [info] Listening for HTTP on unix (/var/run/docker.sock) [be668f49] +job init_networkdriver() [be668f49.init_networkdriver()] creating new bridge for docker0 Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0' [be668f49] -job init_networkdriver() = ERR (1) 2014/10/15 21:21:01 Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0'

这个时候,很多人很困惑,搜索很多解决方法而不得解决,我也是,我试过很多方法,不过,我没记录下来,抱歉,现在我只知道正确的解决方法了

它来自http://segmentfault.com/q/1010000000438713
大家都在搜如何在阿里云里面部署Docker

里面有一个人说:

改下路由表就可以了:

sudo route del -net 172.16.0.0 netmask 255.240.0.0

反正其他的我都试烂了,所以,也不介意多试这个。 root@iZ28ikebrg6Z:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 115.28.83.247 0.0.0.0 UG 0 0 0 eth1 10.0.0.0 10.163.191.247 255.0.0.0 UG 0 0 0 eth0 10.0.3.0 255.255.255.0 U 0 0 0 lxcbr0 10.163.176.0 255.255.240.0 U 0 0 0 eth0 115.28.80.0 * 255.255.252.0 U 0 0 0 eth1 172.16.0.0 10.163.191.247 255.240.0.0 UG 0 0 0 eth0 192.168.0.0 10.163.191.247 255.255.0.0 UG 0 0 0 eth0 root@iZ28ikebrg6Z:~# route del -net 172.16.0.0 netmask 255.240.0.0
root@iZ28ikebrg6Z:~# docker -d

2014/10/15 21:45:41 docker daemon: 1.2.0 fa7b24f; execdriver: native; graphdriver: [12f8faab] +job serveapi(unix:///var/run/docker.sock) [info] Listening for HTTP on unix (/var/run/docker.sock) [12f8faab] +job init_networkdriver() [12f8faab.init_networkdriver()] creating new bridge for docker0 [12f8faab.init_networkdriver()] getting iface addr [12f8faab] -job init_networkdriver() = OK (0) 2014/10/15 21:45:41 WARNING: Your kernel does not support cgroup swap limit. [info] Loading containers: [info] : done. [12f8faab] +job acceptconnections() [12f8faab] -job acceptconnections() = OK (0) [info] POST /images/create?fromImage=ubuntu&tag= [12f8faab] +job pull(ubuntu, )
嘿嘿,成功了。

至少没报错。好,守候进程算是起来了,不过,我们还是要验证一下能不能真正的用。

新开一个终端,输入:

root@iZ28ikebrg6Z:~# docker pull ubuntu
Pulling repository ubuntu
a9561eb1b190: Pulling dependent layers
3db9c44f4520: Downloading [====================> ] 26.42 MB/63.51 MB 14m3s
c5881f11ded9: Pulling dependent layers
195eb90b5349: Pulling dependent layers
2185fd50e2ca: Pulling dependent layers
463ff6be4238: Pulling dependent layers
9cbaf023786c: Pulling dependent layers
511136ea3c5a: Download complete
6cfa4d1f33fb: Download complete

拉取成功了。有不会报错了。好了,至此,我们可以正常的操作Docker了。哈哈。

root@iZ28ikebrg6Z:~# docker run ubuntu /bin/echo "hello"
hello
root@iZ28ikebrg6Z:~# docker run -i -t ubuntu /bin/bash
root@9fbad8b573d3:/#

而当你试图使用没有拉取过的镜像的时候,它会自动的帮你去拉取。例如,你突然使用centos。

root@iZ28ikebrg6Z:~# docker run centos /bin/echo 'hello world'
Unable to find image 'centos' locally
Pulling repository centos

转载请注明原文地址:http://www.server110.com/docker/201411/11136.html

阿里云部署Docker(3)----指令学习
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

通过上两节的学习相信大家已经把docker环境已经搭建完毕,这一节,简单学习docker怎么用。
Hello world
计算机的每一个新事物似乎都是从hello world开始。
root@iZ28ikebrg6Z:~# docker run ubuntu:14.04 /bin/echo 'hello world'
hello world
root@iZ28ikebrg6Z:~# docker run ubuntu /bin/echo 'hello world'
hello world

我们之前执行过docker pull ubuntu, 所以我们从远端服务器拉取了不少ubuntu镜像,这些镜像已经存在在本地,不会再去远端服务器拉取,如果你运行的是本地没有的,docker会自动的去远端库查询和拉取。例如 :
root@iZ28ikebrg6Z:~# docker run centos /bin/echo 'hello world'
Unable to find image 'centos' locally
Pulling repository centos

上述ubuntu是一个镜像,作为一个容器,然后我们进一步运行容器内的APP,即/bin/echo程序。而当执行完echo指令之后,容器内的程序停止了,容器本身也就停止了。记住这个hello world 涉及到点概念,docker ,image, container ,application 。你懂了么? An Interactive Container

一个可以交互的容器。我们输入如下命令:

root@iZ28ikebrg6Z:~# docker run -i -t ubuntu:14.04 /bin/bash
root@95d20e5442f9:/#

多了两个参数,一个是 -t ,表示给我们的容器tty,终端。一个是-i 表示可以interactive,可以交互。细心看结果,上面一行还在我们的阿里云机子上iZ28ikebrg6z下一行已经进入到docker ubuntu:14.04镜像映射出的容器里面了,95d2e5442f9中。

你可以在这个bash里面执行一些操作。

root@95d20e5442f9:/# pwd
/
root@95d20e5442f9:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

如果你想退出这个bash,那么可以运行:
root@95d20e5442f9:/# exit
exit
root@iZ28ikebrg6Z:~#

这样即退出了bash,当然容器也就退出了。 A Daemonized Hello world 守候进程化,即后台化。

执行如下命令:

root@iZ28ikebrg6Z:~# docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
d8eca97420317ae9f2fcd7655ab5c16c964d60f7bd644a8726ce473b075852d8

-d 选项就是告诉docker,这个容器需要后台化。但是,为什么输出是一串看不懂的字符串,而不是每秒输出一次hello world呢?

这一长串东西叫做容器的ID,我们可以通过它使用容器。

root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8eca9742031 ubuntu:14.04 "/bin/sh -c 'while t 3 minutes ago Up 3 minutes mad_jones

看到了吧,我们刚刚那个容器被列出来了。最后一列是名字,什么意思,docker都是一层层的增加的,具体后面细说,你执行一条命令,对你使用的镜像是没有影响的,但是你执行了毕竟是有数据或者其他的东西发生了变化,这个时候,docker给你自动取个名字(你可以指定名字),然后通过这个名字,就像一个新的镜像一样,后面你可以保存它。

打印日志:

root@iZ28ikebrg6Z:~# docker logs mad_jones
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world

停止任务:
root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8eca9742031 ubuntu:14.04 "/bin/sh -c 'while t 43 minutes ago Up 43 minutes mad_jones
root@iZ28ikebrg6Z:~# docker stop mad_jones
mad_jones
root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@iZ28ikebrg6Z:~#

好了,hello world就到次结束。后续推出更加高级的教程。

转载请注明原文地址:http://www.server110.com/docker/201411/11137.html

阿里云部署Docker(1)阿里云Ubuntu环境搭建Docker服务
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

经过昨天和今天的不断奋战,在阿里云里面搭建Docker并不容易。所以我觉得有必要记录下来,以供后人学习。以及我自己的回顾。

首先,查看我们的系统版本:

cat /etc/issue

的到的输出是
Ubuntu 12.04.1 LTS \n \l

我们顺便看一下内核版本,因为Docker需要在3.8以上运行。
uname -r

可以得到你的内核版本,我因为要装docker,所以按照docker官网的步骤升级了内核,所以输出是:
3.8.0-44-generic

docker 的Ubuntu安装说明在:https://docs.docker.com/installation/ubuntulinux/

如何升级内核?

升级内核的步骤其实很简单,根据Docker官网提供的就好:

指令如下:

install the backported kernel

$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring

install the backported kernel and xorg if using Unity/Xorg

$ sudo apt-get install --install-recommends linux-generic-lts-raring xserver-xorg-lts-raring libgl1-mesa-glx-lts-raring

reboot

$ sudo reboot

需要重启。

更新安装源

我在执行apt-get install docker.io的时候,总是提示找不到,所以说明我的安装源出了问题,所以,有必要说明如何搞定安装源,让我们的过程无错进行。

首先,备份源列表

cp /etc/apt/sources.list /etc/apt/sources.list_backup

然后,用vim 打开 源列表文件。
vim /etc/apt/sources.list

清空里面的已有列表,然后,我们选择阿里云列表,因为我们是阿里云服务器嘛。

阿里云源列表如下:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

然后执行更新命令
apt-get update

这个时候会出现公钥问题

提示的错误类似如下:

W: There is no public key available for the following key IDs:
8B48AD6246925553

于是,我们又得解决这个问题。

执行如下命令:

apt-get install debian-keyring debian-archive-keyring && sudo apt-key update
apt-key adv --recv-key --keyserver keyserver.ubuntu.com 8B48AD6246925553

上述命令,的那个数字要换成你的,亲。

然后,再次执行apt-get update。发现可以了。没有问题。

于是,我们又回到“正事”,安装docker

apt-get install docker.io

这次顺利的完成了安装。

开启服务

root@iZ28ikebrg6Z:/etc/apt# service docker.io restart
stop: Unknown instance:
docker.io start/running, process 11430

不过接下来还会碰到问题。

docker run -i -t ubuntu /bin/bash
2014/10/15 11:31:30 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

这个问题,下节继续。

转载请注明原文地址:http://www.server110.com/docker/201411/11135.html

阿里云安装Docker体会
时间:2014-11-22 来源:服务器之家 投稿:root
趁着国庆放假时间比较充裕,把之前在阿里云上的Docker实践说一下,从Docker的安装到最后正常运行经历了一些波折,以下是安装步骤。
1) 选择Ubuntu 14.04 64位镜像,uname后发现内核是3.13.0-32-generic,因此可以很好支持docker。
2) 安装docker.io apt-get update
apt-get install docker.io

3) 运行docker daemon service docker.io start

ps后发现进程没起来,奇怪,什么问题呢?查了日志/var/log/upstart/docker.io.log:
    [7bee03ac] +job init_networkdriver()
    [7bee03ac.init_networkdriver()] creating new bridge for docker0
        Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0'
    [7bee03ac] -job init_networkdriver() = ERR (1)
问题找到,原来是无法为docker0分配IP地址,于是运行“route -n“,发现以下路由条目都被占了:
   10.0.0.0,172.16.0.0 ,192.168.0.0
docker启动时会在宿主机器上创建一个名为docker0的虚拟网络接口,它会从RFC1918定义的私有地址中随机选择一个主机不用的地址和子网掩码,并将它分配给docker0。

所以,尝试删除了172.16.0.0的路由条目: route del -net 172.16.0.0 netmask
255.240.0.0

再次启动docker,成功了: service docker.io start

4) 尝试拉一些image: docker pull ubuntu:14.04

这个操作会到docker官方registry去拉image,速度相当的慢,一个image花了超过20分钟下载到本地。

5) 成功下拉后运行docker images看下:

REPOSITORY TAG
IMAGE
ID CREATED
VIRTUAL SIZE

ubuntu 14.04
c3d5614fecc4 3 days
ago 194.9
MB
6) 运行容器试一下效果:
docker run -i -t ubuntu:14.04 echo "Hello
World!"

Hello World!

docker ps -lCONTAINER
ID IMAGE
COMMAND
CREATED
STATUS PORTS
NAMES

f79bc34a30cd ubuntu:14.04 echo
'Hello World!' 11 seconds
ago Exited (0) 10 seconds
ago
sad_mclean

bravo,安装配置成功!

比较遗憾的是docker官方registry在美国,获取镜像花的时间太长,而且说不准什么时候会被“墙”了(以前发生过)。在此衷心希望阿里云能出个docker registry方便我们下拉镜像。

转载请注明原文地址:http://www.server110.com/docker/201411/11144.html

如何在阿里云主机上安装docker
时间:2014-11-22 来源:服务器之家 投稿:root

因为debian 7安装docker的手续比较麻烦,所以我把阿里云的系统换成了ubuntu 14.04,然后参考:https://docs.docker.com/installation/ubuntulinux/

还算比较方便:apt-get update && apt-get install docker.io,然后再改两个配置就完事了。

不过,在你运行docker run -i -t ubuntu /bin/bash的时候,会报错,说是docker -d好象没有运行,这不科学 啊,刚刚不是装好的吗?

于是ps aux|grep docker,果然没有进程,于是直接输入:docker -d,然后就发现报错了:

XML/HTML代码

2014/08/18 12:05:42 Could not find a free IP address range for interface 'docker0'. Please configure its address manually and run 'docker -b docker0'

老规矩,内事不决问度娘,外事不决问谷歌,结果居然看到有人回复 :

大小: 46.71 K 尺寸: 500 x 174 浏览: 68 次 点击打开新窗口浏览全图

当时这个心就碎了,心想这不科学啊,于是再google,就真的发现了:

大小: 65.11 K 尺寸: 500 x 235 浏览: 61 次 点击打开新窗口浏览全图

OK,那就试试吧:

XML/HTML代码

sudo brctl addbr docker0 # create your bridge

sudo brctl addif docker0 eth0 # mask an existing interface using the bridge

sudo ip link set dev docker0 up # bring it up - not really sure if this is necessary or is it done automatically

sudo ifconfig docker0 10.0.0.4 # give it an IP

当然要运行brctl还是要装一个bridge-utils工具的,当然这个ubuntu会提醒你,一步步的做完后,docker 果然可以启动了。这时候再运行一下,service docker.io start,然后ps aux|grep docker,进程还活着。

于是输入:

XML/HTML代码

docker run -i -t ubuntu /bin/bash

Unable to find image 'ubuntu' locally

Pulling repository ubuntu

2014/08/18 12:16:44 Get https://index.docker.io/v1/repositories/ubuntu/images: dial tcp: lookup index.docker.io on 10.143.22.118:53: no answer from server

咦。不能上网。其实就是上面的代码的问题,因为默认aliyun的eth0是内网IP,所以上述的

sudo brctl addif docker0 eth0 # mask an existing interface using the bridge

这里应该用eth1

重新执行一下。然后再次运行:

XML/HTML代码

docker run -i -t ubuntu /bin/bash

Unable to find image 'ubuntu' locally

Pulling repository ubuntu

c5881f11ded9: Download complete

。。。。。。。

整个就完成了

转载请注明原文地址:http://www.server110.com/docker/201411/11153.html

使用Docker容器管理Ubuntu系统
时间:2014-11-26 来源:服务器之家 投稿:root

本文将介绍如何安装Docker,并用它高效地管理虚拟机。Docker是一种开源Linux虚拟化平台,以便广大开发人员和系统管理员轻松地开发、部署和执行分布式应用程序。Docker包括这几个部分:Docker引擎(一个轻型运行时和虚拟化层),封装和版本控制虚拟机的工具(类似源代码软件库),以及Docker Hub(一项共享应用程序、实现工作流自动化的云端服务)。Docker让应用程序得以由组件迅速装配而成,消除了开发环境、质量控制和生产环境之间的磨擦。

1 首项附注

以本文为例,我准备把docker安装在Ubuntu 14.04操作系统上。虚拟化软件市场上有几项标准硬件虚拟化技术,比如KVM、Xen或Hyper-V。可是标准虚拟化技术太过笨拙,无法对Linux上的单个应用程序进行虚拟化处理。我们可以克服这种情形,只要使用Linux容器(Linux Container):对操作系统层面的虚拟化而言,这是一种不错的替代方案。Linux容器是非常有用的方式,可以让开发/测试环境出现在安全有保障的一堆容器中。Docker提供了这种用途的Linux容器环境。

2 安装

如前所述,我准备把docker安装在Ubuntu上。在这一章节,我将为大家介绍安装docker的两种方法;在2a这部分中,我使用来自Ubuntu软件库的docker版本,这个版本由Ubuntu维护,提供整整5年的长期支持版(LTS)支持,但它不是最新版本。在2b这部分中,我将使用来自Ubuntu ppa软件库的最新版本。由于docker正在大力开发之中,来自2b)的最新Docker版本极可能适合大多数用户。请使用方法2a或方法2b,但别同时使用这两种方法!

2a 从官方的Ubuntu软件库来安装

想安装docker,请使用下列命令:

sudo apt-get update

sudo apt-get install docker.io

然后创建符号链接,以便在外壳上使用起来更容易。

sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

2b安装最新的docker版本

想从docker.io软件库安装最新的docker版本,运行这个命令:

curl -s https://get.docker.io/ubuntu/ | sudo sh

3 准备外壳环境

现在,我将把我的user=srijan添加到docker组:

sudo usermod -a -G docker srijan

或者使用:

sudo usermod -a -G docker $USER

这里,我会退出当前会话,然后再重新登录。现在,我将添加docker配置文件,以便向系统通知其位置。

sudo vi /etc/default/docker.io

DOCKER="/usr/bin/docker.io"

现在重启服务,如下所示:

sudo service docker.io restart

4 容器管理

我准备随Ubuntu操作系统一同启动容器。我会下载docker映像,如下所示:

docker pull ubuntu

注意:pull命令用于从注册中心(registry)拉取映像或软件库。

现在我将使用下面这个命令,登录进入到Ubuntu容器的bash外壳:

docker run -i -t ubuntu /bin/bash

仅仅为了确认,我将检查容器的IP,如下所示:

root@fd98ee950252:/# ifconfig

eth0 Link encap:Ethernet HWaddr 5a:a6:c6:88:f2:48

      inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0  

      inet6 addr: fe80::58a6:c6ff:fe88:f248/64 Scope:Link  

      UP BROADCAST RUNNING  MTU:1500  Metric:1  

      RX packets:7 errors:0 dropped:2 overruns:0 frame:0  

      TX packets:8 errors:0 dropped:0 overruns:0 carrier:0  

      collisions:0 txqueuelen:1000   

      RX bytes:558 (558.0 B)  TX bytes:648 (648.0 B)  


lo Link encap:Local Loopback

      inet addr:127.0.0.1  Mask:255.0.0.0  

      inet6 addr: ::1/128 Scope:Host  

      UP LOOPBACK RUNNING  MTU:1500  Metric:1  

      RX packets:0 errors:0 dropped:0 overruns:0 frame:0  

      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  

      collisions:0 txqueuelen:0   

      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  


root@fd98ee950252:/#

我容器上的IP地址为172.17.0.3。同样,我还可以使用其他窗口。想编辑容器,只要键入:

exit

同样,你可以有其他的操作系统容器,比如说。

我想使用Debian容器,就要使用代码:

docker run -i -t debian /bin/bash

如果你想有某个发行版,那么就要使用这个命令:

docker run -i -t ubuntu:12.04 /bin/bash

它会创建ubuntu12.04容器。我会反复核实,如下所示:

root@44b56100fd1f:/# cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=12.04

DISTRIB_CODENAME=precise

DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

root@44b56100fd1f:/#

4.1 构建我们自己的映像

构建Docker映像有两种方法:

通过docker commit(提交)命令

通过docker build(构建)命令以及Docker文件(Dockerfile)

目前并不推荐docker提交方法,因为借助Docker文件进行构建要灵活得多、强大得多,但为了力求完整起见,我们会向你演示提交方法。之后,我将重点介绍推荐的Docker映像构建方法:编写Docker文件,然后使用docker构建命令。

4.1 使用Docker提交命令来创建映像

我将创建一个容器,并对该容器进行更改DD就像更改代码那样,然后将那些变更内容提交给新的映像。

不妨先通过我们在过去使用的ubuntu映像来创建一个容器。

docker run -i -t ubuntu /bin/bash

root@73527b8b4261:/#

注意:请注意上面的root显示了主机名称73527b8b4261,它是所创建的容器名称;它与你的情况会不一样。

此外,我会将apache安装在容器里面:

apt-get install apache2

我已启动了容器,然后将Apache安装在里面。现在,我准备将该容器用作Web服务器,所以我将它保存在当前状态。

这样一来,我每次创建一个新的容器时,就没必要用Apache来重新构建它。为此,我将退出容器,使用exit命令,然后使用docker提交命令。

exit

docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528

注意:这里的73527b8b4261是我的容器名称;我为容器使用8ce0ea7a1528标记,你可以赋予任何标记名称,也可以使用同一个名称。

假设你忘了上一个创建的容器的编号,可以使用这个命令:

docker ps -l -q

它会得出73527b8b4261

注意:73527b8b4261是你上一个创建的容器名称,它与你的情况可能不一样。

不妨看一下我们的新映像。它可以这样获得,如下所示:

srijan@vboxtest:~$ docker images srijan/apache2

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

srijan/apache2 8ce0ea7a1528 741155868ac8 6 minutes ago 207.2 MB

srijan@vboxtest:~$

注意:这里的8ce0ea7a1528是我在保存容器时所使用的标记名称;

注意:741155868ac8是该容器的映像编号;

注意:所有这些值与你的情况可能不一样,因为在保存容器时,docker会创建相应的随机名称。

现在,我将保存定制的映像,如下所示:

docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver

它会给出结果:

srijan@vboxtest:~$ docker commit -m="A new custom image" --author="Srijan Kishore" 73527b8b4261 srijan/apache2:webserver

f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec

想从我们的新映像运行容器,我们只要使用docker run(运行)命令。

docker run -t -i srijan/apache2:webserver /bin/bash

我们可以反复核对已提交的映像,如下所示:

srijan@vboxtest:~$ docker inspect srijan/apache2:webserver

[{

"Architecture": "amd64",  

"Author": "Srijan Kishore",  

"Comment": "A new custom image",  

"Config": {  

    "AttachStderr": false,  

    "AttachStdin": false,  

    "AttachStdout": false,  

    "Cmd": [  

        "/bin/bash"  

    ],  

    "CpuShares": 0,  

    "Cpuset": "",  

    "Domainname": "",  

    "Entrypoint": null,  

    "Env": [  

        "HOME=/",  

        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  

    ],  

    "ExposedPorts": null,  

    "Hostname": "",  

    "Image": "",  

    "Memory": 0,  

    "MemorySwap": 0,  

    "NetworkDisabled": false,  

    "OnBuild": null,  

    "OpenStdin": false,  

    "PortSpecs": null,  

    "StdinOnce": false,  

    "Tty": false,  

    "User": "",  

    "Volumes": null,  

    "WorkingDir": ""  

},  

"Container": "73527b8b42614f6ecd83fb5f9822d6086988d3b68fd5e32b4afbc7cd415402fd",  

"ContainerConfig": {  

    "AttachStderr": true,  

    "AttachStdin": true,  

    "AttachStdout": true,  

    "Cmd": [  

        "/bin/bash"  

    ],  

    "CpuShares": 0,  

    "Cpuset": "",  

    "Domainname": "",  

    "Entrypoint": null,  

    "Env": [  

        "HOME=/",  

        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  

    ],  

    "ExposedPorts": null,  

    "Hostname": "73527b8b4261",  

    "Image": "ubuntu",  

    "Memory": 0,  

    "MemorySwap": 0,  

    "NetworkDisabled": false,  

    "OnBuild": null,  

    "OpenStdin": true,  

    "PortSpecs": null,  

    "StdinOnce": true,  

    "Tty": true,  

    "User": "",  

    "Volumes": null,  

    "WorkingDir": ""  

},  

"Created": "2014-06-30T12:58:04.973349049Z",  

"DockerVersion": "1.0.1",  

"Id": "f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec",  

"Os": "linux",  

"Parent": "ef83896b7fb99b00b9e0e6ac943826386e7edcef11a3a2f58b42011ab4a4e683",  

"Size": 14463026  

}

]srijan@vboxtest:~$

想从我们的新映像运行容器,我们可以使用docker运行命令。

docker run -t -i srijan/apache2:webserver /bin/bash

4.2 用Docker文件构建映像

Docker文件使用基本的特定领域语言(DSL),以及用于构建Docker映像的指令。然后,我们使用docker构建命令,通过Docker文件里面的指令来构建新的映像。Docker公司的开发团队还在此发布了Docker文件教程(http://www.docker.io/learn/dockerfile/),可以帮助大家学会如何构建Docker文件。

现在,我将创建一个简单的docker文件,它可以按照用户的需求,进一步改进和完善。首先,让一个目录假设为dir=kishore:

mkdir kishore

cd kishore

现在创建一个Docker文件,如下所示:

vi Dockerfile

并输入内容,如下所示:

FROM ubuntu:12.04

MAINTAINER Srijan Kishore mailto:s.kishore@ispconfig.org

RUN apt-get -qq update

RUN apt-get -qqy install apache2

现在打开定制的容器,请使用这个命令:

sudo docker build -t="srijan/custom1" .

它会得出如下结果:

srijan@vboxtest:~/kishore$ sudo docker build -t="srijan/custom1" .

[sudo] password for srijan:

Sending build context to Docker daemon 2.56 kB

Sending build context to Docker daemon

Step 0 : FROM ubuntu:12.04

Pulling repository ubuntu

ea7d6801c538: Download complete

511136ea3c5a: Download complete

65b7e9ccb809: Download complete

f8dd6bd14f58: Download complete

a343823119db: Download complete

---> ea7d6801c538

Step 1 : MAINTAINER Srijan Kishore mailto:s.kishore@ispconfig.org

---> Running in a6135f405eb4

---> be97c22efa82

Removing intermediate container a6135f405eb4

Step 2 : RUN apt-get -qq update

---> Running in b5681cd85ba8

---> cbc3a95de894

Removing intermediate container b5681cd85ba8

Step 3 : RUN apt-get -qqy install apache2

---> Running in 5765c09b530f

debconf: delaying package configuration, since apt-utils is not installed

Selecting previously unselected package libsqlite3-0.

(Reading database ... 7551 files and directories currently installed.)

Unpacking libsqlite3-0 (from .../libsqlite3-0_3.7.9-2ubuntu1.1_amd64.deb) ...

Selecting previously unselected package libroken18-heimdal.

Unpacking libroken18-heimdal (from .../libroken18-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libasn1-8-heimdal.

Unpacking libasn1-8-heimdal (from .../libasn1-8-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libgpg-error0.

Unpacking libgpg-error0 (from .../libgpg-error0_1.10-2ubuntu1_amd64.deb) ...

Selecting previously unselected package libgcrypt11.

Unpacking libgcrypt11 (from .../libgcrypt11_1.5.0-3ubuntu0.2_amd64.deb) ...

Selecting previously unselected package libgdbm3.

Unpacking libgdbm3 (from .../libgdbm3_1.8.3-10_amd64.deb) ...

Selecting previously unselected package libp11-kit0.

Unpacking libp11-kit0 (from .../libp11-kit0_0.12-2ubuntu1_amd64.deb) ...

Selecting previously unselected package libtasn1-3.

Unpacking libtasn1-3 (from .../libtasn1-3_2.10-1ubuntu1.1_amd64.deb) ...

Selecting previously unselected package libgnutls26.

Unpacking libgnutls26 (from .../libgnutls26_2.12.14-5ubuntu3.8_amd64.deb) ...

Selecting previously unselected package libhcrypto4-heimdal.

Unpacking libhcrypto4-heimdal (from .../libhcrypto4-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libheimbase1-heimdal.

Unpacking libheimbase1-heimdal (from .../libheimbase1-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libwind0-heimdal.

Unpacking libwind0-heimdal (from .../libwind0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libhx509-5-heimdal.

Unpacking libhx509-5-heimdal (from .../libhx509-5-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libkrb5-26-heimdal.

Unpacking libkrb5-26-heimdal (from .../libkrb5-26-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libheimntlm0-heimdal.

Unpacking libheimntlm0-heimdal (from .../libheimntlm0-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libgssapi3-heimdal.

Unpacking libgssapi3-heimdal (from .../libgssapi3-heimdal_1.6~git20120311.dfsg.1-2ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libsasl2-2.

Unpacking libsasl2-2 (from .../libsasl2-2_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...

Selecting previously unselected package libldap-2.4-2.

Unpacking libldap-2.4-2 (from .../libldap-2.4-2_2.4.28-1.1ubuntu4.4_amd64.deb) ...

Selecting previously unselected package libcap2.

Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...

Selecting previously unselected package libexpat1.

Unpacking libexpat1 (from .../libexpat1_2.0.1-7.2ubuntu1.1_amd64.deb) ...

Selecting previously unselected package libmagic1.

Unpacking libmagic1 (from .../libmagic1_5.09-2ubuntu0.3_amd64.deb) ...

Selecting previously unselected package file.

Unpacking file (from .../file_5.09-2ubuntu0.3_amd64.deb) ...

Selecting previously unselected package mime-support.

Unpacking mime-support (from .../mime-support_3.51-1ubuntu1_all.deb) ...

Selecting previously unselected package netbase.

Unpacking netbase (from .../netbase_4.47ubuntu1_all.deb) ...

Selecting previously unselected package libsasl2-modules.

Unpacking libsasl2-modules (from .../libsasl2-modules_2.1.25.dfsg1-3ubuntu0.1_amd64.deb) ...

Selecting previously unselected package openssl.

Unpacking openssl (from .../openssl_1.0.1-4ubuntu5.16_amd64.deb) ...

Selecting previously unselected package libapr1.

Unpacking libapr1 (from .../libapr1_1.4.6-1_amd64.deb) ...

Selecting previously unselected package libaprutil1.

Unpacking libaprutil1 (from .../libaprutil1_1.3.12+dfsg-3_amd64.deb) ...

Selecting previously unselected package libaprutil1-dbd-sqlite3.

Unpacking libaprutil1-dbd-sqlite3 (from .../libaprutil1-dbd-sqlite3_1.3.12+dfsg-3_amd64.deb) ...

Selecting previously unselected package libaprutil1-ldap.

Unpacking libaprutil1-ldap (from .../libaprutil1-ldap_1.3.12+dfsg-3_amd64.deb) ...

Selecting previously unselected package apache2.2-bin.

Unpacking apache2.2-bin (from .../apache2.2-bin_2.2.22-1ubuntu1.6_amd64.deb) ...

Selecting previously unselected package apache2-utils.

Unpacking apache2-utils (from .../apache2-utils_2.2.22-1ubuntu1.6_amd64.deb) ...

Selecting previously unselected package libswitch-perl.

Unpacking libswitch-perl (from .../libswitch-perl_2.16-2_all.deb) ...

Selecting previously unselected package libclass-isa-perl.

Unpacking libclass-isa-perl (from .../libclass-isa-perl_0.36-3_all.deb) ...

Selecting previously unselected package perl-modules.

Unpacking perl-modules (from .../perl-modules_5.14.2-6ubuntu2.4_all.deb) ...

Selecting previously unselected package perl.

Unpacking perl (from .../perl_5.14.2-6ubuntu2.4_amd64.deb) ...

Selecting previously unselected package apache2.2-common.

Unpacking apache2.2-common (from .../apache2.2-common_2.2.22-1ubuntu1.6_amd64.deb) ...

Selecting previously unselected package apache2-mpm-worker.

Unpacking apache2-mpm-worker (from .../apache2-mpm-worker_2.2.22-1ubuntu1.6_amd64.deb) ...

Selecting previously unselected package apache2.

Unpacking apache2 (from .../apache2_2.2.22-1ubuntu1.6_amd64.deb) ...

Selecting previously unselected package ssl-cert.

Unpacking ssl-cert (from .../ssl-cert_1.0.28ubuntu0.1_all.deb) ...

Setting up libsqlite3-0 (3.7.9-2ubuntu1.1) ...

Setting up libroken18-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libasn1-8-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libgpg-error0 (1.10-2ubuntu1) ...

Setting up libgcrypt11 (1.5.0-3ubuntu0.2) ...

Setting up libgdbm3 (1.8.3-10) ...

Setting up libp11-kit0 (0.12-2ubuntu1) ...

Setting up libtasn1-3 (2.10-1ubuntu1.1) ...

Setting up libgnutls26 (2.12.14-5ubuntu3.8) ...

Setting up libhcrypto4-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libheimbase1-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libwind0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libhx509-5-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libkrb5-26-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libheimntlm0-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libgssapi3-heimdal (1.6~git20120311.dfsg.1-2ubuntu0.1) ...

Setting up libsasl2-2 (2.1.25.dfsg1-3ubuntu0.1) ...

Setting up libldap-2.4-2 (2.4.28-1.1ubuntu4.4) ...

Setting up libcap2 (1:2.22-1ubuntu3) ...

Setting up libexpat1 (2.0.1-7.2ubuntu1.1) ...

Setting up libmagic1 (5.09-2ubuntu0.3) ...

Setting up file (5.09-2ubuntu0.3) ...

Setting up mime-support (3.51-1ubuntu1) ...

update-alternatives: using /usr/bin/see to provide /usr/bin/view (view) in auto mode.

Setting up netbase (4.47ubuntu1) ...

Setting up libsasl2-modules (2.1.25.dfsg1-3ubuntu0.1) ...

Setting up openssl (1.0.1-4ubuntu5.16) ...

Setting up libapr1 (1.4.6-1) ...

Setting up libaprutil1 (1.3.12+dfsg-3) ...

Setting up libaprutil1-dbd-sqlite3 (1.3.12+dfsg-3) ...

Setting up libaprutil1-ldap (1.3.12+dfsg-3) ...

Setting up apache2.2-bin (2.2.22-1ubuntu1.6) ...

Setting up apache2-utils (2.2.22-1ubuntu1.6) ...

Setting up libclass-isa-perl (0.36-3) ...

Setting up ssl-cert (1.0.28ubuntu0.1) ...

debconf: unable to initialize frontend: Dialog

debconf: (TERM is not set, so the dialog frontend is not usable.)

debconf: falling back to frontend: Readline

debconf: unable to initialize frontend: Readline

debconf: (This frontend requires a controlling tty.)

debconf: falling back to frontend: Teletype

Setting up libswitch-perl (2.16-2) ...

Setting up perl-modules (5.14.2-6ubuntu2.4) ...

Setting up perl (5.14.2-6ubuntu2.4) ...

update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode.

Setting up apache2.2-common (2.2.22-1ubuntu1.6) ...

Enabling site default.

Enabling module alias.

Enabling module autoindex.

Enabling module dir.

Enabling module env.

Enabling module mime.

Enabling module negotiation.

Enabling module setenvif.

Enabling module status.

Enabling module auth_basic.

Enabling module deflate.

Enabling module authz_default.

Enabling module authz_user.

Enabling module authz_groupfile.

Enabling module authn_file.

Enabling module authz_host.

Enabling module reqtimeout.

Setting up apache2-mpm-worker (2.2.22-1ubuntu1.6) ...

invoke-rc.d: policy-rc.d denied execution of start.

Setting up apache2 (2.2.22-1ubuntu1.6) ...

Processing triggers for libc-bin ...

ldconfig deferred processing now taking place

---> 634855a43331

Removing intermediate container 5765c09b530f

Successfully built 634855a43331

srijan@vboxtest:~/kishore$

现在不妨看一下我们的新映像。为此,我们可以使用docker映像命令来实现。

docker images srijan/custom1

srijan@vboxtest:~/kishore$ docker images srijan/custom1

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

srijan/custom1 latest 634855a43331 About a minute ago 277.4 MB

srijan@vboxtest:~/kishore$

这里,你会发现映像在默认情况下会安装apache2。不妨反复核对一下:

docker run -t -i srijan/apache2:webserver /bin/bash

现在,你可以进入新容器,而apache2和12.04ubuntu已预装。

5 主机名称的更改

假设你想更改主机名称,或者你想有一个定制的主机称,比如我这里的server1.example.com。

我会使用:

docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash

它会得出映像容器,如下所示:

srijan@vboxtest:~/kishore$ docker run -h 'server1.example.com' -t -i srijan/custom1 /bin/bash

root@server1:/# hostname -f

server1.example.com

root@server1:/#

6 docker的实用命令集锦

pull(pull用于从注册中心拉取映像或软件库)

比如:

docker run -i -t ubuntu /bin/bash

commit(commit用于保存容器)

比如:

docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528

cp(将文件/文件夹从容器的文件系统拷贝到主机路径。路径相对于文件系统的根目录。)

比如:

docker cp CONTAINER:PATH HOSTPATH

其中的CONTAINER是容器,将文件/文件夹从PATH拷贝到HOSTPATH

start和stop容器:

docker start 4386fb97867d

docker stop 4386fb97867d

其中的4386fb97867d是你的容器编号

export(将文件系统的内容作为tar存档文件导出到STDOUT)

docker export 4386fb97867d > latest.tar

import(创建一个空的文件系统映像,将打包文件[.tar、.tar.gz、.tgz、.bzip、.tar.xz或.txz]的内容导入到里面,然后以可选方式标记它。)

docker import http://example.com/exampleimage.tgz

从本地文件导入:

通过pipe和stdin导入到docker。

cat exampleimage.tgz | sudo docker import - exampleimagelocal:new

从本地目录导入:

sudo tar -c . | sudo docker import - exampleimagedir

history(显示映像的历史记录)

docker history [OPTIONS] IMAGE

sudo docker history ea7d6801c538

images(它会显示映像)

docker images [OPTIONS] [NAME]

它后面跟一些选项,如下所示:

-a, --all=false 显示所有映像(默认情况下,过滤掉中间映像层)

-f, --filter=[]: 提供过滤器值(即“dangling=true”)

--no-trunc=false 不截短输出

-q, --quiet=false 只显示数字编号

info(显示整个系统的信息)

srijan@VE130214:~$ sudo docker info

srijan@vboxtest:~$ sudo docker info

Containers: 20

Images: 65

Storage Driver: aufs

Root Dir: /var/lib/docker/aufs

Dirs: 105

Execution Driver: native-0.2

Kernel Version: 3.13.0-30-generic

WARNING: No swap limit support

inspect(返回关于容器/映像的低级信息)

docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]

kill(终止运行中的容器/发送SIGKILL,即指定信号)

docker kill [OPTIONS] CONTAINER [CONTAINER...]

login(注册或登录docker注册中心服务器,如果未指定任何服务器,https://index.docker.io/v1/为默认值。)

docker login localhost:8080

它会登录到自托管注册中心。

logs(读取容器的日志)

docker logs CONTAINER

ps(列出容器)

docker ps [OPTIONS]

它有下列选项:

-a, --all=false 显示所有容器。默认情况下只显示运行中的容器。

--before="" 只显示编号或名称之前创建的容器,包括非运行中的容器。

-l, --latest=false 只显示最近创建的容器,包括非运行中的容器。

-n=-1 显示n个最近创建的容器,包括非运行中的容器。

--no-trunc=false 不截短输出。

-q, --quiet=false 只显示数字编号。

-s, --size=false 显示大小。

--since="" 只显示自编号或名称以来创建的容器,包括非运行中的容器。

push(将映像或软件库推送到注册中心)

docker push NAME[:TAG]

restart(它将重启运行中的容器)

docker restart [OPTIONS] CONTAINER [CONTAINER...]

rm(它将删除一个或多个容器)

docker rm [OPTIONS] CONTAINER [CONTAINER...]

rmi(它将删除一个或多个映像)

docker rmi IMAGE [IMAGE...]

run(在新容器中运行命令)

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

它有下列选项:

-a, --attach=[] 连接到stdin、stdout或stderr

-c, --cpu-shares=0 处理器共享(相对权重)

--cidfile="" 将容器编号写入到文件

-d, --detach=false 分离模式:在后台运行容器,输出新的容器编号

--dns=[] 设置自定义DNS服务器

--dns-search=[] 设置自定义DNS搜索域

-e, --env=[] 设置环境变量

--entrypoint="" 覆盖映像的默认入口点

--env-file=[] 在行分隔的文件中读取ENV变量

--expose=[] 暴露来自容器的端口,又不将端口发布到你的主机

-h, --hostname="" 容器主机名称

-i, --interactive=false 让stdin保持开放,即便没有连接

--link=[] 将链接添加到另一个容器(名称:别名)

--lxc-conf=[] (lxc exec-driver only)添加自定义lxc选项--lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

-m, --memory="" 内存限制(格式:,其中unit = b, k, m or g)

--name="" 为容器赋予名称

--net="bridge" 为容器设置网络模式

'bridge':为docker网桥上的容器创建新的网络堆栈

'none':不为该容器创建任何网络机制

'container:<name|id>':重复使用另一个容器的网络堆栈

'host':使用容器里面的主机网络堆栈

-p, --publish=[] 将容器的端口发布到主机

格式:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort

(使用“docker port”即可看到实际映射)

-P, --publish-all=false  将所有暴露的端口发布到主机接口

--privileged=false 为该容器赋予扩展后的权限

--rm=false 容器退出后,自动删除容器(与-d不兼容)

--sig-proxy=true 将所有收到的信号代理输出到进程(即便处于非-tty模式下)

-t, --tty=false 分配伪终端

-u, --user="" 用户名称或UID

-v, --volume=[] 绑定挂载卷(比如来自host:-v /host:/container,来自docker: -v /container)

--volumes-from=[] 从指定的一个或多个容器挂载卷

-w, --workdir="" 容器里面的工作目录

save(将映像保存到tar存档文件,默认情况下流式传输到stdout)

docker save IMAGE

search(搜索docker索引,寻找映像)

docker search TERM

tag(将映像标记到软件库)

docker tag [OPTIONS] IMAGE REGISTRYHOST/NAME[:TAG]

top(查询容器的运行中进程)

docker top CONTAINER [ps OPTIONS]

version(显示docker版本信息)

srijan@vboxtest:~$ sudo docker version

[sudo] password for srijan:

Client version: 1.0.1

Client API version: 1.12

Go version (client): go1.2.1

Git commit (client): 990021a

Server version: 1.0.1

Server API version: 1.12

Go version (server): go1.2.1

Git commit (server): 990021a

6 结束语

我试着让大家更加熟悉docker,但愿本文会帮助各位进一步了解docker,并在自己的测试/生产环境中充分利用docker。

想了解更多信息,请参阅http://www.docker.com/

转载请注明原文地址:http://www.server110.com/docker/201411/11191.html