Docker 搭建 lamp 环境 (失败)

这又是一次不成功的尝试,10 个月前试过一次,同样由于权限问题止步。此次记录下来备查。

windows 10 系统。官网下载安装包,下一步下一步,安装后重启。确认安装成功后,打开 CMD 。

运行一个 ubuntu 的 container

docker run -ti --name lamp ubuntu:16.04 bash

升级系统

apt-get -y update
apt-get -y upgrade

安装apache2

apt-get -y install apache2

查看 apache 版本

apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2017-05-05T16:32:00

启用 Apache rewrite 模块

a2enmod rewrite
apt-get -y install vim
vim /etc/apache2/sites-available/000-default.conf

在文件末尾添加 下面的

<Directory "/var/www/html">
    AllowOverride  all
</Directory>
service apache2 restart

安装 MySQL 5.7

apt-get -y install mysql-server-5.7 mysql-client-5.7

输入 root 的密码:root

service mysql restart
mysql -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

创建数据库 magento 并将所有权限授予 magento 用户 密码 magento

create database magento;
GRANT ALL ON magento.* TO magento@localhost IDENTIFIED BY 'magento';
exit
mysql -u magento -p
show databases;

安装 php 7

apt-get -y update
apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
apt-get -y update
apt-get install -y php7.0 libapache2-mod-php7.0 php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-mcrypt php7.0-curl php7.0-intl php7.0-xsl php7.0-mbstring php7.0-zip php7.0-bcmath php7.0-iconv
php -v

PHP 7.0.19-1+deb.sury.org~xenial+1 (cli) (built: May 11 2017 14:06:14) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.19-1+deb.sury.org~xenial+1, Copyright (c) 1999-2017, by Zend Technologies

PHP 的其他设置

有两个 php.ini
/etc/php/7.0/apache2/php.ini
/etc/php/7.0/cli/php.ini

两个都需要更改并启用 opcache

date.timezone = "Asia/Shanghai"
memory_limit = 1024M
opcache.enable=1
opcache.enable_cli=1
opcache.save_comments = 1
service apache2 restart
docker commit -m "This is lamp for magento2" -a "Pisces.ThankIT" lamp wqdocker/lamp:v1

这样我就得到了一个 lamp 的 image
然后我尝试更改挂载上去的目录权限,无效。

以下是失败的部分

docker run -tid -p 80:80 --name lampv1 -v g:/dockerwww:/var/www/html  wqdocker/lamp:v1 bash
docker run -tid -p 80:80 -p 3306:3306 --name lampv2 -v g:/dockerwww:/var/www/html  wqdocker/lamp:v1 bash

进入容器

docker attach lampv1
service apache2 start
service mysql start
useradd -r -m -s /bin/bash magento
配置用户的密码(magento)
passwd magento
寻找 apache 的 user (www-data)
ps aux | grep apache
www-data 的 group 也是www-data
groups www-data
把 magento 用户创建的任何文件都分配给 www-data 组
usermod -g www-data magento
验证下 magento 在 www-data 组
groups magento
chown magento:www-data index.php

无法修改权限,查了一些资料,推测是 docker 在 windows 系统上的 bug 。
在 ubuntu 系统下,权限的映射有点小问题,但是可以解决。

2 comments

  1. gpgkd906

    windows下把要挂载的对象目录放在 c:/Users/用户名/ 下面,应该就可以更改权限了。
    这不是docker的bug。

    其实最好不要在一个容器里面放太多东西。
    使用docker的理想,本身就是把不同的服务抽象到不同的容器中,然后用docker-compose组合各种容器。

    下面是一个比较赶紧的docker-lamp环境,你可以参考一下。
    https://github.com/gpgkd906/docker-lamp

    1. Pisces Post author

      感谢回复,我放在 c:/Users/用户名/ 下面的时候,出现的错误是 access denied

      容器里是不应该放太多东西,只是起步测试就那么干了,谢谢你的参考链接。感谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注