当前位置: 技术文章>> 使用Docker构建的magento2开发环境

文章标题:使用Docker构建的magento2开发环境
  • 文章分类: Magento
  • 14415 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


很久以前,当我第一次开始使用PHP时,我确实在设置工作环境时遇到了麻烦。

我不知道自己在做什么。

不要问我怎么做,但我最终让Apache Tomcat运行PHP。

老实说,我不知道我今天能不能设置这样的亵渎。


编辑注意:由于udovicic/echo:

apache-php7.1更新,你不再需要apache配置,所以我编辑了这篇文章并删除了apache配置。

多年来,我走了从xampp,手动LAMP设置,流浪汉的整个道路......

所有这些都至少有1个交易破坏者,特别是当我开始与Magento合作时。

最后,Docker的到来使开发变得更加容易。

在这一点上,解释Docker是什么变得有点棘手。

它执行操作系统级虚拟化(容器化),这是指内核允许存在多个隔离的用户空间实例的操作系统功能。

如果上面的句子对您没有任何意义,那么也许访问 http://www.docker.com 并在某个时候回到这里是明智的,否则,请继续阅读......

我现在要分享的不是一些Docker的智慧。它更多的是关于能够通过Docker运行Magento 2的设置,所以本文假设你对Docker有些熟悉。

所以,让我们开始...

让我们运行Magento 2,假设 http://m2.docker

你应该做的第一件事是在 /etc/hosts 文件中的某个位置添加此行:

127.0.0.1 m2.docker www.m2.docker

我们将需要一些文件系统结构,因此请执行以下操作:

tomas ~ $ mkdir m2.docker
tomas ~ $ cd m2.docker/
tomas ~/m2.docker $ mkdir docker
tomas ~/m2.docker $ mkdir html
tomas ~/m2.docker $ mkdir -p docker/db
tomas ~/m2.docker $ touch docker/xdebug.ini
tomas ~/m2.docker $ touch docker/apache.conf
tomas ~/m2.docker $ touch docker-compose.yml
tomas ~/m2.docker $ touch .env

现在,让我们逐个来看这些文件文件:

.env

在这个文件中,你可以编写将在docker-compose.yml

中使用的变量,我的看起来像这样:

CONTAINER_PREFIX=m2docker
SERVER_NAME=m2.docker
SERVER_ALIAS=www.m2.docker
DIRECTORY_NAME=m2.docker
WEB_USER=inchoo
WEB_ROOT = /var/www/html
MYSQL_DB_HOST = ${CONTAINER_PREFIX}_db_1
MYSQL_DATABASE=inchoo
MYSQL_ROOT_USERNAME=root
MYSQL_ROOT_PASSWORD=inchoo
MYSQL_USER=inchoo
MYSQL_PASSWORD=inchoo
DOCKER_EXEC=docker exec
DOCKER_EXEC_INTERACTIVE=docker exec -i
DOCKER_EXEC_TTY=${DOCKER_EXEC_INTERACTIVE} -t

对于docker-compose.yml,您将需要以下代码。

我还添加了一些带有文档链接的评论。

请注意,我使用的是我的同事Stjepan创建的apache-php图像,我强烈推荐它进行开发。


# https://docs.docker.com/compose/compose-file
version: "3.6"
 
# https://docs.docker.com/compose/compose-file/#service-configuration-reference
services:
 
    #custom name
    apache-php:
        # https://docs.docker.com/compose/compose-file/#image
        # https://githheizenberg ub.com/udovicic/echo => https://hub.docker.com/r/udovicic/echo/
        image: udovicic/echo:apache-php7.1
 
        # https://docs.docker.com/compose/compose-file/#ports
        ports:
        - "80:80"
 
        # https://docs.docker.com/compose/compose-file/#expose
        expose:
        - "9000"
 
        # https://docs.docker.com/compose/compose-file/#volumes
        volumes:
        - ./docker/xdebug.ini:/etc/php/7.1/mods-available/xdebug.ini
        - ./html:/var/www/html
 
        # https://docs.docker.com/compose/compose-file/#environment
        environment:
        - TERM=xterm-256color
        - APACHE_RUN_USER=1000
 
        # https://docs.docker.com/compose/compose-file/#network-configuration-reference
        networks:
            default:
                aliases:
                - ${SERVER_NAME}
                - ${SERVER_ALIAS}
 
    db:
 
        # https://hub.docker.com/_/mysql/
        image: mysql:5.7
 
        volumes:
        - ./docker/db/data:/var/lib/mysql
 
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
 
    redis:
 
        # https://hub.docker.com/_/redis/
        image: redis:latest
 
    phpmyadmin:
 
        # https://hub.docker.com/r/phpmyadmin/phpmyadmin/
        image: phpmyadmin/phpmyadmin
 
        ports:
        - "8080:80"
 
        environment:
            MYSQL_USERNAME: ${MYSQL_ROOT_USERNAME}
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
…and xdebug.ini
zend_extension=xdebug.so
xdebug.remote_autostart=0
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=1

这一点我们有工作环境,所以让我们尝试运行它:

tomas ~/m2.docker $ docker-compose up -d
Creating network "m2docker_default" with the default driver
Creating m2docker_apache-php_1 ... done
Creating m2docker_redis_1      ... done
Creating m2docker_phpmyadmin_1 ... done
Creating m2docker_db_1         ... done
tomas ~/m2.docker $ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                            NAMES
e3384b0eff8c        mysql:5.7                     "docker-entrypoint.s…"   3 seconds ago       Up 2 seconds        3306/tcp                         m2docker_db_1
d283bf018330        phpmyadmin/phpmyadmin         "/run.sh phpmyadmin"     3 seconds ago       Up 2 seconds        9000/tcp, 0.0.0.0:8080->80/tcp   m2docker_phpmyadmin_1
ded8bce1d993        redis:latest                  "docker-entrypoint.s…"   3 seconds ago       Up 2 seconds        6379/tcp                         m2docker_redis_1
fe8a80763ac6        udovicic/echo:apache-php7.1   "/start.sh"              3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp, 9000/tcp     m2docker_apache-php_1
tomas ~/m2.docker $

Magento应该安装在“html”目录中。

请注意,在引用数据库地址时需要使用“db”,依此类推。只需检查docker-compose.yml(服务名称)。

此外,相关凭据位于 .env 文件中。

PhpMyAdmin 可用 @ http://m2.docker:8080

这是一个非常基本的设置。我通常创建 git 存储库,它最初以 2 个分支结束,例如 m2-docker 和 master,然后我将 .git 目录复制到 html 中并签出 master 分支,而在基本目录中我签出 m2-docker 分支。


推荐文章