创建 docker 台机器,将 Web 根公开给主机

Create docker machine that exposes web root to host

我正在尝试使用 this 图像和 docker-machine 在 mac 上创建本地 magento 安装。我希望将 docker 图像的 /var/www 安装到我的 mac 的项目目录中(即在主机上我的主目录的子文件夹中)。

据我所知:

#docker-compose.yml
web:
  image: alexcheng/magento
  ports:
    - "80:80"
  links:
    - mysql
  env_file:
    - env
  volumes:
    - /var/www:/var/www
mysql:
  image: mysql:5.6.23
  env_file:
    - env

请注意,我在其中添加了一行,它应该将 docker 图像的 /var/www 暴露给主机(即虚拟 machine)。 env 文件包含各种环境变量以及 docker image page 使用的安装脚本。

然后我 运行 一些命令来创建 machine,添加共享卷,永久安装它,以及 运行 安装脚本

中创建机器和SSH
docker-machine create magento
eval (docker-machine env magento)
docker-machine stop magento
VBoxManage sharedfolder add magento-machine --name www --hostpath ~/web/magento-machine --automount
docker-machine start magento
docker-machine ssh magento

在 VM 上设置持久共享卷

mkdir -p /var/www
sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` www /var/www
exit

回到主机,运行安装脚本

docker exec -it magentomachine_web_1 install-sampledata
docker exec -it magentomachine_web_1 install-magento

这可以将 magento machine 上的 /var/www 公开到我的项目目录。但是,这个文件夹不是docker的/var/www而是machine的。真正的 htdocs 位于类似

的地方

/mnt/sda1/var/lib/docker/aufs/diff/1d17cf805c6925dead7d0fd1ba432d1b27f50a5a9240f585949aac6fad633790/var/www

我如何 运行 在 docker-mac 中显示此图像,同时将 /var/www 暴露给我的主机 mac 显示?

Docker 仅在容器启动后装载共享数据卷。我在创建此本地开发安装时遇到的问题是,在安装共享文件夹之前,我尝试在共享文件夹中执行 运行 命令。解决方案是将设置 Web 根目录的命令重新定位到 shell 脚本。

获取步骤总结运行宁:

首先,将 image repo 克隆到项目目录中。

docker-compose.yml

version: '2'
services:
  web:
    build: .
    ports:
       - "80:80"
    links:
      - mysql
    env_file:
      - env
    volumes:
      - './htdocs:/var/www/htdocs'

  mysql:
    image: mysql:5.6.23
    env_file:
      - env
volumes:
  htdocs:
    driver: local

Docker文件

FROM occitech/magento:php5.5-apache

ENV MAGENTO_VERSION 1.9.2.4

COPY ./bin/setup_magento.sh /usr/local/bin/setup_magento

COPY ./bin/install-magento /usr/local/bin/install-magento
COPY redis.conf /tmp/

COPY ./sampledata/magento-sample-data-1.9.1.0.tgz /opt/
COPY ./bin/install-sampledata-1.9 /usr/local/bin/install-sampledata

RUN chmod +x /usr/local/bin/setup_magento && \
    chmod +x /usr/local/bin/install-magento && \
    chmod +x /usr/local/bin/install-sampledata && \
    apt-get update && apt-get install -y mysql-client-5.5 libxml2-dev && \
    docker-php-ext-install soap

VOLUME /var/www/htdocs

bin/setup_magento.sh

#!/bin/bash
cd /tmp
curl https://codeload.github.com/OpenMage/magento-mirror/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz
tar xvf $MAGENTO_VERSION.tar.gz
mv magento-mirror-$MAGENTO_VERSION/* magento-mirror-$MAGENTO_VERSION/.htaccess /var/www/htdocs

chown -R daemon:daemon /var/www/htdocs

sed -i 's/DocumentRoot \/var\/www\/html/DocumentRoot \/var\/www\/htdocs/' /etc/apache2/sites-available/000-default.conf
sed -i 's/www-data/daemon/g' /etc/apache2/envvars
cd /var/www/htdocs

install-sampledata
install-magento

mv -f /tmp/redis.conf /var/www/htdocs/app/etc/redis.conf

创建机器

docker-machine create -d virtualbox magento
eval (docker-machine env magento)

使用 Virtualbox GUI(或在命令行上,在您停止机器后)在 /path/to/local/project/htdocs

创建一个名为 htdocs 的共享文件夹

启动机器并安装

docker-compose up -d
docker exec -it machine-name setup_magento

这里有一个小鱼脚本,它删除了机器的任何实例并从头开始做所有事情

function respawn
  rm -rf ~/web/magento/htdocs/*
  docker-machine rm magento -y 
  docker-machine create -d virtualbox magento
  eval (docker-machine env magento)

  set machine_ip (docker-machine ip magento)
  echo "$machine_ip magento.dev" >> ~/Library/Gas\ Mask/Local/Docker\ Machines.hst

  docker-compose up -d
  docker exec -it web setup_magento
end