若你的mac或Linux环境上未安装Docker,请移步Docker安装,确认安装成功之后再进行下文内容。如果你不了解Docker如何操作,但是你又想彻底弄懂Docker命令,可以看我另一篇文章Docker最简教程

拿来即用

获取LAMP

LAMP镜像我已经搭建好并且我已经测试过了,没有问题。你只需要直接拿去用,执行如下命令:

$docker pull icoty1/lamp:v1.1.0
$docker images # 能够看到icoty1/lamp:v1.1.0已经被拉到你本地
$docker run -d -ti -p 80:80 -p 3306:3306 -v /Users/yangyu/app/:/var/www/html/ icoty1/lamp:v1.1.0 /bin/bash start.sh # 运行一个容器,目录/Users/yangyu/app/是你本机PHP应用位置

/Users/yangyu/app/下存放的是public、thinkphp、vendor、runtime等内容。然后访问http://localhost 能够看到PHP应用目录下的内容,如下图,说明已经成功。

然后访问http://localhost/public/index.php ,这个是PHP的入口。如果浏览器打开提示权限不够,不要慌,检查下你无法访问的那个目录下是否存在.htaccess文件,如果有则删除就好了,如果没有则执行如下命令。

$docker exec -it [CONTAINER ID] /bin/bash # 进入前面启动的容器中
$chmod -R 0777 /var/www/html/ # 赋予最高权限
$sh start.sh # start.sh在根目录下,是重启服务用的

访问phpadmin:http://localhost/phpmyadmin/index.php ,登陆的用户名和密码均为phpmyadmin,登陆后你能够在浏览器上一目了然的对所有数据表进行操作。

容器内根目录下有个start.sh文件,每次需要重启apache服务和mysql服务时只需要执行这个脚本就好了,命令如下:

$sh start.sh

LAMP版本

Ubuntu 18.04.2,PHP 7.2.15,mysql 5.7.25,同时也安装了phpmyadmin。下面是查看版本的命令。mysql数据库的root账户密码是root,phpmyadmin账户密码是phpmyadmin ,你可以把密码修改成你的,mysql修改用户密码

