Docker - 如何为本地webserver设置compose

时间:2016-11-20 17:40:16

标签: docker docker-compose

我的mac上的本地文件夹中有一个docker compose文件。我还有另一个文件夹/ src,它应该作为根元素。 docker-compose文件如下所示:

version: '2'
services:
    fpm:
        image: sbusso/php-fpm-ion
    nginx:
        image: nginx:stable
        ports:
            - "80:80"
        links:
            - fpm
            - db
    db:
        image: orchardup/mysql
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: myproject

我理解我们在这里做了什么,但我错过了/ src作为root的解决方案,我想我需要设置一个lsync服务,它在本地和我的docker容器之间进行同步。所以我发现了这个,但它没有正常工作 - root / src没有考虑在内。我只想在浏览器中键入localhost,它应该打开/ src文件夹。

version: '2'
services:
    fpm:
        image: sbusso/php-fpm-ion
        links:
            - sync
        volumes_from:
            - sync
    db:
        image: orchardup/mysql
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: myproject
        links:
            - sync
        volumes_from:
            - sync            
    nginx:
        image: nginx:stable
        ports:
            - "80:80"
        links:
            - sync
        volumes_from:
            - sync
    sync:
        image: zeroboh/lsyncd
        volumes:
            - /var/www/html
            - ./src:/src:Z
            - ./docker-config/nginx:/etc/nginx/conf.d
            - /var/lib/php/session
            - ./docker-config/lrsync/lrsync.lua:/etc/lrsync/lrsync.lua
            - ./sync:/sync

我所理解的是,每个加载的图像都会将同步服务链接到其中。我不明白的是为什么每个图像都需要一个volumes_from并且同步的语法明确地说 - 有人可以帮助我,正确设置吗?

谢谢

1 个答案:

答案 0 :(得分:1)

volumes_from从另一个容器导入卷

默认情况下,每个容器都没有卷。您可以使用volumes属性定义本地卷,但卷仅用于该容器。为了使其他容器能够使用它们,这些容器必须使用volumes_from导入卷,指向一个或多个容器的名称。然后,在当前容器中可以使用这些命名容器中的所有卷。

Z卷标指示私有卷

您正在使用以下代码装载/src卷:

volumes:
    - ./src:/src:Z

没关系,除了您还使用volumes_from之外,您的问题表明您特意想要分享/src。但是通过使用Z标签,您告诉Docker将其设为私有卷。

来自documentation

  

卷标

     

SELinux等标签系统要求在装入容器的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Docker不会更改操作系统设置的标签。

     

要更改容器上下文中的标签,您可以将两个后缀:z:Z中的任意一个添加到卷装入。这些后缀告诉Docker重新标记共享卷上的文件对象。 z选项告诉Docker两个容器共享卷内容。因此,Docker使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。 Z选项告诉Docker使用私有非共享标签标记内容。只有当前容器才能使用私有卷。

在这种情况下,“当前容器”为sync,因此只有该容器可以使用该卷。其他人可能不会使用它。