详解mac下通过docker搭建LEMP环境
在mac下通过docker搭建LEMP环境境
1.安装virtualbox。由于docker是在lxc环境的容器
2.安装boot2docker,用于与docker客户端通讯
>brewupdate >brewinstalldocker >brewinstallboot2docker
3.初始化boot2docker,也就是在virtualbox上安装一个docker的host环境
boot2dockerinit
此时会下载一个镜像
4.启动虚拟机host
:~$boot2dockerup WaitingforVMandDockerdaemontostart... ....................ooo Started. ToconnecttheDockerclienttotheDockerdaemon,pleaseset: exportDOCKER_HOST=tcp://192.168.59.103:2375 unsetDOCKER_CERT_PATH
这样host环境就启动起来了,根据提示设置环境变量
exportDOCKER_HOST=tcp://192.168.59.103:2375
后boot2docker就能与host环境的docker客户端连接了
5.连接host环境的docker客户端
MacBook-Pro:~$boot2dockerssh ##. ######== ########=== /""""""""""""""""\___/=== ~~~{~~~~~~~~~~~~~~~~/===-~~~ \______o__/ \\__/ \____\______/ ________ ||________||_|___\__||______||________ |'_\/_\/_\|__|__)/_`|/_\/__||//_\'__| ||_)|(_)|(_)||_/__/(_||(_)|(__|<__/| |_.__/\___/\___/\__|_____\__,_|\___/\___|_|\_\___|_| boot2dockerwithVirtualBoxguestadditionsversion4.3.14 boot2docker:1.2.0 master:e75396e-FriAug2206:03:48UTC2014 docker@boot2docker:~$
这样我们就成功登录virtualbox中的host环境,便可以进行docker操作了
安装nginx,php,mysql,基于ubuntu14:04,以下我是通过Dockerfile安装的
这里是DockFile
6.生成mysql镜像
Dockerfile
#LEMPstackasadockercontainer FROMubuntu:14.04 MAINTAINERDanielWatrous#ENVhttp_proxyhttp://proxy.example.com:8080 #ENVhttps_proxyhttps://proxy.example.com:8080 RUNapt-getupdate RUNapt-get-yupgrade #seeddatabasepassword COPYmysqlpwdseed/root/mysqlpwdseed RUNdebconf-set-selections/root/mysqlpwdseed RUNapt-get-yinstallmysql-server RUNsed-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&\ sleep10s&&\ echo"GRANTALLON*.*TOadmin@'%'IDENTIFIEDBY'secret'WITHGRANTOPTION;FLUSHPRIVILEGES"|mysql-uroot--password=secret&&\ echo"createdatabasetest"|mysql-uroot--password=secret #persistence:http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/ EXPOSE3306 CMD["/usr/bin/mysqld_safe"]
mysqlpwdseed
mysql-servermysql-server/root_passwordpasswordsecret mysql-servermysql-server/root_password_againpasswordsecret
进入mysql的Dockefile然后生成一个mysql镜像
dockerbuild-t"local/mysql:v1".
成功后用
dockerimages
查看已生成的镜像
运行mysql镜像,生成一个容器
dockerrun-d--namemysqllocal/mysql:v1
运行起来后,可以用
boot2docker:~$dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES c2332dcad7calocal/mysql:v1"/usr/bin/mysqld_saf26hoursagoUp2seconds3306/tcpmysql,nginx/mysql
来查看正在运行的容器
7.生成nginx,php,这两个用一个dockerfile生成一个镜像
dockerfile
#LEMPstackasadockercontainer FROMubuntu:14.04 MAINTAINERDanielWatrousENVhttp_proxyhttp://proxy.example.com:8080 ENVhttps_proxyhttps://proxy.example.com:8080 #installnginx RUNapt-getupdate RUNapt-get-yupgrade RUNapt-get-yinstallnginx RUNecho"daemonoff;">>/etc/nginx/nginx.conf RUNmv/etc/nginx/sites-available/default/etc/nginx/sites-available/default.bak COPYdefault/etc/nginx/sites-available/default #installPHP RUNapt-get-yinstallphp5-fpmphp5-mysql RUNsed-is/\;cgi\.fix_pathinfo\s*\=\s*1/cgi.fix_pathinfo\=0//etc/php5/fpm/php.ini #preparephptestscripts RUNecho"">/usr/share/nginx/html/info.php ADDwall.php/usr/share/nginx/html/wall.php #addvolumesfordebugandfilemanipulation VOLUME["/var/log/","/usr/share/nginx/html/"] EXPOSE80 CMDservicephp5-fpmstart&&nginx
default一个默认的nginx配置文件
server{ listen80default_server; listen[::]:80default_serveripv6only=on; root/usr/share/nginx/html; indexindex.phpindex.htmlindex.htm; server_namelocalhost; location/{ try_files$uri$uri/=404; } error_page404/404.html; error_page500502503504/50x.html; location=/50x.html{ root/usr/share/nginx/html; } location~\.php${ fastcgi_split_path_info^(.+\.php)(/.+)$; fastcgi_passunix:/var/run/php5-fpm.sock; fastcgi_indexindex.php; includefastcgi_params; } }
wall.php一个用来测试连接mysql的测试文件
\n"; mysql_select_db($dbname)ordie('Couldnotselectdatabase'); //createtable $result=mysql_query($create_table)ordie('CreateTablefailed:'.mysql_error()); //handlenewwallposts if(isset($_POST["title"])){ $result=mysql_query("insertintowall(title,content)values('".$_POST["title"]."','".$_POST["content"]."')")ordie('CreateTablefailed:'.mysql_error()); } //PerformingSQLquery $result=mysql_query($select_wall)ordie('Queryfailed:'.mysql_error()); //PrintingresultsinHTML echo"
$col_value | \n"; } echo"\t
Message:
把这三个文件放在同一目录
进入目录
利用dockerfile生成镜像
dockerbuild-t"local/nginx:v1".
生成成功后查看句是你
boot2docker:~$dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE local/nginxv19489872e2ebb25hoursago250MB local/mysqlv1b70d2e0f7f9c26hoursago351.1MB ubuntu14.049bd07e480c5b3daysago192.7MB
运行
dockerrun-d-p80:80--linkmysql:mysql--namenginxlocal/nginx:v1
这时通过查看正在运行的容器
boot2docker:~$dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 52e430b58579local/nginx:v1"/bin/sh-c'service21hoursagoUp3seconds0.0.0.0:80->80/tcpnginx c2332dcad7calocal/mysql:v1"/usr/bin/mysqld_saf26hoursagoUp11minutes3306/tcpmysql,nginx/mysql
就可以看到nginx和mysql两个运行中的容器,其中nginx通过link连接到了mysql容器,
通过
--linkmysql: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
>boot2dockerdown
然后
>curlhttp://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso>~/.boot2docker/boot2docker.iso >VBoxManagesharedfolderaddboot2docker-vm-namehome-hostpath/Users >boot2dockerup
重新连docker后
先删除原先停止的容器
dockerrmmysql dockerrmnginx
启动容器时挂载我们的目录到nginx的目录中
dockerrun-d-p3306:3306--namemysqlmysqldb dockerrun-d-p80:80-v/Users/lyc/web:/usr/share/nginx/html--linkmysql:mysql--namenginxlocal/nginx:v1
这样就可以修改/Users/lyc/web中的内容来更新/usr/share/nginx/html了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。