使用docker进行Symfony应用程序部署

我来这里是因为我开发了一个Symfony3的应用程序。 我对应用程序的部署有一些疑问。 其实我用docker-compose:

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,db是MariaDB,并用一些插件searchElasticSearch。

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

使用Docker我可以使用docker-compose文件并在服务器上重新创build映像和容器,也可以将我的容器保存在图像和tar归档文件中,并将其加载到服务器上。 对于nginx和php-fpm可以,但是elasticsearch和db呢? 因为我需要保留数据以便将来更新代码。 然后,当我部署代码时,我需要执行一个Doctrine Migration,也许有一些命令,Deployer可以完成一些其他Interresting的事情。 以及如何使用Docker部署代码? 我们可以同时使用吗? 部署代码和Docker的服务?

非常感谢你的帮助。

首先,请尝试使用用户定义的networking,它们具有像embedded式DNS这样的传统链接的附加function。 这意味着您可以在应用程序中使用其名称在同一networking上调用其他容器。 用户定义的networking上的容器与另一个用户定义的networking上的容器相隔离。

要创build一个用户定义的networking:

 docker network create --driver bridge <networkname> 

Dockerfile使用用户定义的networking示例:

 search: restart: unless-stopped build: ./docker/search/ ports: - "9200:9200" - "9300:9300" networks: - <networkname> 

第二:我注意到你没有使用数据卷为你和DB和ElasticSearch。 您需要在某些点安装卷以保留您的持久数据。

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

要备份卷数据:

 docker run --rm --volumes-from db -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 

上面的命令将创build一个容器,从数据库容器装载卷并将当前目录作为/backup装载到容器中,使用ubuntu imagetar命令在容器中创build容器中的/dbdata备份(考虑将其更改为dbdirectory)从你的docker主机挂载)。 在操作完成之后,临时容器将被删除(我们用于使用--rm开关创build备份的Ubuntu容器)。

恢复:

您将tar归档文件复制到远程位置,并使用空的已安装卷创build容器。 然后使用以下命令提取该卷中的tar归档文件。

 docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"