搭建开发环境

重要

开发环境(Dev Environments)已不再处于活跃开发阶段。

虽然当前功能仍然可用,但我们的支持请求响应时间可能会延长。

Docker Desktop 4.13 版本对开发环境的变更

Docker 简化了您配置开发环境项目的方式。您只需一个 compose-dev.yaml 文件即可开始使用。如果您已有包含 .docker/ 文件夹的现有项目,下次启动时将自动完成迁移。

如果您使用的是 .docker/docker-compose.yaml,我们将将其移至 ../compose-dev.yaml。 如果您使用的是 .docker/config.json,我们将创建一个名为 ../compose-dev.yaml 的文件,其中包含一个名为“app”的单个服务。该服务配置为以 JSON 中引用的镜像或 Dockerfile 作为起点。

要设置开发环境,需要执行额外的配置步骤,以告知 Docker Desktop 如何为您的服务构建、启动和使用正确的镜像。

开发环境使用位于项目根目录的 compose-dev.yaml 文件。该文件允许您定义专用服务所需的镜像、要暴露的端口以及额外的配置选项。

以下是一个示例 compose-dev.yaml 文件。

version: "3.7"
services:
  backend:
    build:
      context: backend
      target: development
    secrets:
      - db-password
    depends_on:
      - db
  db:
    image: mariadb
    restart: always
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent" ]
      interval: 3s
      retries: 5
      start_period: 30s
    secrets:
      - db-password
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=example
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password
    expose:
      - 3306
  proxy:
    build: proxy
    ports:
      - 8080:80
    depends_on:
      - backend
volumes:
  db-data:
secrets:
  db-password:
    file: db/password.txt

在 yaml 文件中,构建上下文 backend 指定容器应使用 Dockerfile 中 development 阶段(target 属性)进行构建,该 Dockerfile 位于 backend 目录(context 属性)中

Dockerfile 的 development 阶段定义如下:

# syntax=docker/dockerfile:1
FROM golang:1.16-alpine AS build
WORKDIR /go/src/github.com/org/repo
COPY . .
RUN go build -o server .
FROM build AS development
RUN apk update \
    && apk add git
CMD ["go", "run", "main.go"]
FROM alpine:3.12
EXPOSE 8000
COPY --from=build /go/src/github.com/org/repo/server /server
CMD ["/server"]

development 目标使用一个golang:1.16-alpine镜像,其中包含开发所需的所有依赖项。您可以直接从 VS Code 启动项目,并与数据库或前端等其他应用程序或服务进行交互。

在示例中,Docker Compose 文件是相同的。但它们也可能不同,主 Compose 文件中定义的服务可能使用其他构建目标,或直接引用其他镜像。

接下来是什么?

了解如何 分发您的开发环境