【问题标题】:Setting local development with Docker and dockerizing repositories?使用 Docker 和 dockerizing 存储库设置本地开发?
【发布时间】:2018-10-22 08:03:58
【问题描述】:

我最近开始学习 Docker,我想做的是将所有现有项目和所有新项目 docker 化。所以基本上在 Docker 上设置我的本地开发环境,但如果有意义的话,请保持每个项目/存储库隔离,因为一个 php-app 可能在 php5 上,另一个在 php7 等上。

我之前通常做的是将所有项目/存储库放在home/Repositories 文件夹下,所以我想遵循相同的模式,尽管每个项目文件夹将在各自的环境中运行。

我已经在我的操作系统上安装了 Docker(我在 Ubuntu Linux 上是全新安装的,所以没有安装 PHP 或其他任何东西),但是我想问几个问题,因为我以前没有任何使用 Docker 的经验

据我了解,每个项目/存储库都应在根目录中包含一个docker-compose.yml 文件和一个docker 文件夹,我将所有Dockerfiles 放在其中,对吗?

- home
-- Repositories
--- a-laravel-project
---- docker // folder that has all required containers, like PHP, Mysql, Nginx conf etc etc
---- docker-compose.yml
---- index.php

--- another-oop-php-project
---- docker // folder that has all required containers, like PHP, Mysql, etc etc
---- docker-compose.yml
---- index.php

我还需要安装本机 Git 吗?我想为了对接我所有现有的存储库,我需要先克隆它们,所以在这种情况下 git 是(预)必需的,对吗?

提前致谢,如有任何反馈,我们将不胜感激。

【问题讨论】:

    标签: docker localhost development-environment


    【解决方案1】:

    您可以肯定地保留您的存储库目录。 Docker 根本不需要任何特殊的布局。

    假设在您的泊坞窗前世界观中,您的环境是:

    • 存储库
      • 项目1
        • index.php
      • 项目2
        • index.php

    然后您将 Dockerfile(如果您想要 docker-compose.yml)添加到每个项目:

    • 存储库
      • 项目1
        • index.php
        • Dockerfile
      • 项目2
        • index.php
        • Dockerfile

    您提到了一个“包含所有必需容器的文件夹”。这不太对。您所有的 docker 容器都将位于 Docker 自己的目录结构中(您不想手动弄乱)。您需要关心的是如何将您的依赖项构建到每个项目的 docker 容器中。

    假设您的 project1 将只使用 php,因此您可以使用官方的 php docker 容器 (https://hub.docker.com/_/php/)。

    那么你的 Dockerfile 可能是这样的

    FROM php:7.0-cli
    COPY index.php /usr/src/myapp
    WORKDIR /usr/src/myapp
    CMD [ "php", "./index.php" ]
    

    或者,如果您想从 ubuntu 或其他东西构建自己的。您从基础 ubuntu 映像开始,然后在该 ubuntu 上安装所需的依赖项。

    FROM ubuntu
    RUN apt-get install php # Or whatever is appropriate, I don't use php
    WORKDIR /usr/src/myapp
    CMD [ "php", "./index.php" ]
    

    然后,当您在 project1 目录中并想要构建您的 docker 容器时。然后运行它。

    docker build -t project1:latest .
    docker run project1:latest
    

    源文件注意事项:

    希望将源文件保存在 docker 容器之外是很常见的,但在 docker 容器中运行测试服务器。在这种情况下,您需要执行以下操作:

    docker run \
      -v /home/repositories/project1:/project1 \
      php:7.0-cli \
      php /project1/index.php
    

    该绑定将您的源代码目录从您的机器安装到您运行 php 服务器的容器中。另外不要忘记,如果您在 docker 容器内运行开发服务器,则需要绑定端口,以便您可以连接到本地主机上的端口并将其转发到容器。

    如果您使用 php,您可能有兴趣在 https://hub.docker.com/_/php/ 上阅读很多有用的信息。

    Git,我仍然会在你的主机上安装,尤其是如果按照我的描述将你的源代码安装到容器中

    【讨论】:

    • 关于docker 文件夹,我说它拥有所有容器,我之前想说的是,如果这有意义的话,这个文件夹基本上将拥有所有Dockerfiles。关于 Git,所以我需要在我的操作系统(Ubuntu)上进行本地安装,对吗?
    • 啊,我明白了。是的,如果您需要为单个项目构建多个 Docker 容器,那么您的结构是有意义的。假设您需要构建自定义 nginx 以及自定义 php,那么您将拥有 docker/php/Dockerfile 和 docker/nginx/Dockerfile。那会很整洁。就我个人而言,我更喜欢尽量减少我需要构建的自定义 docker 容器的数量,以支持尝试使用标准容器。例如。使用股票 nginx 映像并在运行时使用环境变量和命令参数对其进行配置(或使用等效的 docker compose)。
    • 是的,你的 ubuntu 上的原生 git。我总是在 Docker 容器之外管理我的源代码。
    • 使用 phpdocker.io 或 laradoc 之类的生成器来快速启动和运行会更好吗?
    • 我认为这是非常个人的偏好。就我个人而言,我喜欢在让工具为我做这些事情之前了解如何手动完成这些事情,否则当出现问题时我不知道如何调试它。
    猜你喜欢
    • 2021-12-27
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多