通过同一网络连接两个 Docker 容器

每当我们在 Docker 中暴露一个容器的端口时,它都会创建一条从该主机外部穿过网络层进入该容器的网络路径。这样,其他容器就可以连接到该容器,方法是先从主机出去,然后绕回来,再沿着这条路径返回。Docker 提供了丰富的网络选项,可以精确控制容器之间的连接方式,并确保其安全性和符合您的预期。 在深入研究本文之前,我们建议您了解Docker和计算机网络的基础知识,以便更清楚地了解幕后到底发生什么。 容器的通信 尽管容器彼此隔离,但它们之间仍然经常需要交互,甚至与外界进行交互。这种交互可以通过容器间的网络连接来实现。本质上,这意味着一个容器中的应用程序将通过另一个容器中的端口建立网络连接。在本文中,我们将学习连接容器并使其相互通信的基础知识。我们将在两个不同的容器上运行 Ubuntu,定义端口号,并让它们通过网络进行通信。 打开终端。 让我们首先看一下现有的网络,看看默认有什么。 docker network ls 我们可以看到默认存在3个网络: Bridge是容器使用的网络,容器不会指定优先接入其他网络。这意味着桥接网络为同一主机上的容器之间提供了非常基本的通信。 Host是指你不希望容器有任何网络隔离的情况。这意味着该网络可能存在安全隐患。 None是指您的容器无法联网。 使用以下命令创建您自己的网络: docker network create learn-networking 这样,我们就创建了一个名为learn-networking的网络。您可以随意给它命名。现在,我们将通过这个网络连接我们的容器。 并排打开两个终端。在其中一个终端中输入以下命令,通过网络learn-networking创建一个名为conatiner1的新容器。 docker run –rm -ti –net learn-networking –name container1 ubuntu:14.04 bash 这里: –rm命令用于在停止容器后立即删除容器。 -ti代表终端交互。 –net用于设置容器的网络。 –name用于指定容器的名称。这里的容器名称是container1。 现在在另一个终端上通过同一网络learn-networking创建一个名为container2的新容器。 docker run –rm -ti –net learn-networking –name container2 ubuntu:14.04 bash 现在我们有两个正在运行的容器,container1 和 container2。 另外,如果您打开 Docker … Read more

在 Docker 中创建网络并将容器连接到该网络

创建网络是为了让网络内部的设备能够相互连接并进行文件传输。在 Docker 中,我们也可以创建一个网络,创建一个容器并连接到相应的网络,连接到同一网络的两个容器可以相互通信。这些容器还可以与部署 Docker 的主机通信。通信将使用彼此的 IP 地址进行。一个容器可以连接到 Docker 主机上的一个或多个网络。 步骤 1: 第一步,我们运行命令来查看 docker 主机中的网络列表。 sudo docker network ls 桥接是 docker 中的默认网络。 第 2 步: 如果您想查看有关特定网络的信息,可以使用检查命令。 sudo docker network inspect docker_name 请注意,由于括号是空的,因此当前没有容器连接到桥接驱动程序。 步骤 3: 首先,我们将容器连接到默认网桥,该网桥是一个驱动程序,通过运行命令为连接到它的容器提供默认 DNS 服务。 sudo docker run -it ubuntu:latest /bin/bash 要退出我们刚刚创建的 Ubuntu 容器,请使用 Ctrl + p,然后按 Ctrl + q。现在再次运行 docker inspect 命令来查看连接到网桥的容器。 步骤 … Read more

Docker 管理端口

