Docker - 使用容器



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

重要的 Docker 容器命令

Docker 附带许多可用于构建、管理和运行容器的命令。这些命令是使用 Docker 的基础;它们使您能够非常有效地控制容器的生命周期和行为。了解和掌握这些命令的使用对于有效利用 Docker 至关重要。

创建和启动容器 - docker run 命令

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),并将容器命名为 mywebserver。

列出容器

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

命令

$ docker ps

示例

$ docker ps -a 
Listing Containers

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

管理容器状态

这些是用于控制容器状态的命令。

  • docker start − 启动一个或多个已停止的容器。
  • docker stop − 优雅地停止正在运行的容器,以便有时间正确关闭。
  • docker restart − 停止然后启动一个或多个容器,有效地重新启动它们。

命令

$ docker start [CONTAINER]
$ docker stop [CONTAINER]
$ docker restart [CONTAINER]

示例

$ docker start mywebserver
$ docker stop mywebserver
$ docker restart mywebserver
Managing Container States

上面的命令分别启动、停止和重启名为 mywebserver 的容器。

查看容器日志

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

命令

$ docker logs [OPTIONS] CONTAINER

示例

$ docker logs mywebserver
Viewing Container Logs

此命令显示 mywebserver 容器的日志。

删除容器

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

命令

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

示例

$ docker rm mywebserver
Removing Containers

此命令删除 mywebserver 容器。

从容器创建镜像

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

命令

$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

示例

$ docker commit mywebserver mynewimage
Creating Images from Containers

此命令将根据 webserver 容器创建新镜像 mynewimage。

其他关键命令

Docker 还有一些其他命令可用于处理和管理容器。

  • docker exec − 在活动容器中执行命令。
  • docker cp − 在容器和本地文件系统之间复制文件/文件夹。
  • docker top − 显示容器的正在运行的进程。
  • docker attach − 附加到正在运行的容器以与其交互。
  • docker pause 和 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

发布容器端口

发布容器端口使容器服务可以从 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 端口,允许通过 https://127.0.0.1:8080 访问 web 服务器。

资源管理 (CPU、内存、IO)

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

CPU 限制

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

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

内存限制

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

此命令将容器限制为最多 512 MB 的内存。

IO 限制

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

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

结论

Docker 通过支持强大的容器化平台,重新定义了软件开发和部署的格局。在使用 Docker 时,了解和掌握其基本命令、网络功能、高级操作和最佳实践对于充分发挥其潜力非常重要。

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

关于 Docker 使用容器的常见问题

1. Docker 如何将容器彼此隔离以及与主机系统隔离?

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

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

2. 我可以在生产服务器上使用 Docker 吗?

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

进入生产环境时,务必遵循安全、监控和可扩展性的最佳实践。您可以使用 Docker Swarm 或 Kubernetes 等编排工具来帮助管理大规模的 Docker 部署。

3. 如何更新 Docker 容器而不丢失其数据?

要以非破坏性的方式更新容器,首先停止容器。从注册表拉取更新的镜像,并在从注册表拉取更新的镜像后,删除旧的现有容器 - 在 docker rm 上保留其卷使用 "-v" 标志

最后,使用更新的镜像启动一个新容器并在之前的容器中挂载相同的卷。这样,您的数据在更新后仍然一致。

广告