Docker编写yml继承

问题描述 投票:0回答:1

有两个任务:运行app容器,运行几乎相同的deploy-app容器。例如,部署容器的差异没有端口共享。

所以,我为这项任务做了准备......

./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

所以我可以像这样运行app容器:

$ 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

这是因为它们都共享一个本地目录?但是为什么我可以在没有docker-compose的情况下手动运行deploy-app容器?

$ 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
docker dockerfile docker-compose
1个回答
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}]

更新:

根据文档,较新的撰写版本不支持此命令:

在早期Compose文件格式中支持extends关键字,最高为Compose file version 2.1(请参阅v1中的扩展并在v2中扩展),但Compose版本3.x不支持。

© www.soinside.com 2019 - 2024. All rights reserved.