Docker 是一套平台即服务 (PaaS) 产品,它使用操作系统级虚拟化技术,以软件包(称为容器)的形式交付软件。这些容器可能需要相互通信,或者与 Docker 外部的服务通信。为此,我们不仅需要运行镜像,还需要公开容器的端口,使其能够被不同网络上的其他服务或容器访问。 注意: 如果您需要以 root 用户身份运行 docker,请记住在命令前面 加上 sudo 。 现在让我们看看如何在 Docker 中管理端口。 从 Docker Hub 拉取镜像: Docker Hub 是 Docker 提供的托管仓库服务,用于查找和共享容器镜像。您可以在 Docker Hub 上托管自己的镜像,但我们将使用官方 Nginx 仓库来拉取 Nginx 的镜像,Nginx 是一个开源反向代理服务器。Docker 上的官方镜像都有一个官方镜像标签。 这个仓库包含有关 Nginx 镜像及其使用方法的所有信息。在右上角,我们看到一个 docker pull 命令,它指定了如何将镜像拉取到我们的电脑上。 步骤1.使用命令拉取Nginx镜像。 $docker pull nginx 输出: 从拉取的镜像运行容器: 当我们使用docker run命令运行容器时,它不会向外界发布任何端口。要将容器端口暴露给 Docker 外部的服务,或暴露给与容器不在同一网络的容器,请使用 –publish 或 -p 标志。 –publish … Read more

Docker 网络

Docker 网络允许您创建一个由 Docker 容器组成的网络,该网络由一个称为管理器的主节点进行管理。Docker 网络中的容器可以通过共享信息包相互通信。在本文中,我们将讨论一些帮助您入门 Docker 网络的基本命令。 Docker 网络 网络是由两个或多个设备组成的组,它们可以通过物理或虚拟方式相互通信。Docker 网络是由 Docker 创建的虚拟网络,用于实现Docker 容器之间的通信。如果两个容器在同一主机上运行,它们可以相互通信,而无需向主机公开端口。您可以使用 Docker 以任何平台方式管理您的 Docker 主机,无论它们运行的是Windows、Linux还是两者的组合。 网络驱动程序 Docker 中提供了几个默认的网络驱动程序,有些可以借助插件来安装,命令查看下面提到的 Docker 中的容器列表。 docker network ls 网络驱动程序的类型 bridge: 如果构建容器时没有指定驱动程序类型,则容器只会在 bridge 网络中创建,这是默认网络。 host: 容器将没有任何 IP 地址,它们将直接在系统网络中创建,这将消除 docker 主机和容器之间的隔离。 none: 不会为容器分配 IP 地址。我们无法从外部或任何其他容器访问这些容器。 overlay: 覆盖网络将实现多个 Docker 守护进程之间的连接,并使不同的 Docker swarm 服务相互通信。 ipvlan: 用户可以使用 IPvlan 驱动程序完全控制 IPv4 和 IPv6 … Read more

使用 CLI 管理 Docker 卷

如果您想在多个 Docker 容器之间共享文件和目录,可以轻松地将 Docker 卷挂载到不同的容器。然而,管理如此大量的 Docker 卷有时会变得非常困难。在本文中,我们将讨论如何通过 Docker 命令行界面 (CLI) 执行命令来管理 Docker 卷。 什么是 Docker 卷? Docker 卷旨在提供持久存储机制。它用于管理数据并将其存储在容器系统之外,以确保即使容器被移除或重建,数据也能持久化。这对于维护数据一致性以及在多个容器之间共享数据至关重要。Docker 卷为 docker 添加了管理docker中有状态应用程序的功能。 为什么要使用 Docker Volumes? 以下是使用 docker 卷的原因: 持久存储:卷有助于在容器的生命周期结束后使数据持久化。即使容器被删除或更新,它也能让我们保留重要数据。 数据共享:卷有助于多个容器之间轻松共享数据,促进应用程序内不同服务之间的通信和协调。 性能:使用卷时,与将数据存储在容器的可写层相比,我们可以提高 I/O 操作性能,因为卷针对存储操作进行了优化。 备份和恢复:可以轻松备份和恢复卷,从而更轻松地管理和保护您的数据。 Docker Volumes 命令 以下是docker volumes的一些命令: 目的 Docker 命令 创建 docker 卷 docker volume create \ 列出 docker 中存在的所有 docker 卷 docker volume … Read more

