Docker执行操作系统级虚拟化(容器化),这是指内核允许存在多个独立的用户空间实例的操作系统功能,更多详细信息请查看http://www.docker.com

让我们在http://m2.docker上运行Magento 2

首先要做的是在/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=magease
WEB_ROOT = /var/www/html
MYSQL_DB_HOST = ${CONTAINER_PREFIX}_db_1
MYSQL_DATABASE=magease
MYSQL_ROOT_USERNAME=root
MYSQL_ROOT_PASSWORD=magease
MYSQL_USER=magease
MYSQL_PASSWORD=magease
DOCKER_EXEC=docker exec
DOCKER_EXEC_INTERACTIVE=docker exec -i
DOCKER_EXEC_TTY=${DOCKER_EXEC_INTERACTIVE} -t

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

# 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/apache.conf:/etc/apache2/sites-available/000-default.conf
        - ./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}

xdebug.ini

zend_extension=xdebug.so
xdebug.remote_autostart=0
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=1

apache.conf

ServerAdmin webmaster@m2-sample.docker
    ServerName m2.docker
    Serveralias www.m2.docker
 
    DocumentRoot /var/www/html/pub
 
        Options FollowSymLinks
        AllowOverride None
 
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
 
        SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost/"
 
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

我们有了工作环境,现在我们尝试运行它:

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和checkout master分支,而在基本目录中我检查m2-docker分支。

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