2016-01-29 74 views
0

有兩個任務:運行應用程序容器,運行幾乎相同的部署應用程序容器。例如,他們的差異,部署容器沒有端口共享。Docker組合yml繼承

所以,我做了CONFIGS這個任務......

./dockerfiles/base.yml

app: 
    net: docker_internal_net 
    environment: 
     APPLICATION_SERVER: "docker" 

./dockerfiles/base.run.yml

app: 
    container_name: project-app 
    # set the build context to the project root 
    build: .. 
    volumes: 
     - /var/log/project/nginx:/var/log/nginx 
     - /var/log/project/php-fpm:/var/log/php5-fpm 
     - ..:/var/www/project 

./dockerfiles/dev/run.yml

app: 
    dockerfile: ./dockerfiles/dev/run-app/Dockerfile 
    ports: 
     - "80:80" 
     - "22:22" 
    environment: 
     DEV_SSH_PUBKEY: "$SSH_PUBLIC_KEY" 
     APPLICATION_PLATFORM: "dev" 

./dockerfiles/dev/build.yml

app: 
    container_name: project-app-deploy 
    # set the build context to the project root 
    build: ../.. 
    dockerfile: ./dockerfiles/dev/build-app/Dockerfile 
    environment: 
     APPLICATION_PLATFORM: "dev" 
    volumes: 
     - ../..:/var/www/project 

這樣我就可以囤應用程序容器這樣的:

$ docker-compose -f ./dockerfiles/base.yml -f ./dockerfiles/base.run.yml -f ./dockerfiles/dev/run.yml up -d app 
Creating project-app 

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS          NAMES 
dae45f3f2c42  dockerfiles_app  "/sbin/my_init"   2 seconds ago  Up 1 seconds  0.0.0.0:2223->22/tcp, 0.0.0.0:8081->80/tcp project-app 

一切都好。但是如果我嘗試運行deploy-app容器,我將收到此消息:

$ docker-compose -f ./dockerfiles/base.yml -f ./dockerfiles/dev/build.yml up -d app 
Recreating project-app 
WARNING: Service "app" is using volume "/var/www/project" from the previous container. Host mapping ".." has no effect. Remove the existing containers (with `docker-compose rm app`) to use the host volume mapping. 

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES 
53059702c09b  dockerfiles_app  "/sbin/my_init"   6 seconds ago  Up 4 seconds  22/tcp, 80/tcp  project-app-deploy 

這是因爲它們都共享一個本地目錄?但是,爲什麼我可以手動運行deploy-app容器而不需要docker-compose

$ docker run -d --net docker_internal_net -e APPLICATION_SERVER=docker -e APPLICATION_PLATFORM=dev --name project-app-deploy -v ..:/var/www/project mybaseimage 
86439874b8df561f529fde0d1e31824d70dc7e2a2377cd529331a2d7fcb00467 

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS          NAMES 
86439874b8df  mybaseimage   "/sbin/my_init"   4 seconds ago  Up 3 seconds  22/tcp, 80/tcp        project-app-deploy 
40641f02a09b  dockerfiles_app  "/sbin/my_init"   2 minutes ago  Up 2 minutes  0.0.0.0:2223->22/tcp, 0.0.0.0:8081->80/tcp project-app 
+0

'Recreating project-app'看起來像docker-compose認爲我用相同的容器管理,但它不是真的,因爲容器名稱不同,它們被設置成'./dockerfiles/base.run .yml'和'。/ dockerfiles/dev/build.yml',它們不包括在一起。 – Aliance

回答

0

我已經解決了我的問題,在這樣的extend命令:

1)更改爲我./dockerfiles/dev/build.yml文件:

deploy-app: 
    extends: 
     file: ../base.yml 
     service: app 
    container_name: project-app-deploy 
    # set the build context to the project root 
    build: ../.. 
    dockerfile: ./dockerfiles/dev/build-app/Dockerfile 
    environment: 
     APPLICATION_PLATFORM: "dev" 
    volumes: 
     - ../..:/var/www/project 

2)運行我部署的應用程序容器,所以:

$ docker-compose -f ./dockerfiles/dev/build.yml up -d deploy-app 
Building deploy-app 
... 
Successfully built 74750fe274c6 
Creating lovetime-app-deploy 

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS          NAMES 
9bb2af79ffaa  dev_deploy-app  "/sbin/my_init"   5 seconds ago  Up 4 seconds  22/tcp, 80/tcp        project-app-deploy 
812b8824f1f0  dockerfiles_app  "/sbin/my_init"   3 minutes ago  Up 3 minutes  0.0.0.0:2223->22/tcp, 0.0.0.0:8081->80/tcp project-app 

$ docker inspect -f '{{ .Mounts }}' project-app-deploy 
[{ ...... /var/www/project rw true}] 

更新

根據文件,該命令不支持在新撰寫的版本:關鍵字支持的早期撰寫的文件格式,高達撰寫文件版本2.1(見V1延伸,並在V2擴展)

的延伸,但在Compose版本3.x中不受支持。