Docker - 组合多个本地环境

时间:2015-11-21 19:59:41

标签: docker docker-compose

我目前正在使用docker-compose进行本地开发和本地测试环境。后者是开发环境的克隆,具有一些不同的ENV值。我希望能够启动测试环境,在后台运行我的测试并在同一时间继续在我的开发环境中工作。以下是我目前正在使用的内容:

common.yml

api-code:
    build: api
    volumes:
        - ../../:/var/www/api/

api-php:
    build: php
    ports:
        - "9000:9000"

api-web:
    build: nginx
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./nginx/ssl:/var/ssl

api-db:
    build: pg
    ports:
        - "5432:5432"

api-memcached:
    build: memcached
    ports:
        - "11211:11211"

发展

api:
    extends:
        file: ../../services/common.yml
        service: api-code

php:
    extends:
        file: ../../services/common.yml
        service: api-php
    volumes_from:
        - api

memcached:
    extends:
        file: ../../services/common.yml
        service: api-memcached
    env_file:
        - .env.dev

artisan:
    build: ../../services/artisan
    volumes_from:
        - api
    env_file:
        - .env.dev

composer:
    build: ../../services/composer
    volumes_from:
        - api
    links:
        - artisan:artisan
    env_file:
        - .env.dev

nginx:
    extends:
        file: ../../services/common.yml
        service: api-web
    links:
        - php:php
    volumes_from:
        - api
    volumes:
        - ../../services/nginx/sites/site.conf:/etc/nginx/sites-enabled/site.conf

pg:
    extends:
        file: ../../services/common.yml
        service: api-db
    env_file:
        - .env.dev

测试

api:
    extends:
        file: ../../services/common.yml
        service: api-code

php:
    extends:
        file: ../../services/common.yml
        service: api-php
    volumes_from:
        - api

memcached:
    extends:
        file: ../../services/common.yml
        service: api-memcached
    env_file:
        - .env.test

codeception:
    build: ../../services/codeception
    volumes_from:
        - api
    links:
        - nginx:nginx
    env_file:
        - .env.test
    extra_hosts:
        - "site-test.whatever.com:xx.xx.xx.xx"

artisan:
    build: ../../services/artisan
    volumes_from:
        - api
    env_file:
        - .env.test

composer:
    build: ../../services/composer
    volumes_from:
        - api
    links:
        - artisan:artisan
    env_file:
        - .env.test

nginx:
    extends:
        file: ../../services/common.yml
        service: api-web
    links:
        - php:php
    volumes_from:
        - api
    volumes:
        - ../../services/nginx/sites/site-test.conf:/etc/nginx/sites-enabled/site-test.conf

pg:
    extends:
        file: ../../services/common.yml
        service: api-db
    env_file:
        - .env.test

我是Docker的新手,所以我认为这可能是一种非常天真的方法,但就目前而言,它正在发挥作用。缺点是我一次只能带一个up个环境。当我想进行测试时,我必须停止工作直到测试结束。

我不确定如何在未指定映射到容器的volume的情况下启动测试环境。根据{{​​3}},我正在阅读它们,因为我可以运行docker-compose -f testing.yml up -d,我的testing.yml文件中我不会在volume容器上指定api 。当我这样做时,显然容器中没有代码,所以其他一切都会爆炸。

如何使用容器外部不可变的代码构建api容器?我首先尝试构建开发,然后运行docker-compose -f testing.yml up -d但没有运气。我也尝试过参考本地api图像而没有运气。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

如果您需要在图片中添加任何文件,请在ADD中使用COPYDockerfile。您可以稍后使用卷覆盖这些文件以用于开发环境。

您还可以设置项目名称以确保环境不重叠:http://docs.docker.com/compose/#Multiple-isolated-environments-on-a-single-host