发布于 2026-01-06 4 阅读
0

Docker 基础知识 - 如何使用 Docker 网络连接容器。简介 先决条件 由 Mux 呈现的 DEV 全球展示挑战赛:展示你的项目!

Docker基础知识——如何使用Docker网络连接容器。

介绍

先决条件

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

介绍

所以 Docker 是一个非常棒的工具,它易于扩展,几乎可以在多个部署环境中复制任何环境。关于 Docker 及其功能有很多热门词汇,但在本次课程中,我们将回顾如何使用 Docker 构建去中心化架构并使其发挥作用。一个典型的示例是将同一应用程序的两个不同模块分离出来,以便它们可以独立通信。有趣的是,在 Docker 的支持下,这两个模块可以使用 Docker 网络连接到同一个数据源。

先决条件

所以,本文将基于以下假设。

为了更清晰地说明,我们仍然要定义一些 Docker 概念。

什么是 Docker?

Docker 是一种专注于构建基于容器的架构以改善开发人员工作流程的技术。

容器镜像是一个轻量级的、独立的、可执行的软件包,其中包含运行该软件所需的一切:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于 Linux 和 Windows 应用程序,无论在何种环境下运行,其性能始终保持一致。

设置 Docker 和 Docker Compose

Docker 是一款广泛使用的工具,拥有大量入门资源。简单来说,我将重点介绍一些可以帮助您入门的资源。

对于 Linux 开发人员来说,除了 Docker 网站上的文档之外,这些资源可以确保基于 Debian 的用户能够轻松快速地掌握要点。

安装 Docker 后,您需要 docker-compose。Mac 版 Docker 和 Windows 版 Docker 已经预装了 docker-compose,所以您可以直接使用。对于 Linux 用户来说,我们还有一些工作要做。

  1. 运行此命令以下载最新版本的 docker-compose。
sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose'
Enter fullscreen mode Exit fullscreen mode

如果您在使用 curl 安装时遇到问题,请点击此处。

  1. 对二进制文件赋予可执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
Enter fullscreen mode Exit fullscreen mode
  1. 测试您的安装
$ docker-compose --version
$ docker-compose version 1.17.0, build 1719ceb
Enter fullscreen mode Exit fullscreen mode

容器的架构

容器并不像听起来那么复杂,实际上它们的概念和架构都非常简单。Docker 容器本质上就是一个运行在特定环境中的服务。

您的容器运行在 Docker 架构上,使用 Dockerfile、docker-compose.yml 文件或 docker run 命令中指定的镜像进行配置。这些容器通常会暴露端口以便相互连接。

您的容器本身就是独立的服务,它们可以通过彼此之间的网络配置来协作,这些网络是在 docker-compose 文件中创建的。

你的 Docker 文件设置通常会为你设置一个镜像和一个基于该镜像创建容器的配置文件。为了充分解释这一点,我们将对一个 Node 应用程序进行 Docker 化。

将 Node 应用容器化

在这个简单的设置中,我们将在一个基于 Node 的 Web 应用上部署 Docker,以展示 Docker 的强大功能。
项目代码可以在参考仓库中找到。

步骤 1 - 设置基础应用程序

首先,我们设置 Express 应用程序。

$ npm i -g express-generator #setup the express-generator
$ express # setup an express app
$ touch processes.json
Enter fullscreen mode Exit fullscreen mode

运行 pm2 需要配置 processes.json 文件,pm2 用于管理服务器进程
。通常,我们可以使用该文件运行应用程序。

$ node ./bin/www
Enter fullscreen mode Exit fullscreen mode

基本上,我们让应用程序运行起来,但使用 pm2,我们更进一步,添加了负载均衡,并基本上为应用程序的扩展做好了准备。

步骤 2 - 设置 Docker 镜像

接下来,我们在基础文件中设置 Docker 镜像。

#Step 1.
FROM node:6.11-wheezy

#Step 2
LABEL version="1.0"
LABEL description="This is our base docker image"
LABEL maintainer "mozart.osita@gmail.com"

#Step 3.
ENV appDir /var/www/app/current

#Step 4.
ENV NODE_ENV production

#Step 5..
# Set the work directory
RUN mkdir -p /var/www/app/current
WORKDIR ${appDir}

#Step 6
ADD package.json ./
RUN yarn install --production


RUN yarn global add forever pm2

ADD . /var/www/app/current

EXPOSE 4500

CMD ["pm2", "start", "processes.json", "--no-daemon"]


Enter fullscreen mode Exit fullscreen mode

在设置过程中,前几部分指定了我们要用哪些图像来构建我们的图像。

#Step 1.
FROM node:6.11-wheezy
Enter fullscreen mode Exit fullscreen mode

使用标签,我们可以指定有关我们正在设置的图像的其他信息。

#Step 2
LABEL version="1.0"
LABEL description="This is our base Docker image"
LABEL maintainer "mozart.osita@gmail.com"
Enter fullscreen mode Exit fullscreen mode

appDir之后,我们设置环境变量,将环境设置为生产环境,并使用该变量在服务器上设置工作目录。

#Step 3.
ENV appDir /var/www/app/current

