镜像操作

获取镜像

从 Docker 镜像获取镜像的命令是 docker pull 。其命令格式为:

docker pull [OPTIONS] NAME[:TAG]

例如:从仓库中获取 Ubuntu 18.04 的镜像

docker pull ubuntu:18.04

列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令。

docker image ls [OPTIONS] [REPOSITORY[:TAG]]

有时候我们想只列出部分列表,docker image ls 有好几个参数可以帮助做到这个事情。

根据仓库名列出镜像

$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB
ubuntu              latest              f753707788c5        4 weeks ago         127 MB

列出特定的某个镜像

$ docker image ls ubuntu:18.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB

删除镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

docker image rm [OPTIONS] IMAGE [IMAGE...]

比如我们有如下镜像:

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              84c5f6e03bf0        4 days ago          104MB
ubuntu              latest              4e2eef94cd6b        3 weeks ago         73.9MB

我们可以通过以下命令删除 ubuntu 镜像

$ docker image rm 4e2eef94cd6b

容器操作

启动容器

启动容器需要用到的命令为 docker run 。该命令的格式如下:

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

例如:下面的命令启动了一个 ubuntu 容器,并启动了一个可交互的 shell 终端。

$ docker run -it ubuntu /bin/bash
  • -t 选项让 Docker 为容器分配一个终端并绑定到容器的标准输入上。
  • -i 选项让容器的标准输入保持打开。
  • /bin/bash 可省略,默认为 bash。

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

例如:

$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
b5f4da7c8211b713500ca5678b17892700f3423e9e02f46651c506bdab2bd11d

终止容器

在 Docker 中可以使用 docker container stop 命令来终止一个正在运行的容器。

此外,当 Docker 容器中指定的应用终结时,容器也自动终止。例如对于上面只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

例如我们要终止我们刚才启动的容器

$ docker container stop b5f4

处于终止状态的容器,可以通过 docker container start 命令来重新启动。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
0aca5f898c5a        ubuntu              "bash"              12 minutes ago      Exited (0) 4 minutes ago                       bold_bell

$ docker container start 0ac -i

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

进入容器

在启动容器时如果使用了 -d 参数,容器启动后就会进入后台运行。

如果我们需要进入容器中进行操作,则可以使用 docker attach 或者 docker exec 命令。

  • docker attach 命令
$ docker attach CONTAINER_ID

使用 attach 命令进入容器会打开一个 shell 终端。接下来就和我们在 Linux 终端中操作相同。

注意:如果从这个终端中 exit,会直接终止容器。

  • docker exec命令

docker exec 命令的格式和 docker run 命令的格式基本相同,使用 -it 参数即可打开一个终端

$ docker exec -it CONTAINER_ID bash

如果从这个 stdin 中 exit,不会导致容器的停止。所以更推荐使用 docker exec 命令来进入容器。

删除容器

使用 docker container rm 命令可以删除一个处于终止状态中的容器。例如

$ docker container rm CONTAINER_ID/CONTAINER_NAME

如果我们有很多终止中的容器,一个一个的删除会太麻烦,可以使用下面的命令一键清理所有处于终止状态中的容器

$ docker container prune

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
7691a814370e        ubuntu:18.04        "/bin/bash"         36 hours ago        Exited (0) 21 hours ago                       test
$ docker export 7691a814370e > ubuntu.tar

导入容器

可以使用 docker import 从容器快照文件中再导入为镜像,例如

$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
test/ubuntu         v1.0                9d37a6082e97        About a minute ago   171.3 MB