发布于 2026-01-05 8 阅读
0

用于本地开发的 Docker

用于本地开发的 Docker

原文发布于Ashraful 的博客

我们是否已经了解Docker?如果还不了解,请先阅读这篇文章(Docker 入门)。

❓ 为什么在本地开发中应该使用 Docker?

你喜欢花更多时间布置环境吗?如果是,那就关掉窗口吧。也许你来错地方了。好了,闲话少说。让我给你讲个真实的故事。

最近我买了一台MacBook用于个人开发。我兴奋地想用它写代码。但在此之前,我必须先搭建好开发环境。于是,我迫不及待地从GitHub克隆仓库,然后安装它们的开发依赖项。说真的,一天下来,我累得筋疲力尽。我的一个个人项目使用了Node(v8.10.*)、MongoDB和React。其他项目则使用了最新版本的Node和其他依赖项。由于我对Mac OS不太熟悉,搭建开发环境的过程十分艰难。最终,我决定把Dockerfile所有服务都写出来,然后Docker Compose一起运行。

❓ 什么是 Docker Compose?

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,只需一条命令,即可根据配置创建并启动所有服务。更多详情请点击此处

💫 架构示例

假设我们有两个不同的服务和一个数据库服务。

  1. NodeJS 应用(端口:5000)
  2. React 应用(端口:5001)
  3. MongoDB(端口:27017)

我们将编写docker-compose.yml文件,并随时随地使用单个命令运行它们。由于我不会详细解释代码部分,docker所以docker-compose我已经有一个基于这种架构的应用程序。您可以从GitHub上 fork 并克隆该应用程序,然后自行修改。

正如您所见,我们将使用不同的端口运行所有这些服务/应用程序。因此,我们需要在容器和物理机(您的机器)上启用这些端口。例如,如果您已经在计算机上安装了 MongoDB,那么您可能不会将27017新 MongoDB 容器使用的端口用于其他用途。所以,我们可以将端口从 Docker 容器转发到物理机。这很简单,正如您所想。

🚀 让我们开始设置吧

  • 克隆仓库,git clone https://github.com/iashraful/graphql-mongo-todo.git
  • cd graphql-mongo-todo
  • 用你最喜欢的编辑器打开docker-compose.yml。(别担心,我会解释的。😎)你会看到类似下面的界面。

docker-compose.yml

version: '3.5'
services: 
  react_client:
    build: ./client
    command: sh -c "yarn install && yarn start"
    environment: 
      - NODE_ENV=development
      - PORT=5001
    ports:
      - '5001:5001'
    working_dir: /app/client
    volumes:
      - ./client:/app/client:cached

  node_server:
    build: ./server
    command: sh -c "yarn install && yarn dev"
    environment: 
      - NODE_ENV=development
      - PORT=5000
    ports:
      - '5000:5000'
    working_dir: /app/server
    volumes:
      - ./server:/app/server:cached
    depends_on: 
      - mongodb

  mongodb:
    image: mongo
    expose:
      - '27017'
    environment: 
      - MONGO_INIT_DB_DATABASE_NAME='graphql-todo'
    volumes: 
      - ./db:/data/db
    ports:
      - '27019:27017'

Enter fullscreen mode Exit fullscreen mode

版本:'3.5'

此版本号指示您正在使用的 Docker 引擎版本。就我而言,我使用的是最新的 Docker 引擎 19.*.* 版本,因此我使用的是 3.7 版本。请参阅完整的版本控制指南。

服务

很简单。你想用这个 Compose 文件运行多少个服务?我这里运行了三个:Node、React 和 Mongo。

react_client、node_server、mongodb

各项服务的名称。您需要在每项服务下指定配置。

构建:[目录路径]

您将使用哪个目录来存放这些特定服务?您可以在此处指定相对路径。

命令:[任何 shell 命令]

命令的使用完全取决于你选择的镜像。如果你选择基于 Linux 的镜像,那么你应该知道 bash 是默认 shell。所以,你可以放心使用 bash 命令。如果你对我选择的镜像感到困惑?别担心,我会解释的。

环境

你可以通过environment.传递任何类型的环境变量。

端口

了解如何为容器启用端口并映射物理机端口非常重要。这里5000:5000指的是Container port:Physical machine port……

工作目录

这是代码将被复制到的容器的直接路径。

在本地开发环境中,了解卷的概念至关重要。因为你肯定不希望每次修改后都重新构建并运行容器。卷的作用是在物理机器代码和容器工作目录代码之间建立映射关系。

依赖于

这是我们拥有的一个很棒的功能。假设你有五个服务,其中一个服务依赖于其他服务。例如,我们的 Node.js 服务依赖于 MongoDB。所以,我放depends_on: mongodb

图像

镜像指的是我们用作基础镜像的 Docker 镜像。正如我们在之前的文章中提到的,每个 Docker 容器都必须有一个基础镜像。这是我们可以用来定义镜像的镜像标签。仔细观察,你会发现我没有在 `<image>`react_client和 `<image> ` 中定义镜像node_server。但在 MongoDB 中我定义了 ` <image> image: mongo`。你知道为什么吗?让我们来看看原因。

❓我们不能用吗Dockerfile

是的,可以。打开客户端和服务端目录,你会看到 Dockerfile 文件。即使你命令计算机运行 docker compose 文件,计算机也会找到构建目录,并在其中找到 Dockerfile 文件。然后直接执行即可。

🐶 够了💣 让我们开始这个项目吧。

  • 打开终端/控制台。
  • $ docker-compose up
  • 稍等片刻,尽情享用。

⛄ 基本docker-compose命令。

  • docker-compose up➡️ 运行 docker compose 文件。
  • docker-compose up --build➡️ 重新构建并运行 docker compose 文件。
  • docker-compose up <service name>➡️ 特定服务已启动并运行。
  • docker-compose start➡️启动最后构建的容器。
  • docker-compose stop➡️停止最后运行的容器。
  • docker-compose restart➡️ 重启最后运行的容器。
  • docker-compose logs -f <service name>➡️ 从特定服务登录。
  • docker-compose exec <service name> bash➡️ 通过 SSH 连接到特定容器的 bash。

🚩 就这些啦。谢谢阅读!😆

文章来源:https://dev.to/ashraful/docker-for-local-development-6ak