Docker学习--容器

182 阅读6分钟

容器

什么是 Docker 容器?

Docker 容器是 Docker 平台上的一个轻量级的可移植软件打包和交付解决方案。容器是一种独立的、可执行的软件单元,包括应用程序和其所有的依赖项。容器技术使得开发人员可以在不同的环境中以相同的方式部署和运行应用程序,因为它们在不同的环境中表现得几乎相同。

与传统的虚拟机不同,Docker 容器不需要完整的操作系统。相反,每个容器都共享主机系统的内核,只提供所需的系统库和其他运行时依赖项。这使得容器非常轻量级和高效,更容易在不同的平台和环境中进行部署和移植。

容器还支持高度自定义,通过组合多个容器可以创建更复杂的应用程序解决方案。Docker Hub 是一个广泛使用的容器镜像注册表,开发人员可以在其中共享和使用容器镜像。

容器的生命周期

容器的生命周期可以划分为四个阶段:创建、运行、停止和删除。

  1. 创建:容器的创建是使用 Dockerfile 中的定义和构建命令,由 Docker 引擎完成的。在创建过程中,需要指定容器的名称、镜像、端口映射等相关参数。

  2. 运行:在容器创建完成后,可以使用 Docker 命令将容器启动并运行。在运行过程中,Docker 会向容器分配资源,包括 CPU、内存、网络等,同时也会为容器分配一个唯一的标识符。

  3. 停止:当容器的任务完成或者需要停止时,可以使用 Docker 命令将容器停止。在停止过程中,Docker 会将容器中正在运行的进程关闭,并释放分配给容器的资源。

  4. 删除:在容器停止后,可以使用 Docker 命令将容器删除。在删除过程中,Docker 会删除容器的文件系统,并释放分配给容器的全部资源,以便下一次使用。

可以通过 Docker 命令或者 API 接口完成上述容器生命周期中的每一个阶段。掌握好容器的生命周期,可以更好地管理和运维容器化的应用。

如何创建和运行 Docker 容器?

创建和运行 Docker 容器通常有以下几个步骤:

  1. 安装 Docker:在开始使用 Docker 之前,需要先在本地计算机或云服务器上安装 Docker 引擎。

  2. 拉取镜像:Docker 容器是基于镜像构建的,因此需要先在 Docker Hub 或私有仓库中拉取需要的镜像。

    例如,在命令行上可以使用以下命令拉取一个名为ubuntu的镜像:

    docker pull ubuntu
    
  3. 创建容器:使用 docker run 命令创建容器。例如,运行以下命令可以在一个新的 ubuntu 镜像上创建一个新的容器。

    docker run -it --name my_container ubuntu /bin/bash
    

    在该命令中:

    • -it: 在交互模式下运行容器,并打开终端。
    • --name: 在创建容器时指定容器名称。
    • ubuntu: 指定容器的基础镜像。
    • /bin/bash: 在容器中运行的命令。
  4. 进入容器:可以使用 docker exec 命令将终端连接到正在运行的容器中。例如,运行以下命令可以进入一个名为 my_container 的容器:

    docker exec -it my_container /bin/bash
    

    在该命令中:

    • -it: 在交互模式下运行容器,并打开终端。
    • my_container: 指定要连接的容器名称。
    • /bin/bash: 在容器中运行的命令。

现在您已经成功创建并运行了一个 Docker 容器。您可以使用其他命令和工具来管理和监视容器。例如,docker stop 命令可以停止容器,docker rm 命令可以删除容器,docker ps 命令可以查看正在运行的容器,docker stats 命令可以查看容器资源使用情况等等。

容器网络和端口映射

Docker 中的容器网络可以让多个容器互相通信,而端口映射则可以让容器暴露出来的服务可以通过主机的 IP 地址和端口来访问。

容器网络有多种不同的类型,例如默认的桥接网络、主机网络、覆盖网络等。在默认的桥接网络中,每个容器都会被分配一个唯一的 IP 地址,并可以使用容器名称或 IP 地址来进行通信。在主机网络模式下,容器与主机共享同一个网络命名空间,因此容器的网络接口将继承自主机上的网络接口。在覆盖网络中,多个容器可以在同一个虚拟网络中进行通信,而不受物理网络拓扑的限制。

对于端口映射,可以使用 Docker 容器的 -p--publish 选项来指定哪些容器端口需要绑定到主机的端口。例如,假设您在容器内运行了一个 Web 服务器,并使用端口80暴露服务,您可以使用以下命令将容器端口80绑定到主机端口8080:

docker run -p 8080:80 my_web_server

使用这个命令后,Web 服务器将可以通过 http://<主机IP>:8080 来访问。

另外,如果您要绑定所有容器端口,则可以使用 -P--publish-all 选项,Docker 将为每个暴露的端口分配一个随机端口,并将它们映射到主机上。但要注意,此时如果要查找确切的端口映射关系,需要使用 docker ps 命令来获取详细信息。

管理和监控容器

Docker 提供了一系列命令和工具,可以方便地管理和监控容器的状态和行为。

下面是一些常用的 Docker 命令:

  • docker ps: 查看当前正在运行的容器。
  • docker start <容器名或 ID>: 启动一个已经停止的容器。
  • docker stop <容器名或 ID>: 停止一个正在运行的容器。
  • docker restart <容器名或 ID>: 重新启动一个正在运行的容器。
  • docker attach <容器名或 ID>: 进入一个正在运行的容器的命令行环境。
  • docker logs <容器名或 ID>: 查看容器的日志输出。
  • docker rm <容器名或 ID>: 删除一个已经停止的容器。
  • docker inspect <容器名或 ID>: 查看容器的详细信息。

此外,还可以使用 Docker Compose 一类的工具来方便地定义和管理多个容器组成的应用程序。

在监控方面,Docker 提供了一些内置的命令和工具,可以帮助你了解容器的状态和资源利用情况,例如:

  • docker stats <容器名或 ID>: 查看正在运行的容器的 CPU、内存、网络和 I/O 等资源利用情况。
  • docker events: 实时监控 Docker 中的事件,例如容器的创建、启动、停止等操作。
  • docker top <容器名或 ID>: 查看容器内部运行的进程。
  • docker exec <容器名或 ID> <命令>: 在运行的容器中执行命令,用于诊断和调试容器内部的问题。

除了 Docker 自带的工具之外,还有一些第三方工具可以更方便地监控和管理 Docker 容器,例如 Portainer、Docker Swarm、Kubernetes 等等。