Docker:对多个容器感到困惑


0

我希望能够在多台计算机之间复制开发环境。我以为Docker可能是一个很好的工具,但是我被卡住了。

我有一个使用以下应用程序:

  • 阿帕奇与一些扩展
  • PHP FPM
  • MySQL的
  • 作曲家
  • 指南针(重新编译SASS文件)
  • 咕unt声和凉亭

所有文件应保留在主机上,并可供服务使用。

因此,我创建了一个Dockerfile,用于配置和启动Apache。大!

不幸的是,我只是不知道如何从这里开始。

如何配置PHP FPM,MySQL和Compass?我知道我应该在一个单独的容器中运行每个进程,并将它们链接在一起(而不是在同一容器内启动多个服务)。

本能地,我将创建几个Dockerfile,每个服务一个,然后以docker-compose启动每个。但这似乎不是路要走,而且我不知道正确的主意是什么。

我发现了很多自定义图像,但是我强烈希望使用自己的配置来亲自创建每个容器。这可能吗?

还是我最好只是在Vagrant中或直接在VirtualBox上预配置和运行完整的VM?

谢谢!


您为什么认为docker-compose不是正确的方法?
jmreicha 2015年

Answers:


1

在这种情况下,Docker Compose一直是一个很好的工具,在这种情况下,您需要使用小型微服务,而不是将大型的整体应用程序转储到单个Docker Image中。如果您不想拥有大量的Dockerfile,则始终可以使用必要的包装来构建自己的Docker Image,以使其变得简单。

示例:您可以使用必要的包装来构建自己的Ubuntu Docker映像,而不必提取正式的Ubuntu Docker映像。这将减少您对拥有大量Dockerfile的困惑。但是请注意,每次您要进行任何更改时,这都会带来构建新的Docker Image的开销,这对于开发环境不建议这样做。

这是链接中的docker-compose.yml文件的片段,它很容易理解,不包含单个Dockerfile,并且可以根据您的要求轻松自定义:

 version: '3'
services:
    web:
        image: nginx
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
        ports:
            - "8000:80"
            - "3000:443"
        environment:
            - NGINX_HOST=${NGINX_HOST}
        command: /bin/bash -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        depends_on:
            - php
            - mysqldb
    php:
        image: nanoninja/php-fpm
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"
    composer:
        image: "composer"
        volumes:
            - "./web/app:/app"
        command: install
    myadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "8080:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=${MYSQL_HOST}
        restart: always
        depends_on:
            - mysqldb
    mysqldb:
        image: mysql
        container_name: ${MYSQL_HOST}
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        ports:
            - "8989:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"

0

您绝对是在正确的轨道上。 Docker-compose是您想要的。

每个“服务”要么是一个Docker映像,要么是要构建的本地Dockerfile。您可以在撰写文件中指定不同的文件路径和文件名,以简化操作。然后使用Docker链接将所有容器捆绑在一起。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.