在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安装的

6.生成mysql镜像

Dockerfile

# LEMP stack as a docker container

FROM ubuntu:14.04

MAINTAINER Daniel Watrous

#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

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的测试文件

// 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
\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 "

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

echo "\t

\n";

foreach ($line as $col_value) {

echo "\t\t

$col_value\n";

}

echo "\t

\n";

}

echo "

\n";

// Free resultset

mysql_free_result($result);

// Closing connection

mysql_close($link);

?>

Title:

Message:

把这三个文件放在同一目录

进入目录

利用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了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

virtualbox php mac,详解mac下通过docker搭建LEMP环境相关推荐

  1. linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程

    LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...

  2. apt ubuntu 指定ipv4_macOS 下使用 Docker 搭建 ubuntu 环境

    学习网络开发过程中不想"污染"macOS,考虑到之后部署网络应用主要是与linux打交道,所以安装了 ubuntu 虚拟机以满足短期的知识学习需求.十里安装了 ubuntu 虚拟机 ...

  3. docker ubuntu镜像_macOS 下使用 Docker 搭建 ubuntu 环境

    学习网络开发过程中不想"污染"macOS,考虑到之后部署网络应用主要是与linux打交道,所以安装了 ubuntu 虚拟机以满足短期的知识学习需求.十里安装了 ubuntu 虚拟机 ...

  4. 中台详解(下)——怎么搭建中台

    编辑导语:上篇文章中作者详细介绍了<什么是中台>,2016年阿里提出的"大中台小前台"战略后,很多企业开始想搭建中台:本文作者详细介绍了中台的定义及在"中台& ...

  5. 详解如何使用VS code搭建JavaScript环境(适合小白)

    对于从事自动化测试的同学来说,有很多自动化测试项目是需要使用JavaScript脚本语言进行coding的,包括selenium.playwright.Puppeteer,那么选择哪种IDE合适呢?在 ...

  6. 详解MAC硬盘中各个文件夹

    详解MAC硬盘中各个文件夹 打开Macintosh HD你会发现内中有四个文件夹(一般情况下,隐藏文件夹是不可见的,而且,可能会更多,比如安装xcode后会有developer文件夹). 分别有--应 ...

  7. Ethernet(以太网) 详解 MAC、MII、PHY

    Ethernet(以太网) 详解 MAC.MII.PHY 结构   从硬件的角度看,以太网接口电路主要由MAC(Media Access Control)控制器和物理层接口PHY(Physical L ...

  8. [转载]VirtualBox网络配置详解

    标题: [原创]VirtualBox网络配置详解 来自 http://www.linuxsir.org/bbs/showthread.php?p=1800679#post1800679 欢迎转载, 转 ...

  9. stm32项目平衡车详解(stm32F407)下

    stm32项目平衡车详解(stm32F407)下 本文章学习借鉴于创客学院团队,以表感谢.教学视频 B站学习地址 HC-SRO4 超声波测距避障功能开发 TSL1401 CCD摄像头实现小车巡线功能 ...

最新文章

  1. 异步获取邮件推送结果
  2. 【Luogu】P3356火星探险问题(费用流)
  3. 测试服务搭建之centos7下安装java
  4. Hadoop的RPC工作原理
  5. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(10) - MXCSR状态控制指令
  6. 长沙中职英语计算机等级考试查询,湖南省中等职业教育公共基础课达标训练英语291-300...
  7. [转] 计算机视觉领域稍微容易中的期刊
  8. 每月拿几百元来买基金,有意义吗?
  9. 深圳很适合创业,无论小白造梦,或是落魄重生
  10. 计算机毕业设计-SSM在线视频教育网站-JavaWeb在线视频教育网站
  11. 砍价小程序怎么变成二维码(小程序码)
  12. Mysql 超键 候选键 主键 外键之间关系
  13. 学习笔记(一)---Docker概述
  14. 搜索推荐广告三者异同
  15. 家喻户晓的足力健,凭什么征服中老年人?
  16. 0008:《以色列:一个国家的诞生》读后感
  17. Unity引擎及编辑器C#源代码赏析(一)—目录结构
  18. 为什么使用线程池,解释下线程池参数
  19. 从现实世界的角度去理解计算机领域的知识
  20. jdbc连接MysQL数据库时报错:The server time zone value ‘ ‘ is unrecognized or represents more than

热门文章

  1. c++中友元函数详解
  2. Linux下C语言使用openssl库进行MD5校验
  3. 剑指Offer09. 用两个栈实现队列
  4. Linux系统编程(三)进程间的通信
  5. 【汇编语言】程序设计过程,如何避免数据类型匹配错误?
  6. 【微信小程序】使用Hystrix的插件机制
  7. 交大c语言第一次作业答案,第一次作业答案(供参考)
  8. mysql 链式查询_MySQL的链接查询
  9. Forward团队-爬虫豆瓣top250项目-模块开发过程
  10. mysql复制主从集群搭建