Docker组成yml继承



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

所以,我为此任务进行了配置...

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

一切都好。但是,如果我尝试运行部署应用程序容器,我将收到以下消息:

$ 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的情况下手动运行部署应用程序容器?

$ 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

我已经以这种方式解决了扩展命令的问题:

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}]

更新

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

extend 关键字在早期的撰写文件格式中受支持,直到 Compose 文件版本 2.1(请参阅 v1 中的扩展和 v2 中的扩展),但在 Compose 版本 3.x 中不受支持。

最新更新