当前位置:  首页>> 技术小册>> Docker入门与实战

第五章:Docker容器的启动与运行

在Docker的世界里,容器的启动与运行是掌握Docker技术的核心环节之一。本章将深入探讨如何高效、安全地启动Docker容器,并理解容器运行时的各种状态、配置以及管理技巧。通过本章的学习,读者将能够独立完成容器的创建、启动、监控及基本管理任务,为后续的高级应用与部署打下坚实基础。

5.1 容器启动基础

5.1.1 Docker镜像与容器的关系

在Docker中,镜像(Image)是构建容器的基石,它包含了运行应用所需的所有依赖、库、环境变量和配置文件等。容器(Container)则是镜像运行时的实例,是镜像的一个可运行、可写入的版本。通过Docker镜像,我们可以快速创建出多个隔离的容器环境,每个容器都可以独立运行应用程序。

5.1.2 启动容器的命令

Docker提供了docker run命令用于从镜像启动新的容器。该命令的基本语法如下:

  1. docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • OPTIONS:指定容器运行时的各种选项,如-d表示后台运行容器,--name用于指定容器名称等。
  • IMAGE[:TAG|@DIGEST]:指定要使用的镜像名称及其标签或摘要。
  • COMMANDARG…:容器启动后默认执行的命令及其参数。

例如,要以后台模式启动一个Ubuntu镜像的容器,并命名为my_ubuntu,可以使用以下命令:

  1. docker run -d --name my_ubuntu ubuntu

5.2 容器运行时的配置

5.2.1 端口映射

默认情况下,容器内部的应用对外是不可见的。为了能让外部访问容器内的服务,我们需要进行端口映射。通过-p--publish选项,可以将容器内的端口映射到宿主机的端口上。

  1. docker run -d -p 8080:80 --name my_web nginx

上述命令将容器内的80端口映射到宿主机的8080端口,使得我们可以通过访问宿主机的8080端口来访问Nginx服务。

5.2.2 环境变量

环境变量在容器化应用中扮演着重要角色,它们用于配置应用的行为。Docker允许在启动容器时通过-e--env选项设置环境变量。

  1. docker run -d -e "DEBUG=1" --name my_app my_image

这将在my_app容器中设置环境变量DEBUG的值为1

5.2.3 数据卷

数据卷(Volumes)是Docker用于存储或共享数据的机制,它允许你将容器内的数据目录挂载到宿主机或其他容器上,实现数据的持久化或共享。使用-v--volume选项可以创建数据卷。

  1. docker run -d -v /my/host/dir:/my/container/dir --name my_container my_image

这将宿主机上的/my/host/dir目录挂载到容器内的/my/container/dir目录。

5.3 容器运行状态管理

5.3.1 查看容器状态

使用docker ps命令可以查看当前正在运行的容器列表。加上-a--all选项可以列出所有容器(包括未运行的)。

  1. docker ps
  2. docker ps -a
5.3.2 启动与停止容器
  • 启动容器:如果容器之前被停止或退出,可以使用docker start命令重新启动它。

    1. docker start my_container
  • 停止容器:使用docker stop命令可以优雅地停止容器,Docker会先向容器发送SIGTERM信号,等待一段时间后(默认为10秒),如果容器仍未停止,则发送SIGKILL信号强制停止。

    1. docker stop my_container
5.3.3 重启容器

当需要重启容器时,可以直接使用docker restart命令。

  1. docker restart my_container
5.3.4 进入容器内部

有时,我们需要直接进入容器内部进行调试或查看日志。docker exec命令允许我们在运行的容器中执行命令,而docker attach则用于附加到容器的标准输入、输出和错误流。但通常推荐使用docker exec -it结合bash或sh来进入容器。

  1. docker exec -it my_container bash

如果容器中没有bash或sh,可以尝试使用/bin/sh或其他可用的shell。

5.4 容器日志与监控

5.4.1 查看容器日志

使用docker logs命令可以查看容器的输出日志。这对于调试容器内应用非常有帮助。

  1. docker logs my_container
5.4.2 容器性能监控

虽然Docker本身不直接提供高级的性能监控工具,但我们可以利用一些第三方工具(如cAdvisor、Prometheus等)或Docker的API来收集容器的性能指标,如CPU使用率、内存占用、网络I/O等。

5.5 容器安全与隔离

Docker通过内核的命名空间(Namespaces)和控制组(Cgroups)技术实现了容器的隔离性,确保了容器间以及容器与宿主机之间的安全。然而,作为开发者或运维人员,我们还需要注意以下几点来增强容器的安全性:

  • 使用官方或可信的镜像源。
  • 避免以root用户运行容器内的应用。
  • 谨慎使用数据卷,避免敏感数据泄露。
  • 定期更新Docker及其依赖库,以修复已知的安全漏洞。
  • 使用Docker Compose或Kubernetes等容器编排工具来管理复杂的容器化应用,提高整体的安全性和可维护性。

结语

本章详细介绍了Docker容器的启动与运行过程,包括容器的基本启动命令、运行时配置(如端口映射、环境变量、数据卷等)、状态管理(启动、停止、重启、进入容器内部)、日志与监控以及容器安全与隔离等关键内容。通过本章的学习,读者应该能够熟练掌握Docker容器的日常操作与管理,为后续的Docker高级应用与部署打下坚实的基础。


该分类下的相关小册推荐: