gpt4 book ai didi

shell - Docker 运行后配置的最佳方式

转载 作者:行者123 更新时间:2023-12-02 20:35:56 24 4
gpt4 key购买 nike

我是 Docker 的新手,我正在尝试寻找在我的容器启动后配置 Docker 的最佳方式。我们使用 docker-compose 文件来构建我们的容器,我们的 compose 文件如下所示。

version: "3"

php:
image: wodby/drupal-php:$PHP_TAG
container_name: "${PROJECT_NAME}_php"
environment:
DB_HOST: $DB_HOST
DB_PORT: $DB_PORT
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_NAME: $DB_NAME
DB_DRIVER: $DB_DRIVER
PHP_FPM_USER: wodby
PHP_FPM_GROUP: wodby
COLUMNS: 80 # Set 80 columns for docker exec -it.
volumes:
- ./Insider:/var/www/html

nginx:
image: wodby/nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
depends_on:
- php
environment:
NGINX_STATIC_OPEN_FILE_CACHE: "off"
NGINX_ERROR_LOG_LEVEL: debug
NGINX_BACKEND_HOST: php
NGINX_SERVER_ROOT: /var/www/html/web
NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
ports:
- '8000:80'
volumes:
- ./Insider:/var/www/html

现在我们需要在 PHP 容器启动后执行一些设置任务。现在我需要了解在此容器中执行配置的最佳方式是什么。我们有 2 个想法,它们如下。

  1. 编写一个 shell 脚本并将其作为我们构建过程中的任务之一。
  2. 使用 ansible 并从不同的服务器连接以进行配置。

但理想的过程是,如果我们能以某种方式从我们的 docker-compose.yml 文件中在 PHP 容器中包含一个 shell 脚本,并且当我们运行 docker-compose up -d 它应该作为容器启动过程的一部分运行并使一切准备就绪,因此我们不需要通过第二个命令/过程等等。

最佳答案

有一个为此使用入口点脚本的标准模式。

无论您指定什么作为容器的入口点,都会作为主容器进程运行,并且它会作为命令行参数传递给容器的命令。一个非常典型的入口点脚本具有以下形式

#!/bin/sh

# ... do startup-time setup ...

# Then launch the main container command
exec "$@"

在您的 Dockerfile 中,您需要照常复制它

COPY entrypoint.sh ./
# RUN chmod 0755 entrypoint.sh # if not already executable
ENTRYPOINT ["./entrypoint.sh"] # MUST be JSON-array form
CMD ["./my-app"]

入口点脚本可以访问每次执行设置,例如在 docker-compose.yml 中设置的环境变量,并联系在 Docker 中运行的其他服务。它可以导出 主容器进程将看到的环境变量。 (这些不会出现在其他面向调试的路径中,例如 docker inspectdocker exec,但是 docker run --rm -it myimage sh将会看到它们。)一个重要的警告是,此时入口点脚本将是唯一在容器中运行的东西,因此它不能与主容器进程交互,除非它特意启动它(这很棘手)。

我认为 ENTRYPOINT 的使用非常有用且非常重要,因此我倾向于保留该指令用于此目的。如果您只有一个 ENTRYPOINT(就像许多 Java SO 问题一样),您可以将它更改为 CMD 而不会产生不良影响。如果您使用 ENTRYPOINT 命名解释器并使用 CMD 脚本(就像许多 Python SO 问题),您可以将它们组合成一个 CMD 行。

关于shell - Docker 运行后配置的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59487641/

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