在Docker中使用Secrets而不使用Swarm

118次阅读
没有评论

问题描述

正在使用Docker,但没有使用Swarm(或任何其他编排工具)来管理项目。他想知道是否有一种方法可以在不使用Swarm的情况下利用Docker Secrets。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

你可以在不使用Swarm的情况下,使用docker-compose来使用Docker Secrets。这种方法可以让你以类似于定义卷和网络的方式来定义Secrets。
以下是一个示例docker-compose.yml文件:

version: "3.7"
services:
  db:
    image: mariadb:10.5.2
    env_file:
      - ./db.env
    secrets:
      - rootpass
      - dbpass
      - mysqldb
      - mysqluser
    restart: always
secrets:
  rootpass:
    file: /tmp/root_pass
  dbpass:
    file: /tmp/db_pass
  mysqldb:
    file: /tmp/mysql_db
  mysqluser:
    file: /tmp/mysql_user

在上面的示例中,我们定义了一个名为db的服务,使用了mariadb:10.5.2镜像。我们使用了env_file指令来指定环境变量文件,然后使用secrets指令来指定需要使用的Secrets。在secrets部分,我们定义了rootpass、dbpass、mysqldb和mysqluser四个Secrets,并指定了它们的文件路径。
请注意,这种方法并不是真正的Secrets实现,因为Secrets文件是以明文形式存储的。如果你需要更高级的Secrets管理功能,你可能需要考虑使用Swarm或其他编排工具。

方案2

另一种方法是直接在docker-compose.yml文件中使用Secrets。以下是一个示例docker-compose.yml文件:

version: "3.9"
services:
  db:
    image: mariadb:10.7
    secrets:
      - rootpass
      - dbpass
      - mysqldb
      - mysqluser
    environment:
      MARIADB_ROOT_PASSWORD_FILE: /run/secrets/rootpass
      MARIADB_DATABASE_FILE: /run/secrets/mysqldb
      MARIADB_USER_FILE: /run/secrets/mysqluser
      MARIADB_PASSWORD_FILE: /run/secrets/dbpass
    restart: unless-stopped
    ports:
      - '3306:3306'
secrets:
  rootpass:
    file: ./cf/root_pass
  dbpass:
    file: ./cf/db_pass
  mysqldb:
    file: ./cf/mysql_db
  mysqluser:
    file: ./cf/mysql_user

在上面的示例中,我们定义了一个名为db的服务,使用了mariadb:10.7镜像。我们使用了secrets指令来指定需要使用的Secrets,并在environment部分使用了对应的Secrets文件路径。这样,容器在启动时会自动将Secrets文件中的内容作为环境变量传递给容器。
请注意,这种方法也不是真正的Secrets实现,因为Secrets文件是以明文形式存储的。如果你需要更高级的Secrets管理功能,你可能需要考虑使用Swarm或其他编排工具。

正文完