繁体   English   中英

如何将docker-compose这样部署到Web

[英]how to deploy docker-compose like this to web

我有两个war文件,并使用docker-compose up命令在本地计算机上正常运行。 我尝试使用docker-machine教程进行部署: https : docker stack deploy -c docker-compose-deploy.yml app后出现错误: "invalid mount config for type "bind": bind source path does not exist"我不确定如何处理-并且我敢肯定此错误是由CMD ["/bin/sh","/data/app/bootstrap.sh"]从我的Dockerfiles 我不想将其作为两个单独的war文件部署到tomcat。

在下面,我为您提供了有关部署的所有项目细节。 我将用户username更改为username

docker-compose-deploy.yml

version: "3"
services:
  app2:
    image: userName/dockerdocker_app2
    container_name: app2
    build:
      context: ./app2
    volumes:
      - .:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8000:8080"
  app:
    image: userName/dockerdocker_app
    container_name: app
    build:
      context: ./app
    volumes:
      - .:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8001:8080"

docker-compose.yml没有image行。

我也有两个文件夹: appapp2

在我拥有的文件夹app中: app.warapp2.warbootstrap.shDockerfile

bootstrap.sh正在获取war文件之一,并将其​​放置在Tomcat中

#!/bin/bash

WAR_FILE=app.war

cp /data/util/wait-for.sh /
chmod +x /wait-for.sh

echo "Starting application..."
rm -rf /opt/tomcat/webapps/*
ln -s /data/app/$WAR_FILE /opt/tomcat/webapps/ROOT.war
rm -rf /opt/tomcat/logs
ln -s /data/logs/app /opt/tomcat

echo "Starting Tomcat..."

echo "org.apache.catalina.webresources.Cache.level = SEVERE" >> /opt/tomcat/conf/logging.properties
export JAVA_OPTS="$JAVA_OPTS -Duser.language=pl -Djava.security.egd=file:/dev/./urandom -D"

${CATALINA_HOME}/bin/catalina.sh run

Dockerfile

FROM jeanblanchard/tomcat:8

ENV authType ""
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

CMD ["/bin/sh","/data/app/bootstrap.sh"]

在文件夹app2我有: bootstrap.shDockerfile

第一个文件仅在以下这一行有所不同: WAR_FILE=app2.war

第二个文件是相同的期望CMD ["/bin/sh","/data/app2/bootstrap.sh"]

我的应用程序可以通过docker-compose up命令正常运行。

但是我发现很难将其部署到docker-cloud。

编辑

当我运行docker images -a我有图片username/dockerdocker_app2:latestusername/dockerdocker_app:latest ,但之后docker stack deploy -c docker-compose-deploy.yml app与版本Named volume containers ,你建议我得到

Updating service app_app (id: pn6ofp4vocs0fy6j6f67dc8wr)
image username/dockerdocker_app:latest could not be accessed on a registry to record
its digest. Each node will access username/dockerdocker_app:latest independently,
possibly leading to different nodes running different
versions of the image.

之后,当我再次运行docker images -a我看不到任何图像-很奇怪吗?

docker stack ps app --no-trunc命令给我错误:

No such image: username/dockerdocker_app:latest   

部署到docker stack您不应使用以下内容

volumes:
      - .:/data

因为docker将需要当前文件夹路径存在于实例化容器的所有节点上。 此外,当docker stack不存在时,它也不会创建该文件夹。 这与在docker本地运行时与docker-compose不同。

因此,您需要使用部署容器的节点上存在的路径。 阅读下面的更多详细信息

https://docs.docker.com/engine/reference/commandline/service_create/#add-bind-mounts-volumes-or-memory-filesystems

type = bind:src是必需的,并且指定要绑定安装的文件或目录的绝对路径(例如src = / path / on / host /)。 如果文件或目录不存在,则会产生错误。

因此,您应该使用节点上已经存在的路径。 所以你会用下面的东西

version: "3"
services:
  app2:
    image: userName/dockerdocker_app2
    container_name: app2
    build:
      context: ./app2
    volumes:
      - /opt/data:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8000:8080"
  app:
    image: userName/dockerdocker_app
    container_name: app
    build:
      context: ./app
    volumes:
      - /opt/data:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8001:8080"

并确保每个节点都已经存在/opt/data文件夹。

命名卷容器

或者,您可以使用命名的卷容器,如果该容器尚不存在,它将由swarm自动创建

version: "3"
services:
  app2:
    image: userName/dockerdocker_app2
    container_name: app2
    build:
      context: ./app2
    volumes:
      - app2data:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8000:8080"
  app:
    image: userName/dockerdocker_app
    container_name: app
    build:
      context: ./app
    volumes:
      - app1data:/data
    environment:
      - LOGGING_LOG-FILES-PATH=/opt/tomcat/logs
    ports:
      - "8001:8080"
volumes:
  app1data:
  app2data:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM