Docker只是组成新的容器

时间:2018-10-19 13:05:11

标签: docker

我有一个docker-compose.yml文件,它提供了几种服务(redis,db,mongo,app)。我制作了一个脚本来启动Docker环境,但是强迫您转发环境变量,该变量将充当该应用程序(PHP Web应用程序)的子域。

因此对于应用容器,我拥有:

app:
  build:
    context: .
    dockerfile: ./docker/app/Dockerfile
  image: xxx:xxx
  container_name:my-app-${ENV}
  restart: always
  depends_on:
    ...

现在,我希望能够启动多个都依赖于已启动容器的应用程序(例如,使用同一数据库的app1.comapp2.com)。

所以我试图通过使用它来提起它:

ENV=$1 VIRTUAL_HOST=$1.com docker-compose up -d --build app

(我正在使用nginx容器启用虚拟主机,并且$1来自bash脚本)。但这只是重建已经存在的应用程序容器并添加一个新名称。

我可以在构建全新的应用容器时运行docker-compose,如果其他容器已经存在,则保持完整吗?

1 个答案:

答案 0 :(得分:0)

您可以运行docker-compose up -d [NEW APPNAME]以在撰写文件中构建/运行特定的应用程序

尝试...

docker-compose build [appName]
docker-compose up --no-deps -d [appName]

第一个命令使用[appName]

构建新容器

第二个命令停止,销毁并重新创建[appName]容器。

--no-deps标志阻止Compose重新创建[appName]依赖的任何服务

您的应用必须使用不同的名称,因为compose会使用该名称来构建,停止和创建所有容器。

因此您的撰写文件应类似于:

app: 
  build: 
  context: . 
  dockerfile: ./docker/app/Dockerfile 
  image: xxx:xxx 
  container_name:my-app-${ENV} 
  restart: always 
  depends_on: ...

app2: 
  build: 
  context: . 
  dockerfile: ./docker/app/Dockerfile 
  image: xxx:xxx 
  container_name:my-app2-${ENV} 
  restart: always 
  depends_on: ...

app3: 
  build: 
  context: . 
  dockerfile: ./docker/app/Dockerfile 
  image: xxx:xxx 
  container_name:my-app3-${ENV} 
  restart: always 
  depends_on: ...

上面为应用程序容器使用了相同的Dockerfile。

要为每个应用使用不同的dockerfile,只需更改dockerfile

的路径