备份 Docker 容器

如果您是 Docker 开发人员,您一定知道备份 Docker 容器文件系统的重要性。如果您正在开发一个重要的 Docker 应用程序,那么备份所有与其相关的文件和文件夹就变得非常必要,这样一旦出现问题,您就可以恢复所有文件。备份还可以帮助您管理项目的不同版本,并在团队成员之间共享项目的文件和文件夹。 在本文中,我们将了解如何通过将 Docker 容器保存为本地系统中的tar 文件来备份它。我们还将了解如何将 Docker 镜像备份直接推送到 Docker Hub 帐户,以便于共享。请按照以下步骤备份 Docker 容器: 步骤1:创建Docker容器 为了举例,我们将创建一个包含单个文件的 Ubuntu 容器。 sudo docker run -it ubuntu bash 启动 bash 后,使用以下命令创建文件。 echo “geeksforgeeks” > geeksforgeeks.txt ls 步骤 2:获取容器 ID 您将需要容器 ID 才能创建备份。 sudo docker 容器 ls 请注意,如果容器未运行,您可以使用以下命令启动容器。 sudo docker container ls 步骤 3:提交 Docker 容器 … Read more

Docker 中的数据存储

Docker 镜像是内置的层级结构,而 Docker 容器将所有正在使用的数据都存储在容器的可写层上,该层仅在容器的生命周期内才会被持久化,也就是说,一旦容器被移除,该层就无法再访问。如果其他进程需要这些数据,那么从容器中获取这些数据也会变得非常困难。 为了无论能持久保存数据,以便即使容器不再可用,文件仍可在主机文件系统中使用,Docker 提供了两个选项: Docker 卷 绑定挂载 但是,如果您在 Linux 上使用 Docker,您也可以使用tmpfs mount ,如果您在 Windows 上使用 Docker,您也可以使用命名管道。 在本文中,我们将介绍 docker 卷和绑定挂载以及它们在用例和有效性方面的差异。 1. Docker volume volume是存在于主机文件系统上的目录或文件,它们被挂载到容器上,用于持久化容器生成或修改的数据。它们存储在由 Docker 专门管理的主机文件系统部分,并且不应被非 Docker 进程修改。卷是存储容器数据的最佳方式,因为它们性能高效,并且与 Docker 主机的其他功能隔离。 我们可以使用以下命令来创建 docker 卷 -: docker volume create 我们可以同时将一个卷挂载到多个容器,即使它们没有被任何正在运行的容器使用,Docker 也不会删除它们。要删除卷,我们可以使用以下命令: docker volume prune 在 Linux 文件系统中,我们可以在以下路径“ /var/lib/docker/volumes/ ”找到可用的卷,而在 Windows 中,我们可以通过在文件资源管理器中运行以下命令来获取卷的位置 : \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes 要了解有关卷的更多信息以及如何将其安装到容器,请单击此处。 2.) … Read more

Docker Compose 运行多容器应用程序

本文讨论如何使用单个命令运行多容器应用程序。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用配置文件(YAML 文件)来配置您的 Docker 容器。然后,使用单个命令配置 Yaml 文件后,您就可以从您的配置中创建并启动所有服务(容器)。 假设我们有一个简单的应用程序,包含两个组件:一个 Flask 应用和一个 Redis 数据库。我将分别使用和不使用 docker-compose 工具来运行这个完整的应用程序,这将展示 docker-compose 工具的主要用途。 什么是 Docker Compose?它如何工作? Docker Compose是一个软件容器化工具,旨在使用单个命令来编排多容器Docker 应用程序的定义和运行。它从单个配置 Yaml 文件中读取多个容器的定义,并使用单行命令执行编排,方便开发人员使用。 它简化了复杂应用程序的管理,允许用户指定应用程序所需的服务、网络和Docker 卷。在配置 yaml 文件中,开发人员可以指定每个服务的参数,包括Docker 镜像、环境变量、端口和依赖项。Docker Compose 通过将整个应用程序设置封装在 dockercompose.yml 文件中来确保应用程序的安全性,从而确保在不同开发环境中保持一致性,从而轻松共享和可靠地复制应用程序。 为项目创建工作环境 步骤 1:创建一个包含我们项目的目录gfg_docker_compose $ mkdir gfg_docker_compose   第 2 步:通过运行以下命令移动到该目录并将其作为工作目录。 $ cd gfg_docker_compose 步骤 3:创建requirements.txt文件 $touch requirements.txt   … Read more

