docker-compose:如何立即查看文件更改(开发时)
docker-compose: how to see file-changes instantly (when developing)
我是 docker 的新手,所以这对您来说可能看起来很基础,无论如何 - 现在它让我很害怕。
我决定在容器之上开发一个新的 Web 项目,当然我考虑过 docker。在完成本教程并阅读了一些 Dockerfile 等之后,我决定使用 docker-compose。
我想要多个撰写文件,一个用于开发,一个用于生产等等。现在我设法使用 3 种不同的服务编排了一个基本的 php/mysql/redis 应用程序。主要应用程序基于 php 并在项目 src 中维护。 Mysql 和 Redis 只是简单地配置了基础镜像,不需要任何业务逻辑。
我可以构建容器并使用
构建:
docker-compose -f compose-Development.yml build
向上:
docker-compose -f compose-Development.yml up
主应用程序容器中的许多文件由 gulp(模板、css 等)构建,代码将存在于 javascript 和 php 中。
我注意到,当我更改我的文件时,我的应用程序状态没有改变。我将不得不重建并重新启动我的容器。
有一些使用 Vagrant 的经验,我会在开发过程中寻求某种共享源。但是我该如何实现呢?
我的应用程序 Dockerfile(用于开发)如下所示:
FROM webdevops/php-nginx:7.1
COPY ./ /app
COPY docker/etc/ /opt/docker/etc
# php config...
RUN ln -sf /opt/docker/etc/php/php.Development.ini /opt/docker/etc/php/php.ini
WORKDIR /app/
EXPOSE 80
撰写文件:
version: "3"
services:
app:
build:
context: .
dockerfile: Dockerfile.Development
links:
- mysql
- redis
volumes:
- ./data/fileadmin:/app/public/fileadmin
- ./data/uploads:/app/public/uploads
env_file:
- docker/env/All.yml
- docker/env/Development.yml
ports:
- "80:80"
restart: always
# Mysql Container
mysql:
build:
context: docker/mysql/
dockerfile: Dockerfile
restart: always
volumes:
- mysql:/var/lib/mysql
env_file:
- docker/env/All.yml
- docker/env/Development.yml
# Cache Backend Container
redis:
build:
context: docker/redis/
dockerfile: Dockerfile
ports:
- "6379:6379"
volumes:
- redis:/data
env_file:
- docker/env/All.yml
- docker/env/Development.yml
restart: always
volumes:
mysql:
redis:
到目前为止,我使用了一些 github 个存储库来从中复制块。我知道我的设置中可能还有其他问题,目前最阻碍的问题是 linked/copied 源。
亲切的问候,
菲利普
"Development/Production parity" 的想法在这方面让很多人感到困惑。这并不意味着您可以简单地拥有一个配置,它可以适用于所有情况;这意味着您将拥有更多更接近的平价,并且您可以创建一个与生产环境非常接近的环境。
这里的问题是,目前您正在构建您的图像,它会准备好发货,它有您的代码,您有预留的卷用于上传等。太棒了!
不幸的是,此设置不适合开发。如果您想即时编辑代码 - 您还需要将本地工作目录作为卷附加到图像。这将不会在生产中完成;所以它非常接近 - 但不完全相同的设置。
将以下内容添加到撰写文件的 app
服务卷部分,您应该可以开始了:
- .:/app
我是 docker 的新手,所以这对您来说可能看起来很基础,无论如何 - 现在它让我很害怕。
我决定在容器之上开发一个新的 Web 项目,当然我考虑过 docker。在完成本教程并阅读了一些 Dockerfile 等之后,我决定使用 docker-compose。
我想要多个撰写文件,一个用于开发,一个用于生产等等。现在我设法使用 3 种不同的服务编排了一个基本的 php/mysql/redis 应用程序。主要应用程序基于 php 并在项目 src 中维护。 Mysql 和 Redis 只是简单地配置了基础镜像,不需要任何业务逻辑。
我可以构建容器并使用
构建:
docker-compose -f compose-Development.yml build
向上:
docker-compose -f compose-Development.yml up
主应用程序容器中的许多文件由 gulp(模板、css 等)构建,代码将存在于 javascript 和 php 中。
我注意到,当我更改我的文件时,我的应用程序状态没有改变。我将不得不重建并重新启动我的容器。
有一些使用 Vagrant 的经验,我会在开发过程中寻求某种共享源。但是我该如何实现呢?
我的应用程序 Dockerfile(用于开发)如下所示:
FROM webdevops/php-nginx:7.1
COPY ./ /app
COPY docker/etc/ /opt/docker/etc
# php config...
RUN ln -sf /opt/docker/etc/php/php.Development.ini /opt/docker/etc/php/php.ini
WORKDIR /app/
EXPOSE 80
撰写文件:
version: "3"
services:
app:
build:
context: .
dockerfile: Dockerfile.Development
links:
- mysql
- redis
volumes:
- ./data/fileadmin:/app/public/fileadmin
- ./data/uploads:/app/public/uploads
env_file:
- docker/env/All.yml
- docker/env/Development.yml
ports:
- "80:80"
restart: always
# Mysql Container
mysql:
build:
context: docker/mysql/
dockerfile: Dockerfile
restart: always
volumes:
- mysql:/var/lib/mysql
env_file:
- docker/env/All.yml
- docker/env/Development.yml
# Cache Backend Container
redis:
build:
context: docker/redis/
dockerfile: Dockerfile
ports:
- "6379:6379"
volumes:
- redis:/data
env_file:
- docker/env/All.yml
- docker/env/Development.yml
restart: always
volumes:
mysql:
redis:
到目前为止,我使用了一些 github 个存储库来从中复制块。我知道我的设置中可能还有其他问题,目前最阻碍的问题是 linked/copied 源。
亲切的问候, 菲利普
"Development/Production parity" 的想法在这方面让很多人感到困惑。这并不意味着您可以简单地拥有一个配置,它可以适用于所有情况;这意味着您将拥有更多更接近的平价,并且您可以创建一个与生产环境非常接近的环境。
这里的问题是,目前您正在构建您的图像,它会准备好发货,它有您的代码,您有预留的卷用于上传等。太棒了!
不幸的是,此设置不适合开发。如果您想即时编辑代码 - 您还需要将本地工作目录作为卷附加到图像。这将不会在生产中完成;所以它非常接近 - 但不完全相同的设置。
将以下内容添加到撰写文件的 app
服务卷部分,您应该可以开始了:
- .:/app