Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 在克隆的容器上处理不同的配置文件_Docker_Docker Compose - Fatal编程技术网

Docker 在克隆的容器上处理不同的配置文件

Docker 在克隆的容器上处理不同的配置文件,docker,docker-compose,Docker,Docker Compose,我需要根据相同的源代码生成2个容器,但配置文件不同 第一个先决条件是两个实例必须修改其配置文件(从docker-entrypoint.sh ATM),但不得影响彼此或主机 第二个先决条件(也就是我被卡住的地方)是,我还希望对主机上的源代码所做的更改镜像到容器上,以避免每次进行更改时都重新生成它们。 我想我可以创建一个tmpfs卷,以允许容器轻松地管理自己的配置,而不是将其持久化,但此功能在Windows上似乎不可用,我的团队的一些成员正在使用该操作系统 有人有办法让这一切顺利吗?如果它有任何用处

我需要根据相同的源代码生成2个容器,但配置文件不同

第一个先决条件是两个实例必须修改其配置文件(从docker-entrypoint.sh ATM),但不得影响彼此或主机

第二个先决条件(也就是我被卡住的地方)是,我还希望对主机上的源代码所做的更改镜像到容器上,以避免每次进行更改时都重新生成它们。 我想我可以创建一个tmpfs卷,以允许容器轻松地管理自己的配置,而不是将其持久化,但此功能在Windows上似乎不可用,我的团队的一些成员正在使用该操作系统

有人有办法让这一切顺利吗?如果它有任何用处,那么目标就是让开发人员能够轻松地在这个项目上工作,而无需构建相应的体系结构(使用RMQ,通过只允许单向流的网络相互通信的两个实例)

docker-compose.yml

版本:“2.4”
网络:
网关网络:
名称:“网关\网络”
卷数:
网关数据:
名称:“网关数据”
服务:
rabbitmq:
集装箱名称:“rmq”
图片:“rabbitmq:3.7”
揭露:
- "5672"
php_内部:
容器名称:“php int”
构建:”
网络:
-“网关网络”
环境:
-“APP_ENV=dev”
-“GW_类型=内部”
卷数:
-“网关数据:/data/ssl”
-“:/www”
揭露:
- "9000"
取决于:
-兔子
php_外部:
容器名称:“php ext”
构建:”
网络:
-“网关网络”
环境:
-“APP_ENV=dev”
-“GW_类型=外部”
卷数:
-“网关数据:/data/ssl”
-“:/www”
揭露:
- "9000"
取决于:
-php_内部
重新启动:始终
网络大学内部:
集装箱名称:“gw int”
图片:“nginx:最新版本”
网络:
-“网关网络”
端口:
- "8000:443"
卷数:
-“:/www”
-“/docker/nginx/internal.conf:/etc/nginx/conf.d/default.conf”
-“网关数据:/data/ssl”
取决于:
-php_内部
重新启动:始终
网络外部:
集装箱名称:“gw ext”
图片:“nginx:最新版本”
网络:
-“网关网络”
端口:
- "8001:443"
卷数:
-“:/www”
-“/docker/nginx/external.conf:/etc/nginx/conf.d/default.conf”
-“网关数据:/data/ssl”
取决于:
-php_外部
重新启动:始终
Dockerfile

docker-entrypoint.sh

#/副秘书长/垃圾箱/环境卫生
set-e
#第一个参数是`-f`或`--some选项`
如果[“${1#-}”!=“$1”];然后
set--php fpm“$@”
fi
如果[“$1”=“php fpm”]| |[“$1”=“php”]| |[“$1”=“bin/console”];然后
rm-rf变量/缓存变量/日志
mkdir-p var/cache var/log
setfacl-R-mu:www-data:rwX-mu:“$(whoami)”:rwX-var
setfacl-dR-mu:www-data:rwX-mu:“$(whoami)”:rwX-var
setfacl-R-mu:www-data:rwX-mu:“$(whoami)”:rwX/var
setfacl-dR-mu:www-data:rwX-mu:“$(whoami)”:rwX/var
如果[“$GW_类型”=“内部”];然后
#为内部网关生成证书以进行自身身份验证
openssl-genpkey-算法RSA-out/data/ssl/private_key.pem-pkeyopt RSA_keygen_位:2048
openssl rsa-pubout-in/data/ssl/private_key.pem-out/data/ssl/public_key.pem
#为nginx实例生成自签名HTTPS证书
openssl genrsa-out/data/ssl/webserver_ca.key 4096
openssl请求-新建-x509-第3650天-密钥/数据/ssl/webserver_ca.key-out/data/ssl/webserver_ca.crt-主题“某些主题”
openssl genrsa-out/data/ssl/webserver.key 4096
openssl-req-new-key/data/ssl/webserver.key-out/data/ssl/webserver.csr-subject“some_subject”
openssl x509-req-days 3650-in/data/ssl/webserver.csr-CA/data/ssl/webserver\u CA.crt-CAkey/data/ssl/webserver\u CA.key-set\u serial 01-out/data/ssl/webserver.crt
openssl genrsa-out/data/ssl/client.key 4096
openssl req-new-key/data/ssl/client.key-out/data/ssl/client.csr-subj“some_subject”
openssl x509-req-days 3650-in/data/ssl/client.csr-CA/data/ssl/webserver_CA.crt-CAkey/data/ssl/webserver_CA.key-set_serial 01-out/data/ssl/client.crt
fi
如果[“$APP_ENV”!='prod'];然后
composer安装--首选dist--无进展--无建议--无交互
fi
回声“开始…”
fi
exec docker php入口点“$@”

使用Docker Compose,您可以通过命令提示符或脚本中的几个命令轻松创建和销毁隔离环境,如以下命令:

docker-compose -f docker-compose.yml -f docker-compose-test.override.yml up -d
您应该使用多个撰写文件。这允许您根据环境创建多个配置变量

覆盖基本docker编写文件

典型的用例是定义多个compose文件,以便可以针对多个环境,如生产、暂存、CI或开发。为了支持这些差异,您可以将Compose配置拆分为多个文件,如
docker Compose.yml
docker Compose.prod.yml
docker Compose.staging.yml

在base
docker compose.yml
文件中,您只需要设置跨环境通用的信息。然后在生产或暂存的
docker compose.override.yml
或类似文件中,您应该放置特定于每个环境的配置

如图所示,请参见此图:

资料来源:

  • 电子书
    docker-compose -f docker-compose.yml -f docker-compose-test.override.yml up -d