Docker 简明教程

Docker - Working with Containers

Docker 容器是一个可移植的软件单元,它打包一个应用程序及其所有依赖项,以便在任何基础设施上运行。所以,该应用程序在很多开发、测试和生产环境中始终如一地运行。本章重点介绍 Docker 容器的一些基本命令,这将帮助您无缝地使用容器。

Important Docker Container Commands

Docker 附带了很多命令,这些命令可用于构建、管理和运行容器。这些命令对于使用 Docker 至关重要;它们使您可以非常有效地控制容器的生命周期和行为。了解和精通使用这些命令对于有效利用 Docker 至关重要。

Creating and Starting Containers - docker run command

docker run 命令创建一个新容器并启动它。它包括从存储库中提取映像(如果它不在您的本地系统上)、创建容器并启动一个容器的功能。可以传递多个选项和标记来改变容器的行为,例如设置环境变量、挂载卷和配置网络。

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
$ docker run -d -p 80:80 --name mywebserver nginx
creating and starting containers

此命令将在分离模式 (-d) 下启动我们的 nginx web 服务器容器,将宿主的 80 端口暴露给容器的 80 端口 (-p 80:80),并将容器命名为 my webserver。

Listing Containers

docker ps 命令用于列出所有正在运行的容器。默认情况下,它只列出正在运行的容器,但人们可以提供额外的标记来包括已停止的容器或根据任意标准过滤结果。此命令输出重要信息,如容器 ID、名称、状态和启动特定容器的命令。

$ docker ps
$ docker ps -a
listing containers

此命令列出所有容器,包括已停止的容器 (-a)。

Managing Container States

以下是要用于控制容器状态的命令。

  1. Docker Start − 启动一个或多个已停止的容器。

  2. Docker Stop − 从容地停止正在运行的容器,以便有时间正确关闭它们。

  3. Docker Restart − 停止然后启动一个或多个容器,有效地重新启动它们。

$ docker start [CONTAINER]
$ docker stop [CONTAINER]
$ docker restart [CONTAINER]
$ docker start mywebserver
$ docker stop mywebserver
$ docker restart mywebserver
managing container states

上述命令分别启动、停止和重新启动一个名为 my webserver 的容器。

Viewing Container Logs

人们可以使用 docker logs 命令来从正在运行或已停止的容器中提取日志。它将提供对容器的输出及其行为的视图,这对于调试和监视目的非常有帮助。您还可以关注实时日志或将输出限制为最近的日志条目。

$ docker logs [OPTIONS] CONTAINER
$ docker logs mywebserver
viewing container logs

这个命令显示 mywebserver 容器的日志。

Removing Containers

docker rm 命令删除一个或多个容器。它对于清除不再需要的容器很有用。要删除正在运行的容器,你必须先停止它或使用 -f (强制) 选项强制删除它。

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
$ docker rm mywebserver
removing containers

这个命令删除 mywebserver 容器。

Creating Images from Containers

docker commit 命令根据容器中的更改提交一个新镜像。当你想要在当前时刻保存容器的状态,然后与他人共享该状态或在另一个容器中再次使用它时,它很有用。

$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
$ docker commit mywebserver mynewimage
creating images from containers

这个命令将使用 webserver 容器创建一个新镜像,名为 mynewimage。

Other Key Commands

Docker 还有几个其他命令来操作和管理容器。

  1. Docker exec − 在活动容器中执行命令。

  2. Docker cp − 在容器和本地文件系统之间复制文件/文件夹。

  3. Docker top − 显示容器的正在运行的进程。

  4. Docker attach − 连接到正在运行的容器与之交互。

  5. Docker pause and unpause − 它们分别用于暂停容器进程和恢复它。

下面的命令在 mywebserver 容器中交互式地运行 Bash shell。

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
$ docker exec -it mywebserver /bin/bash

下一个命令将 /var/www/html 的内容从 mywebserver 容器复制到本地 ./local_copy 目录。

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp mywebserver:/var/www/html ./local_copy

下面的命令显示 mywebserver 容器的正在运行的进程。

$ docker top CONTAINER [ps OPTIONS]
$ docker top mywebserver
other key commands 1

下一个命令将你的终端连接到 mywebserver 容器。

$ docker attach [OPTIONS] CONTAINER
$ docker attach mywebserver
other key commands 2

后续命令分别暂停和取消暂停 mywebserver 容器。

$ docker pause CONTAINER [CONTAINER...]
$ docker unpause CONTAINER [CONTAINER...]
$ docker pause mywebserver
$ docker unpause mywebserver
other key commands 3

Publishing Container Ports

发布容器端口使容器服务从 Docker 主机之外可以访问。通过将容器端口映射到主机端口,你可以将容器内部运行的服务暴露给外部客户端。

$ docker run -p HOST_PORT:CONTAINER_PORT [OPTIONS] IMAGE [COMMAND] [ARG...]
$ docker run -d -p 8080:80 --name webserver nginx
publishing container ports

上面的命令将运行一个 nginx 容器并将容器的 80 端口映射到主机上的 8080 端口,从而允许在 [role="bare"] [role="bare"]http://localhost:8080 访问 Web 服务器。

Resource Management (CPU, Memory, IO)

Docker 提供了几种功能来设置限制和管理分配给容器的资源。这可以防止单个容器不公平地使用资源。

CPU Limits

$ docker run --cpus="1.5" [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令限制容器最多使用 1.5 个 CPU 内核。

Memory Limits

$ docker run --memory="512m" [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令限制容器最多使用 512 MB 内存。

IO Limits

$ docker run --blkio-weight=500 [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令初始化容器的块 IO 权重;用户可以影响 IO 优先级。

Conclusion

借助功能强大的容器化平台的支持,Docker 重新定义了软件开发和部署格局。在使用 Docker 发挥其全部潜能时,理解和掌握其基本命令、网络功能、高级操作和最佳实践至关重要。

随着您继续研究和花费时间使用 Docker,这些基本和高级概念将帮助您构建、管理和部署不仅可扩展、安全,而且高效的应用程序。

FAQs on Docker Working with Containers

1. How does Docker isolate containers from each other and the host system?

命名空间和控制组主要在 Docker 中实现隔离。命名空间提供隔离 - 它们允许每个容器使用具有独立进程列表、网络设置和文件系统的系统视图。

控制组一次限制容器可以使用资源的量,以确保在 CPU、内存或 I/O 方面的重负载情况下,它不会饿死系统中的其他部分。这种隔离确保了包含的应用程序可以独立运行,而不会干扰其他应用程序或基础主机。

2. Can I use Docker on a production server?

是的,重要的是要强调 Docker 在生产环境中被大量使用。组织在容器中运行服务,以可靠地打包和将应用程序部署到不同平台。

在投入生产时,请务必遵循安全性、监视和可扩展性的最佳实践。您可以使用编排工具(如 Docker Swarm 或 Kubernetes)来帮助管理大规模的 Docker 部署。

3. How do I update a Docker container without losing its data?

要无损地更新容器,您首先停止容器。您从注册表中拉取更新的映像,在从注册表中拉取更新的映像后,您删除旧的现有容器 - 使用 "-v" flag on docker rm 保留其卷。

最后,使用更新的映像启动新容器,并挂载同一卷到前一个映像。通过这种方式,您的数据在更新后仍将保持一致。