root@4f5e11ebccac:/# cat /etc/issue
Ubuntu 18.04.2 LTS \n \l root@4f5e11ebccac:/# php -v
PHP 7.2.15-0ubuntu0.18.04.2 (cli) (built: Mar 22 2019 17:05:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.15-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies
root@4f5e11ebccac:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

到这里你的目的就已经达到了,一个完整LAMP服务已经在你本机上跑起来并且能用了。下面的内容是我制作icoty1/lamp:v1.1.0的过程,如果你有兴趣,或者想知道我是怎么制作出来的,欢迎继续围观。

icoty1/lamp:v1.1.0制作过程

获取ubuntu基础镜像

$ docker pull ubuntu  # 从Docker Hub拉取最新的ubuntu 18.04镜像并运行一个容器

安装依赖

进入前面运行的容器中安装接下来的内容。

mysql

$apt-get update
$apt-get upgrade -y
$apt-get dist-upgrade -y
$apt-get install vim -y
$apt-get install mysql-server mysql-client -y

apache/php

$apt-get install apache2 -y
$vi /etc/apache2/apache2.conf # 添加 ServerName localhost:80
$apt-get install php7.2 -y # 这个过程中需要选择国家和时区,如图。
$apt-get install libapache2-mod-php7.2
$apt-get install php7.2-mysql -y

phpmyadmin

$apt-get install php-mbstring php7.0-mbstring php-gettext
$service apache2 restart
$apt-get install phpmyadmin # 这个过程中会自动创建mysql用户名phpmyadmin,需要手动输入密码,如图。

使apache解析php文件

vi /etc/apache2/apache2.conf,添加如下内容,让apache服务知道libphp7.2.so库在哪里,找不到这个动态库就无法解析php文件。

# add by yangyu, current dictory is '/etc/apache2/', so '../../usr/lib/apache2/modules/libphp7.2.so' = '/usr/lib/apache2/modules/libphp7.2.so'
LoadModule php7_module ../../usr/lib/apache2/modules/libphp7.2.so
AddType application/x-httpd-php .php
DirectoryIndex index.php index.htm index.html

到此,这个容器内已经搭建好了LAMP服务,使用docker commit命令把这个容器提交为镜像icoty1/lamp:v1.1.0,然后push到我的docker hub仓库上,你所pull的正是我push上去的。

参考文献

[1] ubuntu搭建PHP IDE

[2] Ubuntu-16.04安装LAMP

[3] Ubuntu-16.04搭建LAMP

[4] mysql修改用户密码

Linux下Docker快速部署LAMP的更多相关文章

  1. linux下docker安装部署项目(全)

    一 .系统安装 基于CentOS-7-x86_64-Minimal-1708.iso安装系统 1.2.  配置系统 1.2.1  在线更新内核版本(建议更新,旧版内核会有docker BUG) 1.2 ...

  2. 私活利器,docker快速部署node.js应用

    http://cnodejs.org/topic/53f494d9bbdaa79d519c9a4a 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维, ...

  3. 将自己的SpringBoot应用打包发布到Linux下Docker中

    目录 将自己的SpringBoot应用打包发布到Linux下Docker中 1. 环境介绍 2. 开始前的准备 2.1 开启docker远程连接 2.2 新建SpringBoot项目 3. 开始构建我 ...

  4. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  5. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  6. Linux下最快速共享目录的方法

    Linux下最快速共享目录的方法 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 搭建FTP,或者是搭建网络文件系统,这 ...

  7. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  8. linux下实现自动部署tomcat的脚本

    linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...

  9. Linux下Tomcat同时部署两个工程然而只有一个能访问问题

    Linux下Tomcat同时部署两个工程然而只有一个能访问问题 问题: Linux下单个部署到Tomcat下的时候都正常,两个一起部署,只有一个能访问: 解决方案: 由于采用#./shutdown.s ...

随机推荐

  1. 虚拟机无法上网,没有eth0

    虚拟机无法上网,找不到eth0解决方案如下: Ifconfig -a 第一步,输入如下命令,编辑对应文件(使用管理员权限执行,下同) # vim /etc/default/grub 在"GR ...

  2. 学习笔记TF055:TensorFlow神经网络简单实现一元二次函数

    TensorFlow运行方式.加载数据.定义超参数,构建网络,训练模型,评估模型.预测. 构造一个满足一元二次函数y=ax^2+b原始数据,构建最简单神经网络,包含输入层.隐藏层.输出层.Tensor ...

  3. creator rotationY的问题

    最近在做一个2D的小游戏,碰撞方面由于懒,就直接使用cocos自带的物理组件RigidBody了. 但是在父节点挂载RigidBody之后,会导致设置rotationY时失效,具体原因没有深查,估计是 ...

  4. 网页真机调试之Browsersync简介

    以前的调试方式 修改完项目文件(html.js.css等)后保存,在浏览器刷新页面查看修改后的效果 本地开启一个 tomcat 服务,修改文件后保存刷新页面,移动端或其他 pc 则需要输入 ip + ...

  5. [NLP]非终结字符集&终结字符集

    参考:终结符和非终结符 终结字符集: 不能单独出现在推导式左边的符号, 不能够再继续推导. 非终结字符集: 不是终结字符集中的符号都为非终结字符集. 是可拆分元素. 例子: 文法如下: S->A ...

  6. 如何在C++中使用动态三维数组

    目录 1. 使用new和delete来构造 2. 使用malloc和free来构造 3.构造函数来生成数组 1. 使用new和delete来构造 在使用new申请内存时,在使用过后,一定要采用dele ...

  7. Vue 错误记录:Cannot read property 'beforeRouteEnter' of undefined

    点击某路由链接,页面提示: Cannot read property 'beforeRouteEnter' of undefined 查看代码并无手写beforeRouterEnter设置, 把页面内 ...

  8. sql 用过记住

    1 递归查询一个节点下的所有子节点 包括该节点 connect by h.parent_menu_id= prior h.menu_idstart with h.menu_id='当前节点' h.pa ...

  9. DockerFile详解--转载

    COPY 复制文件 格式: COPY ... COPY ["",... ""] 和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用. CO ...

  10. Python学习:列表、元组、字典、集合

    转载:https://www.cnblogs.com/xc-718/p/9632942.html 列表/元组 列表和元组都是序列结构,它们本身很相似,但又有一点不同: 列表是用方括号标记,如:a=[1 ...