Docker Compose 简介

Docker 是一个开源平台,它简化了应用程序的设计、交付和部署。它通过将应用程序的依赖项编译到所谓的容器中,在隔离的环境中运行应用程序。有关 Docker 的更多信息,请参阅。通常情况下,支持应用程序需要多种服务,例如数据库和负载平衡。 本文将介绍 Docker Compose 如何协助设置多项服务。此外,我们还将演示如何安装和使用 Docker Compose。让我们先来简单了解一下 docker-compose。 Docker Compose 将执行基于 YAML 的多容器应用程序。YAML 文件包含部署 Docker Compose 容器所需的所有配置。Docker Compose 与 Docker Swarm 集成,并提供构建和部署容器的指导。使用 Docker Compose,每个容器都构建为在单个主机上运行。 Docker Compose 中的关键概念 Docker Compose 是一款功能强大的多容器应用程序管理工具,掌握其关键组件(例如服务、网络、卷和环境变量)可以极大地提升其使用体验。让我们来详细分析一下这些概念以及它们在 Docker Compose 文件中的工作原理。 Docker Compose 文件(YAML 格式) Docker Compose 配置主要存储在一个名为docker-compose.yml的文件中,该文件使用YAML格式定义应用程序的环境。此文件包含设置和运行应用程序所需的所有详细信息,例如服务、网络和卷。要有效地使用 Docker Compose,您必须了解此文件的结构。 YAML 配置的关键元素 version:它定义 Compose 文件的格式,确保与特定的 Docker Compose 功能和语法兼容。 services:此services部分列出了应用程序所需的每个容器化服务。每个服务都有其配置选项,例如要使用的镜像、环境变量和资源限制。 networks:在网络部分,您可以定义自定义网络,以实现容器之间的通信。此外,它还允许您指定网络驱动程序和自定义设置,以组织容器交互。 … Read more

使用公共存储库托管 Docker 镜像

Docker 是一个软件平台,用于创建隔离的虚拟化环境,以便轻松构建、部署和测试应用程序。在本教程中,我们将学习如何在 Docker Hub 上托管 Docker 镜像。Docker Hub 是 Docker 提供的托管仓库服务,用于查找和共享镜像。就像 GitHub 允许托管应用程序代码一样,DockerHub 允许托管应用程序镜像。 Docker 镜像 为了运行这些应用程序,我们首先需要创建当前应用程序状态的镜像。镜像有时也称为项目的快照。镜像本质上是只读的,由包含源代码、库、依赖项、工具以及应用程序运行所需的其他文件的文件组成。Docker镜像是一个只读模板,其中包含一组用于创建可在 Docker 平台上运行的容器的指令。 什么是 Docker Registry? Docker 镜像仓库是一项存储和管理 Docker 镜像的服务。Docker 镜像仓库可以由第三方托管,可以是公共镜像仓库,也可以是私有镜像仓库。以下是一些 Docker 镜像仓库的示例: Docker Hub GitLab AWS Container Registry Google Container Registry Docker – Private Registries Git Hub container Registry Docker Hub DockerHub 是一个容量巨大的存储区域,用于存储 Docker 容器所需的所有镜像。DockerHub 提供两种类型的镜像:私有镜像和公共镜像。 公共镜像仓库:这些仓库模拟了公共架子,任何人都可以拍照。只需知道 Jenkins … Read more