Docker使用帮助

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。

Docker与传统虚拟机如virtualbox、vmware相比,占用资源少,更加轻便,启动快,更适用于解决软件环境配置难题。

基本概念

  1. 镜像

    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

  2. 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  1. 仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

使用方法

操作镜像

获取镜像

Docker Hub 上有大量的高质量的镜像可以用,使用docker pull命令拉取镜像。

1
2
3
4
// 拉取镜像
$ docker pull ubuntu:16.04
// 以该镜像启动容器
$ docker run -it --rm ubuntu:16.04 bash

docker run 就是运行容器的命令,其参数含义如下:

  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • –rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。
  • ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

列出镜像

1
docker image ls

删除镜像

删除本地镜像格式如下:

1
docker image rm [选项] <镜像1> [<镜像2> ...]

以删除hello-world镜像为例:

1
docker image rm hello-world

操作容器

启动容器

1
2
3
4
// 新建并启动容器
docker run ubuntu:14.04 /bin/echo 'Hello world'
// 启动已终止容器
docker container start

后台运行

1
2
3
4
5
6
7
// 后台运行容器
$ docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
// 通过 docker container ls 命令来查看容器信息
$ docker container ls

// 通过 docker container logs 命令获取容器的输出信息
$ docker container logs [container ID or NAMES]

终止容器

1
docker container stop

进入容器

在使用 -d 参数时,容器启动后会进入后台。

某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令。

1
2
3
4
$ docker run -dit ubuntu
$ docker container ls
$ docker exec -i 69d1 bash
$ docker exec -it 69d1 bash

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

删除容器

1
2
3
4
5
// 删除一个处于终止状态的容器
$ docker container rm trusting_newton

// 清理所有处于终止状态的容器
docker container prune

参考文献

  1. https://yeasy.gitbooks.io/docker_practice/introduction/what.html
  2. http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html ,by 阮一峰
  3. https://zh.wikipedia.org/wiki/Docker ,by wikipedia.