首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用docker部署Symfony应用程序

使用docker部署Symfony应用程序
EN

Stack Overflow用户
提问于 2016-11-04 14:23:57
回答 1查看 1.1K关注 0票数 2

我来这里是因为我用Symfony3开发了一个应用程序。我有一些关于应用程序部署的问题。实际上我使用docker-compose:

代码语言:javascript
运行
复制
version: '2'

services:
    nginx:
        build: ./docker/nginx/
        ports:
            - 8081:80
        volumes:
            - .:/home/docker:ro
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
            - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
        networks:
            - default

    php:
        build: ./docker/php/
        volumes:
            - .:/home/docker:rw
            - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
        working_dir: /home/docker
        networks:
            - default
        dns_search:
            - php

    db:
        image: mariadb:latest
        ports:
            - 3307:3306
        environment:
            - MYSQL_ROOT_PASSWORD=collectionManager
            - MYSQL_USER=collectionManager
            - MYSQL_PASSWORD=collectionManager
            - MYSQL_DATABASE=collectionManager
        volumes:
            - mariadb_data:/var/lib/mysql
        networks:
            - default
        dns_search:
            - db

    search:
        build: ./docker/search/
        ports:
            - 9200:9200
            - 9300:9300
        volumes:
            - elasticsearch_data:/usr/share/elasticsearch/data
        networks:
            - default
        dns_search:
            - search

volumes:
    mariadb_data:
        driver: local
    elasticsearch_data:
        driver: local

networks:
    default:

nginx是清晰的,引擎是PHP-FPM和一些扩展和composer,db是MariaDB,搜索ElasticSearch和一些插件。

在我不使用Docker和部署之前,当我想部署webapp时,我使用Megallanes或Deployer。

使用Docker,我可以使用docker-compose文件并在服务器上重新创建图像和容器,我还可以将容器保存在图像和tar存档中,并将其加载到服务器上。对于nginx和php-fpm是可以的,但是elasticsearch和db呢?因为我需要保存数据,以便将来更新代码。然后,当我部署代码时,我需要执行Doctrine迁移,可能还需要执行一些命令,Deployer可以完美地完成其他一些有趣的事情。以及如何使用Docker部署代码?我们可以同时使用这两种方法吗?Deployer for code和Docker for services?

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 15:59:43

这意味着您可以在应用程序中使用其他容器的名称来调用同一网络上的其他容器。用户定义的网络上的容器与另一个用户定义的网络上的容器隔离。

要创建用户定义的网络:

代码语言:javascript
运行
复制
docker network create --driver bridge <networkname>

Dockerfile使用用户定义的网络示例:

代码语言:javascript
运行
复制
search:
    restart: unless-stopped
    build: ./docker/search/
    ports:
        - "9200:9200"
        - "9300:9300"
    networks:
        - <networkname>

第二:我注意到你的DB和ElasticSearch没有使用数据卷。您需要在某些点上挂载卷以保存您的持久性数据。

第三:当你导出你的容器时,它不会包含挂载的卷。您需要手动备份卷数据并进行迁移。

要备份卷数据,请执行以下操作:

代码语言:javascript
运行
复制
docker run --rm --volumes-from db -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

上面的命令将创建一个容器,从DB容器挂载卷,并将容器中的当前目录挂载为/backup,使用ubuntu imagetar命令在容器中创建/dbdata的备份(请考虑将其更改为您的dbdirectory)从docker主机挂载的/backup中。

要恢复,请执行以下操作:

tar归档文件复制到远程位置,并使用空的挂载卷创建容器。然后使用以下命令解压该卷中的tar归档文件。

代码语言:javascript
运行
复制
docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40416523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档