gpt4 book ai didi

docker - 使用docker-compose在服务器上构建多容器docker镜像

转载 作者:行者123 更新时间:2023-12-02 21:16:29 26 4
gpt4 key购买 nike

我正在处理一个多服务的docker镜像,该镜像在本地运行良好,但是在服务器端构建它时遇到了麻烦(可能是知识鸿沟)。一种服务正在运行我的mysql数据库,另一种服务是我的主应用程序(每个应用程序都有自己的Dockerfile,尽管我认为这是给定的),两者均通过docker-compose链接,并使用depends_on首先运行安装mysql并确保其处于正常状态。

我已经成功在本地构建和运行镜像,并在推送到docker hub后将其拉到服务器,但是找不到有关如何在生产中正确使用docker-compose.yml文件的指南。我花了一段时间才意识到我需要将docker-compose文件单独上传到生产环境,但是现在我对“build”设置感到困惑。

在本地,我正在使用类似于以下文件的docker-compose.yml文件,“build”设置指向项目目录中的db_config文件夹。

version: '2.1'
services:
mysql:
image: username/my_image:latest
container_name: db
build: ./db_config
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_USER: "dbuser"
MYSQL_PASSWORD: "12345"
MYSQL_DATABASE: "my_db"
healthcheck:
test: "exit 0"

my_app:
container_name: app
build: .
depends_on:
mysql:
condition: service_healthy
entrypoint:
- /usr/local/bin/docker-entrypoint.sh
ports:
- "80:8080"

尝试在生产环境中使用此文件进行构建( docker-compose build)会产生以下错误(名称更改):

build path /home/user/my_app/db_config either does not exist, is not accessible, or is not a valid URL.



生产中“构建”应该指向什么?我应该以某种方式指向Docker镜像本身中的Dockerfile,还是该配置在生产中完全不同?是否还有其他配置需要更改?

最佳答案

事实是,您不应该为生产构建docker镜像。

通常的设置是构建可在多种环境下运行的镜像。
在UAT上测试此镜像,如果还可以,则使生产环境停止当前容器,然后根据新镜像启动新容器。

要存储镜像,您可以使用docker注册表。

至于您的错误,是因为您在执行docker-compose build的机器上没有db_config文件而发生。与将撰写文件上传到生产环境类似,为了在生产环境上构建镜像,您需要提供构建所需的所有必要项目文件。

如果要使其“干净”,则正确的方法是在构建环境中构建镜像,将镜像推送到注册表,然后在生产环境中进行部署。

是的,对于生产部署,您需要撰写文件。但是,您不需要进行构建。如果可以访问Docker注册表,则应首先停止正在运行的容器,然后再次启动它们。

如果您对swarm进行操作,应该会更容易,因为swarm会检查容器是否具有较新的镜像库,并且仅在需要镜像更新时才停止它们。

关于docker - 使用docker-compose在服务器上构建多容器docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com