基本概念

  • 镜像(image):Docker 镜像就是一个只读的模板。一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。
  • 容器(container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 仓库(repository):仓库是集中存放镜像文件的场所。

镜像

获取镜像

1
2
3
4
5
docker pull ubuntu:12.04
与下面的命令等同
docker pull registry.hub.docker.com/ubuntu:12.04
如果官方仓库比较慢可以用其他仓库
docker pull dl.dockerpool.com:5000/ubuntu:12.04

使用该镜像创建容器:

1
2
docker run -t -i ubuntu:12.04 /bin/bash
root@fe7fc4bd8fc9:/#

列出本地镜像

1
2
3
4
5
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
  • 镜像的标记,比如 14.04
  • 它的 ID 号(唯一)
  • 创建时间
  • 镜像大小

创建镜像

启用一个下载的镜像的容器:

1
2
3
4
5
6
7
8
docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
root@0b2616b0e5a8:/# gem install json

//提交当前容器

docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
  • -m:指定提交的说明信息
  • -a:指定更新的用户信息
  • 0b2616b0e5a8 是用来创建镜像的容器的 id
  • 最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。

移除本地镜像

如果要移除本地的镜像,可以使用 docker rmi 命令。注意 docker rm 命令是移除容器。

1
2
3
4
5
docker rmi training/sinatra
Untagged: training/sinatra:latest
Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d
Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f
Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0

注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

容器

启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

1
2
docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

下面的命令则启动一个 bash 终端,允许用户进行交互。

1
2
docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#
  • -t:选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
  • -i:则让容器的标准输入保持打开。

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

启动已终止容器

可以利用 docker start 命令,直接将一个已经终止的容器启动运行。

可以通过 docker ps 命令来查看容器信息。

1
2
3
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77b2dc01fe0f ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute agitated_wright

可以使用 docker stop 来终止一个运行中的容器。

此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

仓库

用户无需登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker pull 命令来将它下载到本地。

1
2
3
4
5
6
7
8
9
docker search centos
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. 1823 [OK]
docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.7 x86_64 / EPEL/IUS Repos / Ope... 14 [OK]
docker.io docker.io/jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP m... 11 [OK]
docker.io docker.io/million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 9 [OK]
docker.io docker.io/blalor/centos Bare-bones base CentOS 6.5 image 8 [OK]
docker.io docker.io/nimmis/java-centos This is docker images of CentOS 7 with dif... 7 [OK]
docker.io docker.io/torusware/speedus-centos Always updated official CentOS docker imag... 7 [OK]

【参考资料】

  1. Docker从入门到实践

—EOF—