virtualbox php mac,詳解mac下通過docker搭建LEMP環境

在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了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388696.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot項目打war包部署Tomcat教程

一、簡介 正常來說SpringBoot項目就直接用jar包來啟動&#xff0c;使用它內部的tomcat實現微服務&#xff0c;但有些時候可能有部署到外部tomcat的需求&#xff0c;本教程就講解一下如何操作 二、修改pom.xml 將要部署的module的pom.xml文件<packaging>節點設置為war <…

在VS2005中使用添加變量向導十分的

在VS2005中使用添加變量向導十分的方便&#xff0c;但是如何手動添加呢。可以分為2步&#xff1a; 1. 在控件對應的類的頭文件中添加相應的變量聲明&#xff08;如&#xff1a;CString m_strResult&#xff09; 2. 在類的實現文件中的DoDataExchange(CDataExchange* pDX)函數…

關于如何使用xposed來hook微信軟件

安卓端 難點有兩個 收款碼的生成和到帳監聽需要源碼加 2442982910轉載于:https://www.cnblogs.com/ganchuanpu/p/10220705.html

GitHub動作簡介

GitHub Actions can be a little confusing if you’re new to DevOps and the CI/CD world, so in this article, we’re going to explore some features and see what we can do using the tool.如果您是DevOps和CI / CD領域的新手&#xff0c;那么GitHub Actions可能會使您…

java returnaddress,JVM之數據類型

《Java虛擬機規范》閱讀筆記-數據類型1.概述Java虛擬機的數據類型可分為兩大類&#xff1a;原始類型(Primitive Types&#xff0c;也稱為基本類型)和引用類型(Reference Types)。Java虛擬機用不同的字節碼指令來操作不同的數據類型[1] 。2.原始類型原始類型是最基本的元素&…

C# matlab

編譯環境&#xff1a;Microsoft Visual Studio 2008版本 9.0.21022.8 RTMMicrosoft .NET Framework版本 3.5已安裝的版本: ProfessionalMicrosoft Visual Basic 2008 91986-031-5000002-60050Microsoft Visual Basic 2008Microsoft Visual C# 2008 91986-031-5000002-60050…

洛谷P3273 [SCOI2011] 棘手的操作 [左偏樹]

題目傳送門 棘手的操作 題目描述 有N個節點&#xff0c;標號從1到N&#xff0c;這N個節點一開始相互不連通。第i個節點的初始權值為a[i]&#xff0c;接下來有如下一些操作&#xff1a; U x y: 加一條邊&#xff0c;連接第x個節點和第y個節點A1 x v: 將第x個節點的權值增加vA2 x…

基于容器制作鏡像

一。鏡像基礎 一。基于容器制作鏡像 1. 查看并關聯運行的容器 [ghlocalhost ~]$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4da438fc9a8e busybox …

照顧好自己才能照顧好別人_您必須照顧的5個基本數據

照顧好自己才能照顧好別人I am pretty sure that on your data journey you came across some courses, videos, articles, maybe use cases where someone takes some data, builds a classification/regression model, shows you great results, you learn how that model wo…

matlab數字仿真實驗,DVR+備用電源自動投入的MATLAB數字仿真實驗仿真實驗

一、動態電壓恢復器(DVR)的數字仿真實驗動態電壓恢復器(Dynamic Voltage Restorer&#xff0c;DVR)是一種基于電力電子技術的串聯補償裝置&#xff0c;通常安裝在電源與敏感負荷之間&#xff0c;其作用在于&#xff1a;保證電網供電質量&#xff0c;補償供電電網產生的電壓跌落…

c#,xp系統,Matlab6.5

編譯環境&#xff1a;c#&#xff0c;xp系統&#xff0c;Matlab6.5 新建一個窗體項目&#xff0c;添加matlab引用。 然后試了四種方式調用matlab&#xff1a; 第一種 view plaincopy to clipboardprint?MLApp.MLAppClass matlab new MLApp.MLAppClass(); matlab.Visible 1;…

java script 對象

java script 對象 1.創建方式 1&#xff09;通過字面量的形式創建 例&#xff1b;var stt{x:1,y:2,y:3}; 或&#xff1b;var stt{ x:1, y:2, for:3 } 注意關鍵字必須放到引號中間 2&#xff09;通過new創建對象 例&#xff1a;var new stt(); stt.name 小魚; stt.age 20…

認識數據分析_認識您的最佳探索數據分析新朋友

認識數據分析Visualization often plays a minimal role in the data science and model-building process, yet Tukey, the creator of Exploratory Data Analysis, specifically advocated for the heavy use of visualization to address the limitations of numerical indi…

架構探險筆記10-框架優化之文件上傳

確定文件上傳使用場景 通常情況下&#xff0c;我們可以通過一個form&#xff08;表單&#xff09;來上傳文件&#xff0c;就以下面的“創建客戶”為例來說明&#xff08;對應的文件名是customer_create.jsp&#xff09;&#xff0c;需要提供一個form&#xff0c;并將其enctype屬…

matlab飛行數據仿真,基于MATLAB的飛行仿真

收稿日期: 2005 - 05 - 15   第 23卷  第 06期 計  算  機  仿  真 2006年 06月    文章編號: 1006 - 9348 (2006) 06 - 0057 - 05 基于 MATLAB的飛行仿真 張鐳 ,姜洪洲 ,齊潘國 ,李洪人 (哈爾濱工業大學電液伺服仿真及試驗系統研究所 ,黑龍江 哈爾濱 150001) 摘要:該…

Windows Server 2003 DNS服務安裝篇

導讀-- DNS(Domain Name System&#xff0c;域名系統)是一種組織成層次結構的分布式數據庫&#xff0c;里面包含有從DNS域名到各種數據類型(如IP地址)的映射“貴有恒&#xff0c;何必三更起五更勤;最無益&#xff0c;只怕一日曝十日寒。”前一段時間巴哥因為一些生活瑣事而中止…

正則表達式matlab,正則表達式中一個word的匹配?@MATLAB - 優秀的Free?OS(Linux)版 - 北大未名BBS...

我目前想做的就是判斷一個str是否可以被認為是有效的MATLAB index。最好的方法是直接運行&#xff0c;然后看運行結果或報錯類型&#xff0c;但是我不打算在不知道是什么類型的東西之前運行它&#xff0c;所以可以預先parse一下&#xff0c;簡單判斷是否“長得跟有效的MATLAB i…

arima模型怎么擬合_7個統計測試,用于驗證和幫助擬合ARIMA模型

arima模型怎么擬合什么是ARIMA&#xff1f; (What is ARIMA?) ARIMA models are one of the most classic and most widely used statistical forecasting techniques when dealing with univariate time series. It basically uses the lag values and lagged forecast error…

jQuery禁止Ajax請求緩存

一 現象 get請求在有些瀏覽器中會緩存。瀏覽器不會發送請求&#xff0c;而是使用上次請求獲取到的結果。 post請求不會緩存。每次都會發送請求。 二 解決 jQuery提供了禁止Ajax請求緩存的方法&#xff1a; $.ajax({type: "get",url: "http://www.baidu.com?_&…

python 實例

參考 http://developer.51cto.com/art/201804/570408.htm 轉載于:https://www.cnblogs.com/artesian0526/p/9552510.html