在mac下通过docker搭建LEMP环境境

1.安装virtualbox。由于docker是在lxc环境的容器
2.安装boot2docker,用于与docker客户端通讯
> brew update > brew install docker > brew install boot2docker
3.初始化boot2docker,也就是在virtualbox上安装一个docker的host环境
boot2docker init
此时会下载一个镜像
4.启动虚拟机host
:~$ boot2docker up Waiting for VM and Docker daemon to start... ....................ooo Started. To connect the Docker client to the Docker daemon, please set: export DOCKER_HOST=tcp://192.168.59.103:2375 unset DOCKER_CERT_PATH
这样host环境就启动起来了,根据提示设置环境变量
export DOCKER_HOST=tcp://192.168.59.103:2375
后boot2docker就能与host环境的docker客户端连接了
5.连接host环境的docker客户端
MacBook-Pro:~$ boot2docker ssh
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker with VirtualBox guest additions version 4.3.14
boot2docker: 1.2.0
master : e75396e - Fri Aug 22 06:03:48 UTC 2014
docker@boot2docker:~$
这样我们就成功登录virtualbox中的host环境,便可以进行docker操作了
安装nginx,php,mysql,基于ubuntu14:04,以下我是通过Dockerfile安装的
这里是DockFile
6.生成mysql镜像
Dockerfile
# LEMP stack as a docker container FROM ubuntu:14.04 MAINTAINER Daniel Watrous <email> #ENV http_proxy http://proxy.example.com:8080 #ENV https_proxy https://proxy.example.com:8080 RUN apt-get update RUN apt-get -y upgrade # seed database password COPY mysqlpwdseed /root/mysqlpwdseed RUN debconf-set-selections /root/mysqlpwdseed RUN apt-get -y install mysql-server RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf RUN /usr/sbin/mysqld & \ sleep 10s &&\ echo "GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'secret' WITH GRANT OPTION; FLUSH PRIVILEGES" | mysql -u root --password=secret &&\ echo "create database test" | mysql -u root --password=secret # persistence: http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/ EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]
mysqlpwdseed
mysql-server mysql-server/root_password password secret mysql-server mysql-server/root_password_again password secret
进入mysql的Dockefile然后生成一个mysql镜像
docker build -t "local/mysql:v1" .
成功后用
docker images
查看已生成的镜像
运行mysql镜像,生成一个容器
docker run -d --name mysql local/mysql:v1
运行起来后,可以用
boot2docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2332dcad7ca local/mysql:v1 "/usr/bin/mysqld_saf 26 hours ago Up 2 seconds 3306/tcp mysql,nginx/mysql
来查看正在运行的容器
7.生成nginx,php ,这两个用一个dockerfile生成一个镜像
dockerfile
# LEMP stack as a docker container FROM ubuntu:14.04 MAINTAINER Daniel Watrous <email> ENV http_proxy http://proxy.example.com:8080 ENV https_proxy https://proxy.example.com:8080 # install nginx RUN apt-get update RUN apt-get -y upgrade RUN apt-get -y install nginx RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak COPY default /etc/nginx/sites-available/default # install PHP RUN apt-get -y install php5-fpm php5-mysql RUN sed -i s/\;cgi\.fix_pathinfo\s*\=\s*1/cgi.fix_pathinfo\=0/ /etc/php5/fpm/php.ini # prepare php test scripts RUN echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php ADD wall.php /usr/share/nginx/html/wall.php # add volumes for debug and file manipulation VOLUME ["/var/log/", "/usr/share/nginx/html/"] EXPOSE 80 CMD service php5-fpm start && nginx
default 一个默认的nginx配置文件
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
wall.php 一个用来测试连接mysql的测试文件
<?php
// database credentials (defined in group_vars/all)
$dbname = "test";
$dbuser = "admin";
$dbpass = "secret";
$dbhost = "mysql";
// query templates
$create_table = "CREATE TABLE IF NOT EXISTS `wall` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default '',
`content` text NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$select_wall = 'SELECT * FROM wall';
// Connect to and select database
$link = mysql_connect($dbhost, $dbuser, $dbpass)
or die('Could not connect: ' . mysql_error());
echo "Connected successfully\n<br />\n";
mysql_select_db($dbname) or die('Could not select database');
// create table
$result = mysql_query($create_table) or die('Create Table failed: ' . mysql_error());
// handle new wall posts
if (isset($_POST["title"])) {
$result = mysql_query("insert into wall (title, content) values ('".$_POST["title"]."', '".$_POST["content"]."')") or die('Create Table failed: ' . mysql_error());
}
// Performing SQL query
$result = mysql_query($select_wall) or die('Query failed: ' . mysql_error());
// Printing results in HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Free resultset
mysql_free_result($result);
// Closing connection
mysql_close($link);
?>
<form method="post">
Title: <input type="text" name="title"><br />
Message: <textarea name="content"></textarea><br />
<input type="submit" value="Post to wall">
</form>
把这三个文件放在同一目录
进入目录
利用dockerfile生成镜像
docker build -t "local/nginx:v1" .
生成成功后查看句是你
boot2docker:~$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE local/nginx v1 9489872e2ebb 25 hours ago 250 MB local/mysql v1 b70d2e0f7f9c 26 hours ago 351.1 MB ubuntu 14.04 9bd07e480c5b 3 days ago 192.7 MB
运行
docker run -d -p 80:80 --link mysql:mysql --name nginx local/nginx:v1
这时通过查看正在运行的容器
boot2docker:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52e430b58579 local/nginx:v1 "/bin/sh -c 'service 21 hours ago Up 3 seconds 0.0.0.0:80->80/tcp nginx c2332dcad7ca local/mysql:v1 "/usr/bin/mysqld_saf 26 hours ago Up 11 minutes 3306/tcp mysql,nginx/mysql
就可以看到nginx和mysql两个运行中的容器,其中nginx通过link连接到了mysql容器,
通过
--link mysql:mysql
命令,把mysql容器的地址加入到了nginx父容器的host文件中,此后,通过访问别名mysql,就可以访问到数据库了。
浏览器访问:192.168.59.103/wall.php,就可访问刚搭好的web服务器
8.持载目录到容器中
我们希望持载一个本地目录到容器中,以后存放可能需要修改的web内容,这里我们通过
-v /Users/lyc/web:/usr/share/nginx/html
把的本地目录到容器中,存放web目录内容,这样就可以把wall.php之类的web文件放在/Users/lyc/web目录,供容器访问
但是因为mac环境下host主机为virtualbox,因此我们先要绑定mac下的目录到虚拟机中
首先停止boot2docker
> boot2docker down
然后
> curl http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso > ~/.boot2docker/boot2docker.iso > VBoxManage sharedfolder add boot2docker-vm -name home -hostpath /Users > boot2docker up
重新连docker后
先删除原先停止的容器
docker rm mysql docker rm nginx
启动容器时挂载我们的目录到nginx的目录中
docker run -d -p 3306:3306 --name mysql mysqldb docker run -d -p 80:80 -v /Users/lyc/web:/usr/share/nginx/html --link mysql:mysql --name nginx local/nginx:v1
这样就可以修改/Users/lyc/web中的内容来更新/usr/share/nginx/html了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# docker
# lamp环境搭建
# mac搭建docker环境
# lnmp
# 环境搭建
# Mac系统上用Docker搭建lamp环境
# Docker 搭建lamp应用实例详解
# 利用docker搭建LAMP运行环境教程详解
# 镜像
# 就可以
# 是在
# 客户端
# 正在运行
# 我是
# 放在
# 也就
# 可以用
# 这两个
# 作了
# 便可
# 就可
# 能与
# 这三个
# 接了
# 绑定
# 配置文件
# 大家多多
# 根据提示
相关文章:
建站主机与服务器功能差异如何区分?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
零服务器AI建站解决方案:快速部署与云端平台低成本实践
北京企业网站设计制作公司,北京铁路集团官方网站?
香港网站服务器数量如何影响SEO优化效果?
专业公司网站制作公司,用什么语言做企业网站比较好?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星后台管理如何实现高效配置?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
高端网站建设与定制开发一站式解决方案 中企动力
自助网站制作软件,个人如何自助建网站?
建站之星安装路径如何正确选择及配置?
宁波自助建站系统如何快速打造专业企业网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Swift中循环语句中的转移语句 break 和 continue
如何通过宝塔面板实现本地网站访问?
建站与域名管理如何高效结合?
营销式网站制作方案,销售哪个网站招聘效果最好?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何构建满足综合性能需求的优质建站方案?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何快速启动建站代理加盟业务?
宝塔Windows建站如何避免显示默认IIS页面?
建站之星免费版是否永久可用?
再谈Python中的字符串与字符编码(推荐)
完全自定义免费建站平台:主题模板在线生成一站式服务
如何高效完成独享虚拟主机建站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
历史网站制作软件,华为如何找回被删除的网站?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
*服务器网站为何频现安全漏洞?
建站之星如何实现五合一智能建站与营销推广?
小型网站制作HTML,*游戏网站怎么搭建?
专业网站建设制作报价,网页设计制作要考什么证?
南宁网站建设制作定制,南宁网站建设可以定制吗?
nginx修改上传文件大小限制的方法
建站之星安装后如何配置SEO及设计样式?
内网网站制作软件,内网的网站如何发布到外网?
建站之星微信建站一键生成小程序+多端营销系统
高端建站如何打造兼具美学与转化的品牌官网?
TestNG的testng.xml配置文件怎么写
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
重庆市网站制作公司,重庆招聘网站哪个好?
建站之星如何优化SEO以实现高效排名?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何通过NAT技术实现内网高效建站?
如何获取上海专业网站定制建站电话?
如何在Windows环境下新建FTP站点并设置权限?
建站之星如何防范黑客攻击与数据泄露?
*请认真填写需求信息,我们会在24小时内与您取得联系。