docker部署LAMP(linux apache mysql php)

docker数据库文件持久化

  • 在主机中创建保存数据库文件的目录
mkdir ~/web_data
  • 启动mysql容器
docker run -p 33060:3306 -e mysqld -e MYSQL_ROOT_PASSWORD=admin -v ~/web_data/:/var/lib/mysql --name mysql_server -it mysql /bin/bash

The -v /my/own/datadir:/var/lib/mysql part of the command mounts the /my/own/datadir directory from the underlying host system as /var/lib/mysql inside the container, where MySQL by default will write its data files.
参数说明:

-p 33060:3306:将容器的33060端口映射到主机的3306端口;

-v ~/web_data/:/var/lib/mysql:将主机当前目录下挂载到容器目录;

-e MYSQL_ROOT_PASSWORD=admin:初始化root用户的密码;

--name mysql_server 给容器命名;

  • 通过ctrl + pctrl + q 离开容器,并保持容器后台运行

  • 通过 docker attach container_ID 进入正在运行的容器

官方文档:/mysql/”>https://hub.docker.com//mysql/

  • 启动mysql服务
service mysql start
  • 尝试远程登录mysql服务器
mysql -h host_ip -u root -p
  • 登入本地mysql数据库
mysql -uroot -p
  • 添加访问用户并修改服务器登录权限
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'web_user'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION;
  • 刷新缓存
flush privileges;
  • 查看数据库用户是否更好成功,host项为%
use mysql;
select host, user from user;
  • 退出数据库,以远程用户创建数据库或者导入数据库文件:
create database thinkcmf.sql;
use thinkcmf;
source /var/lib/mysql/thinkcmf.sql;

docker的web客户端配置

  • 启动apache+mysql+php容器
docker run -p 800:80  -v ~/epcc:/var/www/example.com/public_html --link=mysql_server:mysql_server --name=web_client -t -i linode/lamp /bin/bash
  • 通过环境变量env 检查是否link成功
env

如果有输出以 MYSQL_SERVER_ 作为前缀的变量,则成功

  • 安装必要的php拓展,参考出处https://blog.csdn.net/MasonQAQ/article/details/78048112
apt-get update
apt-get install php5-mysql
apt-get install php5-gd
  • 开启apache服务
service apache2  start

开启url转发

  • /etc/apache2/apache2.conf 文件中所有的AllowOverride None改为AllowOverride All并保存
  • 在项目根目录下添加.htaccess文件,修改rewrite规则,也就是thinkphp下的.htaccess
  
    RewriteEngine on  
    #不显示index.php  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]  
  

-linux 系统还需要一步

sudo a2enmod rewrite  
  • 重启apache服务后生效
service apache2 restart

你可能感兴趣的:(docker)