你在家庭实验室中使用 Docker 的方法不对——应该这样做
你很可能在错误地使用 Docker。是的,即使你已经使用它多年,也很有可能你在这个列表中做了某些不该做的事情。所以,这里有四种你很可能错误使用 Docker 的方式,以及你应该如何正确使用它。
停止使用 Docker Run 命令启动容器
Docker Compose 好多了
很长一段时间,我一直用 Docker Run 命令来启动容器。我实际上并没有真的使用 Docker Run,因为我使用 Portainer 来管理我的容器,但我没有使用 Docker Compose,而这就是问题所在。
使用 Docker Run 时,如果你需要对正在运行的容器进行更改,你必须记住上次启动容器时使用的命令。另一方面,使用 Docker Compose 时,你只需编辑 Docker Compose YAML 文件,添加所需的新设置,然后重新启动容器。
在我的家庭实验室中从 Docker Run 切换到 Docker Compose 显著改善了我的 Docker 工作流程。我现在能够直接进入 Compose 文件,做一个简单的更改,然后几秒钟内重新启动容器。过去,有时我需要几分钟才能完成一个更改。
如果你仍在使用 Docker Run(或除 Compose 文件之外的任何其他启动容器的方法),那么是时候切换到 Compose 了——你以后会感谢自己的。
只有在绝对必要时才使用 Docker 卷
绑定挂载让你可以轻松读写配置
我以前见过有人对 Docker 卷非常信任,我自己也考虑过使用 Docker 卷,但我就是下不定决心去做。
命名的 Docker 卷是指 Docker 在它控制所有权限的区域中自行创建的一个特殊文件夹。它对 Docker 来说可能更干净、更易于管理,但对你来说管理起来并不总是那么直接。
关于 Docker 卷的问题是它们存放的位置由 Docker 决定。通常,这个位置是在 /var/lib/docker/volumes/volume_name/_data,但具体位置可能会根据你运行的系统而有所不同。
我选择使用绑定挂载,而不是使用命名的 Docker 卷。绑定挂载是指你告诉 Docker 将文件和文件夹放在你选择的具体位置。我使用 Portainer(一个 Docker 管理平台)来管理我的所有 Docker 容器。
所以,我把我所有的绑定挂载点都放在 /portainer 下。这让我很容易知道我的 Docker 文件存储在哪里,而且也方便我备份这些文件。我可以控制该文件夹的权限,并且很容易在任何系统上找到它,因为由我决定它的存放位置。
我绝对建议在可能的情况下使用绑定挂载,因为与 Docker 卷相比,它们可以使 Docker 管理更简单。
将你的秘密和变量放在 .env 文件中
别再把它们放进你的 Docker Compose 文件或 Docker 运行命令里了
我想我们都有过这样的经历——创建 Docker Compose 文件或 Docker Run 命令,并将秘密的 API 密钥、密码或其他安全变量以明文形式放置,让所有人都能看到。这很方便,但不安全。
与其直接将你的秘密放在 Compose 文件中,你可以将它们放在更安全的 .env 文件中。这是保护环境变量的传统方式,而且非常容易操作。
例如,你可以在 .env 文件中将一个变量命名为 OPENAI_API_KEY=mysupersecretopenaikey。然后,在 Compose 文件中,你可以使用 $ {OPENAI_API_KEY} 调用该变量,它会知道从 .env 文件中获取该值。
适应这种工作流程需要一些时间,如果你使用像 Portainer 这样的工具会更复杂一些,但这肯定比直接将密钥写入 Compose 文件要安全得多。
停止为多个相关服务使用单独的 Compose 文件
在一个 Compose 文件中部署相关服务只是更简单
使用 Compose 文件是一个很好的第一步,但当你真正掌握它们时,你才开始充分意识到 Docker 的强大。
假设你想要使用几个相关的服务,比如 WordPress、MariaDB 和 Nginx 代理管理器。与其将这三个服务作为三个不同的 Compose 文件启动,不如将它们全部放在一个文件中启动。
将相关的服务结合起来有很多好处。首先,它可以使你的系统更加整洁和干净。其次,当你需要编辑堆栈的某一部分时,你通常需要编辑多个部分,所以它可以让你避免打开多个文件。
此外,在同一个 Compose 文件中创建的容器会自动共享一个内部网络,这使得容器之间可以轻松互相通信。因此,你不需要尝试将 WordPress 指向 MariaDB 实例的 IP 地址,只需使用容器名称作为变量调用它,它就会自动工作。
Docker 非常强大,但也很容易使用错误
我已经广泛使用 Docker 超过半十年了,但直到最近我才真正开始发现 Docker 提供的许多隐藏功能。问题是,这些功能并不是秘密,只是有时其好处并不明显。
例如,Docker Compose 是我已经了解了好几年的东西,但我从未意识到它比我以前做的老方法好多少。现在,我希望自己早些切换到 Compose。我只是很高兴现在正在使用它。
所以,如果你还没有做这个清单上的事情(或者你仍在做错误的事情),那么就让这个夏天成为改变你所做的事情,并让自己更符合行业标准的一个契机。







