【问题标题】:Create docker machine that exposes web root to host创建将 Web 根目录暴露给主机的 docker 机器
【发布时间】:2016-10-16 07:48:35
【问题描述】:

我正在尝试使用带有 docker-machine 的 this 图像在 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 暴露给主机(即虚拟机)。 env 文件包含各种环境变量,安装脚本在 docker image page 上使用。

然后我运行一些命令来创建机器、添加共享卷、永久挂载它并运行安装脚本

在其中创建机器和 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

在虚拟机上设置永久共享卷

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机器上的/var/www暴露给我的项目目录。但是,这个文件夹不是 docker 的 /var/www 而是 机器的。真正的 htdocs 位于类似

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

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

【问题讨论】:

  • 我投票结束这个问题,因为 Stack Overflow 是一个programming-related 问答网站。您的问题与编程无关。也许你应该把它发到serverfault.com 上?
  • serverfault 上有 8 个 docker-machine 相关问题,stackoverflow 上有 529 个问题。
  • 这很好,但这并不意味着它是这里的主题。问题必须是关于编程才能成为主题。

标签: macos magento docker-compose docker-machine


【解决方案1】:

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

Dockerfile

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2016-12-28
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2017-10-12
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多