docker-compose:如何实时查看文件更改(开发时)

33

我是Docker的新手,所以这对你来说可能非常基础,但现在它让我感到恐慌。

我决定在容器上开发一个新的Web项目,当然我想到了Docker。在完成教程和阅读一些Dockerfile之后,我决定使用docker-compose。

我想要多个compose文件,一个用于开发,一个用于生产等等。现在,我成功地通过3个不同的服务编排了一个基本的php/mysql/redis应用程序。主要的应用程序是基于php的,并且在项目src中进行维护。Mysql和Redis仅使用基本映像配置,并且不需要任何业务逻辑。

我可以使用以下命令构建容器并启动它们:

build:

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仓库来复制一些代码段。我知道在我的设置中可能还存在其他问题,但是目前最阻碍我的问题是与链接/复制源相关的问题。

敬礼, 菲利普


尝试:构建 --no-cache - itiic
4
我知道那个选项,但它无法解决我的问题。我不想在更改一行代码后重建和重新启动容器,我希望能够实时编写代码。 - Philipp Wrann
1个回答

42

"开发/生产环境的平衡"这个概念常常会让人感到困惑。它并不意味着你可以仅凭一个配置就可以在所有场景下运行;它的意思是你可以实现更接近于生产环境的平衡,从而创建出一个类似于生产环境的环境。

问题在于当前的设置适用于构建镜像并准备好运行的情况,其中包括你的代码、上传卷等等。很棒!

然而,这种设置对于开发来说是不正确的。如果你想即时编辑代码,那么还需要将本地工作目录附加为卷到镜像中。但这在生产环境中是不应该做的,所以它非常接近 - 但并不完全相同的设置。

将以下内容添加到compose文件的app服务卷部分中,你就可以开始了:

- .:/app

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接