#Step 5.
ENV NODE_ENV production

#Step 6..
# Set the work directory
RUN mkdir -p /var/www/app/current
WORKDIR ${appDir}
Enter fullscreen mode Exit fullscreen mode

接下来,我们在设置package.jsonworkdir运行 yarn install 命令并添加 production 标志,同时将其他目录和文件添加到工作目录中。

#Step 7
ADD package.json ./
RUN yarn install --production


RUN yarn global add forever pm2

ADD /var/www/app/current
Enter fullscreen mode Exit fullscreen mode

完成所有这些步骤后,我们将暴露 4500 端口,该端口将用于连接外部环境。

EXPOSE 4500

CMD ["pm2", "start", "processes.json", "--no-daemon"]
Enter fullscreen mode Exit fullscreen mode

之后的 CMD 命令会启动服务器,并使用基于节点的进程管理器 pm2。

步骤 3 - 构建镜像并部署

之后,我们构建镜像并进行设置和运行。

$ docker build -t <image name> . #please remember the .(dot)
Enter fullscreen mode Exit fullscreen mode

这会运行一个构建镜像的进程,之后您可以将镜像添加到 Docker Hub,以便从任何位置拉取镜像。
如果您有 Docker Hub 帐户,请在终端中登录。

$ docker login --username=yourhubusername --email=youremail@company.com
Enter fullscreen mode Exit fullscreen mode

接下来,获取图像 ID

$ docker images
Enter fullscreen mode Exit fullscreen mode

从列表中获取图像的 ID,并使用存储库名称标记图像。

$ docker tag bb38976d03cf yourhubusername/reponame:yourtag
Enter fullscreen mode Exit fullscreen mode

接下来,你可以将它推送到 Docker Hub。

docker push yourhubusername/reponame
Enter fullscreen mode Exit fullscreen mode

运行此程序后,您的容器将变得轻而易举。

$ docker run --rm -it -p bindport:exposedport <image-name>:latest
Enter fullscreen mode Exit fullscreen mode

容器已启动并设置。

连接容器

要将我们的容器与其他容器连接起来,我们可以使用 docker-compose 进行设置。有趣的是,我们可以运行多个容器,并将同一应用程序的不同部分分散部署。为此,我们将创建一个 docker-compose 文件,并从中构建容器。作为一项服务,使用 docker-compose 设置,我们可以将多个容器设置为服务,并通过容器名称将它们链接起来。

以下是一个 docker-compose.yml 文件示例

version: '3'

services:
  appplication:
    image: mozartted/base-node:latest
    ports:
      - "4000:4500"
Enter fullscreen mode Exit fullscreen mode

但是我们可以通过 link 标签将我们的容器与另一个容器连接起来,假设我们想让我们的节点服务与 MongoDB 服务一起运行。

因此,我们需要更新 docker-compose 配置文件。

version: '3'

services:
  application:
    image: mozartted/base-node:latest
    ports:
      - "4000:4500"
    links:
      - mongo
  mongo:
      image: mongo:latest
      ports:
        - "27018:27017"
      volumes:
        - ./data:/data/db
Enter fullscreen mode Exit fullscreen mode

我们使用 links 标签将应用程序容器或服务连接到 mongo 服务,并使用 volume 标签将项目文件夹中的 data 目录设置为 mongo 容器的数据卷,通过应用程序配置中的 link,我们可以使用名称 mongo 作为服务地址,并使用暴露的端口 27017 作为容器中的端口连接到 mongo 服务。

但是这种连接容器的方法将我们限制在一个项目集中,因此我们无法跨两个不同的项目连接容器。
使用网络标签,我们可以建立一个可以在不同容器和项目基础之间使用的网络。

version: '3'

services:
  appplication:
    image: mozartted/base-node:latest
    ports:
      - "4000:4500"
    links:
      - mongo
    networks: 
      - backend
  mongo:
    image: mongo:latest
    ports:
      - "27018:27017"
    volumes:
      - ./data:/data/db
    networks: 
      - backend
networks:
  backend:
    driver: "bridge"

Enter fullscreen mode Exit fullscreen mode

通过这种配置,容器连接到后端网络,因此,外部容器也可以连接到后端网络以访问其中的服务。
要获取连接到容器的网络列表,只需运行以下命令即可。

$ docker network ls
Enter fullscreen mode Exit fullscreen mode

使用网络名称,您可以使用以下命令将外部内容连接到网络。

$ docker network connect <network_name> <container_name>
Enter fullscreen mode Exit fullscreen mode

要查看有权访问网络的容器,只需运行以下命令

$ docker inspect <network_name>
Enter fullscreen mode Exit fullscreen mode

如需了解此流程的更多信息,您可以在这里找到此设置的示例代码库。

结论

有了这些,你可以为不同的项目设置容器,并将它们连接起来,使它们能够使用其他容器中的服务。通过更多的配置,你就可以部署基于微服务的架构。Docker 是一个非常强大的工具,充分利用它的功能是值得的。

文章来源:https://dev.to/mozartted/docker-networking--how-to-connect-multiple-containers-7fl