四时宝库

程序员的知识宝库

「048」Docker:命令行介绍及容器操作

这一篇文章我将和大家一起快速地入门 Docker 的命令行(CLI)基本结构,和一些常用的容器操作,比如容器的创建、停止和删除等。

Docker 命令行基本结构

一般 Docker 的命令行基本结构是这样的:

首先,Docker 命令都是以 docker 开头。

然后可以跟上一个我们想要管理或操作的对象类型,比如要操作容器则跟上 container 命令,要操作镜像则跟上 image 命令。

再然后可以跟上对这个对象要进行的具体操作,比如要显示某个对象类型的列表则跟上 ls 命令,要删除某个对象则跟上 rm 命令。

最后可以根据需要加上控制参数或选项,比如 docker container ls 命令默认只显示正在运行的容器,加上 -a 选项则表示显示所有容器。再比如 docker container rm 跟上具体的容器 ID 则可删除该容器。

那么,完整 Docker 命令行结构一般形如这样:

$ docker container ls
$ docker container ls -a
$ docker container rm 123

当然这个结构只是一般形式,具体还是要看命令本身。比如 docker 命令后面可以不跟要操作的对象类型,直接跟一个操作命令,比如 docker info 显示 Docker 的信息,和 docker rm 删除指定容器等。

获取命令行帮助

和大多数命令行一样,在某个命令后台跟上 --help 选项可以打印该命令的用途和用法。比如当我们输入命令 docker --help 时,它会列出 docker 有哪些命令及其用法。

$ docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default
                           context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  app*        Docker App (Docker Inc., v0.9.1-beta3)
  builder     Manage builds
  buildx*     Docker Buildx (Docker Inc., v0.8.0-docker)
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  scan*       Docker Scan (Docker Inc., v0.17.0)
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

我们可以看到 docker 命令的输出分为三部分,分别是 OptionsManagement CommandsCommands,这也对应着我们上文说的 Docker 命令行的基本结构。Options 就是我们前面说的命令行参数或选项,Management Commands 是我们要去管理或操作的对象类型,Commands 是具体的操作。

命令行的简写

这里讲一个简写规则,大部分的 docker container 命令都可以简写为 docker,即把 container 省略掉。比如 docker rundocker container run 的简写,docker rmdocker container rm 的简写等。

一个特殊的是 docker container psdocker container ls,前者是 Docker 早期就有命令,两者是等同的,它们的简写都是 docker ps。注意,至少目前没有 docker ls 这个命令。

大家知道有这样一些规则,就不会觉得 Docker 命令多了。

创建第一个容器

现在我们来创建我们的第一个容器。创建容器需要使用 docker container 下的命令,最快捷的一个方式是使用 docker container run 命令。这个命令将先在本地寻找一个指定的镜像,如果本地没有,则会去 Registry 仓库拉取该镜像创建一个容器,并运行该容器。

比如,我们使用 nginx 镜像创建一个容器。如果你和我一样是 Windows 系统,则可以打开 PowerShell 运行:

PS C:\Users\Liam> docker container run nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
f7a1c6dad281: Pull complete
4d3e1d15534c: Pull complete
9ebb164bd1d8: Pull complete
59baa8b00c3c: Pull complete
a41ae70ab6b4: Pull complete
e3908122b958: Pull complete
Digest: sha256:1c13bc6de5dfca749c377974146ac05256791ca2fe1979fc8e8278bf0121d285
Status: Downloaded newer image for nginx:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

从输出的内容我们也可以知道 docker container run nginx 的执行过程。先是在本地没有找到 nginx:latest 镜像,则从远程拉取(Pull),拉取后开始执行镜像中的 docker-entrypoint.sh 脚本做一些启动前的准备,最后启动容器。

查看容器状态

通过 docker container ls 命令可以列出正在运行的容器。我们再打开另外一个 PowerShell 运行:

PS C:\Users\Liam> docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
090f54565610   nginx     "/docker-entrypoint.…"9 minutes ago    Up 9 minutes    80/tcp    epic_shtern

可以看到我们刚刚创建的容器信息,分别包括唯一的镜像 ID、所使用的镜像名称、创建的时间、运行的时长、端口协议和一个随机的名称。

这样创建的容器是在前台运行的,这意味着通过 Ctrl+C 或关掉终端时,容器将一起结束运行。你可以关掉第一个 PowerShell,再运行一次 docker container ls 看看刚刚创建的容器是否还在。

停止容器

正常情况下,我们一般通过 docker container stop 跟上容器 ID 来结束一个正在运行的容器:

PS C:\Users\Liam> docker container stop 090f54565610
090f54565610

此时要显示已退出的容器,则可以使用 docker container ls -a 命令:

PS C:\Users\Liam> docker container ls -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS    NAMES
090f54565610   nginx     "/docker-entrypoint.…"19 minutes ago   Exited (0) 1 minutes ago             epic_shtern

可以看到 STATUS 已经是退出了。

移除容器

和停止容器类似,使用 docker container rm 跟上容器 ID 即可,比如:

PS C:\Users\Liam> docker container rm 090f54565610
090f54565610

使用 docker ps -a 再次查看所有容器列表:

PS C:\Users\Liam> docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS       PORTS     NAMES

需要注意的是,正在运行的容器是不能删除的。要删除正在运行的容器,需要先将其停止,或者使用强制删除命令 -f

docker container rm 090f54565610 -f

小结

回顾一下这节课的内容。我们首先讲了 Docker 命令行的一般基本结构,即 docker <Management Commands> <Commands> <Options>。接着讲了 Docker 的简写规则,比如 docker container run 可以简写成 docker run。再接着介绍了几个关于容器的常用命令行操作,有 runls(ps)、stoprm

下一节课讲命令行的几个小技巧,来提高我们平时编写命令行的效率。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接