如何通过 docker 从 consul 值设置我的容器参数?
How can i set my container parameters from consul values through docker?
我有几个简单的 java 应用程序,我希望它们使用 consul 进行运行时配置。我无法理解应该在此组合中使用的方法:docker + consul + apps.
我已经成功定制了一个合适的 docker-compose.yml 文件,其中包含所需的容器:consul、jetty1、jetty2、jetty3。每个码头在构建时都会得到一个 war 应用程序。当我 docker- 组合我的堆栈时,我启动了适当的应用程序。
但是我不明白我应该怎么做才能让我的应用程序从 consul 服务读取 consul 配置。
我制作了这样的docker-compose.yml文件:
version: '2'
services:
consuldns:
build: ./consul
command: 'agent -server -bootstrap-expect=1 -ui -client=0.0.0.0 -node=consuldns -log-level=debug'
ports:
- '8300:8300'
- '8301:8301'
- '8302:8302'
- '8400:8400'
- '8500:8500'
- '8600:53/udp'
container_name: 'consuldns'
jettyok1:
build: ./jetty
ports:
- "8081:8080"
container_name: jettyok1
depends_on:
- consuldns
jettyok2:
build: ./jetty
ports:
- "8082:8080"
container_name: jettyok2
depends_on:
- consuldns
jettyok3:
build: ./jetty
ports:
- "8083:8080"
container_name: jettyok3
depends_on:
- consuldns
我在 docker-compose.yml 文件附近有两个文件夹:
- 领事:
Dockerfile(从官方仓库复制)
FROM consul:latest
ENV CONSUL_TEMPLATE_VERSION 0.18.1
ADD https://releases.hashicorp.com/consul-template/${CONSUL_TEMPLATE_VERSION}/consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip /
RUN unzip consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
mv consul-template /usr/local/bin/consul-template &&\
rm -rf /consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
mkdir -p /etc/consul-template/config.d/templates && \
apk add --no-cache curl
RUN apk update && apk add --no-cache jq
RUN mkdir /etc/consul.d
RUN echo '{"service": {"name": "my_java_application", "tags": ["java"], "port": 8080}}' > /etc/consul.d/java.json
#RUN consul agent -data-dir /consul/data -config-dir /etc/consul.d
CMD ["agent", "-dev", "-client", "0.0.0.0"]
- 码头:
Dockerfile(手工制作)
FROM jetty:latest
ENV DEFAULT_SYSTEM_MESSAGE='dockerfile default message'
COPY \always-healthy.war /var/lib/jetty/webapps/
always-healthy.war 是一个简单的 spring-boot web 应用程序,支持单个 GET 方法:
package org.bajiepka.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.core.env.Environment;
@RestController
public class MessageController {
@Autowired
private Environment environment;
@GetMapping("/message")
public String getDefaultMessage(){
return String.format("Current value: %s", environment.getProperty("DEFAULT_SYSTEM_MESSAGE"));
}
}
请指点我,我应该怎么做才能让我的始终健康的应用程序从 consul 服务中读取一个值,这样我就可以管理任何码头实例或始终健康的应用程序的 env 参数 DEFAULT_SYSTEM_MESSAGE
我有几个简单的 java 应用程序,我希望它们使用 consul 进行运行时配置。我无法理解应该在此组合中使用的方法:docker + consul + apps.
我已经成功定制了一个合适的 docker-compose.yml 文件,其中包含所需的容器:consul、jetty1、jetty2、jetty3。每个码头在构建时都会得到一个 war 应用程序。当我 docker- 组合我的堆栈时,我启动了适当的应用程序。 但是我不明白我应该怎么做才能让我的应用程序从 consul 服务读取 consul 配置。
我制作了这样的docker-compose.yml文件:
version: '2'
services:
consuldns:
build: ./consul
command: 'agent -server -bootstrap-expect=1 -ui -client=0.0.0.0 -node=consuldns -log-level=debug'
ports:
- '8300:8300'
- '8301:8301'
- '8302:8302'
- '8400:8400'
- '8500:8500'
- '8600:53/udp'
container_name: 'consuldns'
jettyok1:
build: ./jetty
ports:
- "8081:8080"
container_name: jettyok1
depends_on:
- consuldns
jettyok2:
build: ./jetty
ports:
- "8082:8080"
container_name: jettyok2
depends_on:
- consuldns
jettyok3:
build: ./jetty
ports:
- "8083:8080"
container_name: jettyok3
depends_on:
- consuldns
我在 docker-compose.yml 文件附近有两个文件夹: - 领事: Dockerfile(从官方仓库复制)
FROM consul:latest
ENV CONSUL_TEMPLATE_VERSION 0.18.1
ADD https://releases.hashicorp.com/consul-template/${CONSUL_TEMPLATE_VERSION}/consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip /
RUN unzip consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
mv consul-template /usr/local/bin/consul-template &&\
rm -rf /consul-template_${CONSUL_TEMPLATE_VERSION}_linux_amd64.zip && \
mkdir -p /etc/consul-template/config.d/templates && \
apk add --no-cache curl
RUN apk update && apk add --no-cache jq
RUN mkdir /etc/consul.d
RUN echo '{"service": {"name": "my_java_application", "tags": ["java"], "port": 8080}}' > /etc/consul.d/java.json
#RUN consul agent -data-dir /consul/data -config-dir /etc/consul.d
CMD ["agent", "-dev", "-client", "0.0.0.0"]
- 码头: Dockerfile(手工制作)
FROM jetty:latest
ENV DEFAULT_SYSTEM_MESSAGE='dockerfile default message'
COPY \always-healthy.war /var/lib/jetty/webapps/
always-healthy.war 是一个简单的 spring-boot web 应用程序,支持单个 GET 方法:
package org.bajiepka.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.core.env.Environment;
@RestController
public class MessageController {
@Autowired
private Environment environment;
@GetMapping("/message")
public String getDefaultMessage(){
return String.format("Current value: %s", environment.getProperty("DEFAULT_SYSTEM_MESSAGE"));
}
}
请指点我,我应该怎么做才能让我的始终健康的应用程序从 consul 服务中读取一个值,这样我就可以管理任何码头实例或始终健康的应用程序的 env 参数 DEFAULT_SYSTEM_MESSAGE