在这个例子中,我们将使用Docker的"(命名)卷 "选项来保存我们的应用程序文件/数据。与生产环境中的 "绑定(共享)卷 "相比,这个选项提供了更好的安全性。欲了解更多详情,请阅读Docker中的数据管理页面。由于我们没有使用 "bind(shared) volumes"(这通常在开发环境中使用),我们将把应用程序代码复制到我们的 "数据容器 "my_app 。然后PHP-FPM和Nginx容器将使用这个容器来访问应用程序的数据。
注意事项
当你把你的代码部署到生产环境时,你对你的应用程序代码所做的改变将无法使用,除非你给你的卷指定一个不同的名字。例如,如果它以前被命名为app_code_volume_1 ,那么下次应该是类似于app_code_volume_2 。
结构
├── docker
文件
docker/nginx/app.conf
server {
docker/nginx/Dockerfile
FROM nginx:1.15.8-alpine
docker/nginx/nginx.conf
user nginx;
docker/php/Dockerfile
FROM php:7.2.13-fpm-alpine3.8
docker/php/www.conf
[global]
docker/source/Dockerfile
FROM tianon/true
docker/docker-compose.yml
version: "3.4"
index.php
构建
$ docker images
docker_my_app_1 容器将永远不会运行,所以不要对它感到兴奋!
$ docker ps -a
$ docker inspect app_code_volume
$ sudo ls -l /var/lib/docker/volumes/app_code_volume/_data
测试
$ curl -i 0.0.0.0:4080
如你所知,我们把应用程序的数据复制到我们的数据容器中,但它们仍然可以在PHP-FPM和Nginx容器中访问。请看下面。
$ docker exec -it docker_my_php_1 ls -l