问题描述
我正在尝试在 DC/OS 上部署一些 docker 容器。我成功地部署了一个简单的 docker 容器。但是我需要部署一个附加了一些附加参数的容器。就像附加一个像卷一样的目录并设置一些环境变量。在docker中,通过运行以下命令来实现。
sudo docker run --name nifi-ssl \
-v /home/azureuser/docker_nifi/nifi_stores:/opt/certs \
-p 8443:8443 \
-e NIFI_WEB_PROXY_HOST="some dns":8443 \
-e AUTH=tls \
-e KEYSTORE_PATH=/opt/certs/keystore.jks \
-e KEYSTORE_TYPE=JKS \
-e KEYSTORE_PASSWORD="somevalue" \
-e TRUSTSTORE_PATH=/opt/certs/truststore.jks \
-e TRUSTSTORE_PASSWORD="somevalue" \
-e TRUSTSTORE_TYPE=JKS \
-e INITIAL_ADMIN_IDENTITY='CN=sys_admin,OU=NIFI' \
-d \
apache/nifi:latest
我需要在我为部署容器而创建的马拉松定义中设置这些参数。一个简单容器的马拉松应用定义如下。
{
"id": "nifi","container": {
"type": "DOCKER","docker": {
"image": "apache/nifi:latest"
},"portMappings": [
{ "hostPort": 8080,"containerPort": 8080,"protocol": "tcp" }
]
},"networks": [
{
"mode": "container/bridge"
}
],"acceptedResourceRoles": ["slave_public"],"instances": 1,"cpus": 0.1,"mem": 5120
}
我的问题是如何将上述 docker 命令转换为 marathon 应用程序定义,以便在我部署它时,生成的容器就像我运行 docker 命令时得到的一样
解决方法
好吧,我自己解决了这个问题,这是解决方案,以防万一其他人想做类似的事情。下面是我用来部署容器的 DCOS Marathon 应用配置。
{
"id": "nifi-ssl","container": {
"type": "DOCKER","docker": {
"image": "apache/nifi:latest","parameters": [
{ "key": "volume","value": "/home/centos/nifi_stores:/opt/certs" }
]
},"portMappings": [
{ "hostPort": 8080,"containerPort": 8080,"protocol": "tcp" },{ "hostPort": 9006,"containerPort": 9006,"protocol": "tcp" }
]
},"env": {
"NIFI_WEB_HTTPS_PORT": "9006","NIFI_WEB_PROXY_HOST": "<DCOS cluster public agent dns name>:9006","AUTH": "tls","KEYSTORE_PATH": "/opt/certs/keystore.jks","KEYSTORE_TYPE": "JKS","KEYSTORE_PASSWORD": "passwordfromnifi.properties","TRUSTSTORE_PATH": "/opt/certs/truststore.jks","TRUSTSTORE_PASSWORD": "passwordfromnifi.properties","TRUSTSTORE_TYPE": "JKS","INITIAL_ADMIN_IDENTITY": "CN=sys_admin,OU=NIFI"
},"networks": [
{
"mode": "container/bridge"
}
],"acceptedResourceRoles": ["slave_public"],"instances": 1,"cpus": 1,"mem": 5120
}