您的位置:首页 > 运维架构 > Docker

Docker镜像和容器操作(一)

2015-09-09 23:20 746 查看
Docker三个核心的概念:镜像、容器和仓库

镜像 -- 类似于虚拟机镜像,包括系统文件等。镜像是只读的,容器在启动时候创建一层可写层作为最上层。

容器 -- 类似于轻量级沙盒,通过容器隔离应用,容器可以启动,开始,停止,删除等。

仓库 -- 集中存放镜像文件的地方。可分为私有和公有。目前最大的公有仓库DockerHub。

Ubuntu 系列安装 Docker

通过系统自带包安装

Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装。
$ sudo apt-get update
$ sudo apt-get install -y 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

如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 0.9.1。 要安装更新的版本,可以通过使用 Docker 源的方式。

通过Docker源安装最新版本

要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。
$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

14.04 之前版本

如果是较低版本的 Ubuntu 系统,需要先更新内核。
$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
$ sudo reboot

然后重复上面的步骤即可。
安装之后启动 Docker 服务。
$ sudo service docker start


Docker获取镜像

可以使用
docker pull
命令来从仓库获取所需要的镜像。
下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。
$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

下载过程中,会输出获取镜像的每一层信息。
该命令实际上相当于
$ sudo docker pull registry.hub.docker.com/ubuntu:12.04
命令,即从注册服务器
registry.hub.docker.com
中的
ubuntu
仓库来下载标记为
12.04
的镜像。
有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。例如
$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
Pulling dl.dockerpool.com:5000/ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。
$ sudo docker run -t -i ubuntu:12.04 /bin/bash
root@fe7fc4bd8fc9:/#


显示本地镜像

使用
docker images
显示本地已有的镜像。
$ sudo docker images
REPOSITORY       TAG      IMAGE ID      CREATED      VIRTUAL SIZE
ubuntu           12.04    74fe38d11401  4 weeks ago  209.6 MB
ubuntu           precise  74fe38d11401  4 weeks ago  209.6 MB
ubuntu           14.04    99ec81b80c55  4 weeks ago  266 MB
ubuntu           latest   99ec81b80c55  4 weeks ago  266 MB
ubuntu           trusty   99ec81b80c55  4 weeks ago  266 MB
...

在列出信息中,可以看到几个字段信息

来自于哪个仓库,比如 ubuntu
镜像的标记,比如 14.04
它的
ID
号(唯一)
创建时间
镜像大小

其中镜像的
ID
唯一标识了镜像,注意到
ubuntu:14.04
ubuntu:trusty
具有相同的镜像
ID
,说明它们实际上是同一镜像。
TAG
信息用来标记来自同一个仓库的不同镜像。例如
ubuntu
仓库中有多个镜像,通过
TAG
信息来区分发行版本,例如
10.04
12.04
12.10
13.04
14.04
等。例如下面的命令指定使用镜像
ubuntu:14.04
来启动一个容器。
$ sudo docker run -t -i ubuntu:14.04 /bin/bash

如果不指定具体的标记,则默认使用
latest
标记信息。

创建镜像

修改已有镜像

先使用下载的镜像启动容器。
$ sudo docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#

注意:记住容器的 ID,稍后还会用到。
在容器中添加 json 和 gem 两个应用。
root@0b2616b0e5a8:/# gem install json

当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用
docker commit
命令来提交更新后的副本。
$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

其中,
-m
来指定提交的说明信息,跟我们使用的版本控制工具一样;
-a
可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用
docker images
来查看新创建的镜像。
$ sudo docker images
REPOSITORY          TAG     IMAGE ID       CREATED       VIRTUAL SIZE
training/sinatra    latest  5bc342fa0b91   10 hours ago  446.7 MB
ouruser/sinatra     v2      3c59e02ddd1a   10 hours ago  446.7 MB
ouruser/sinatra     latest  5db5f8471261   10 hours ago  446.7 MB

之后,可以使用新的镜像来启动容器
$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
root@78e82f680994:/#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: