详解mac下通过docker搭建LAMP环境

2025-05-27 0 32

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

1.安装virtualbox。由于docker是在lxc环境的容器

2.安装boot2docker,用于与docker客户端通讯

?

1

2

3
> brew update

> brew install docker

> brew install boot2docker

3.初始化boot2docker,也就是在virtualbox上安装一个docker的host环境

?

1
boot2docker init

此时会下载一个镜像

4.启动虚拟机host

?

1

2

3

4

5

6

7

8
:~$ 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环境就启动起来了,根据提示设置环境变量

?

1
export DOCKER_HOST=tcp://192.168.59.103:2375

后boot2docker就能与host环境的docker客户端连接了

5.连接host环境的docker客户端

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
# 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

?

1

2
mysql-server mysql-server/root_password password secret

mysql-server mysql-server/root_password_again password secret

进入mysql的Dockefile然后生成一个mysql镜像

?

1
docker build -t "local/mysql:v1" .

成功后用

?

1
docker images

查看已生成的镜像

运行mysql镜像,生成一个容器

?

1
docker run -d --name mysql local/mysql:v1

运行起来后,可以用

?

1

2

3
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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
# 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配置文件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57
<?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生成镜像

?

1
docker build -t "local/nginx:v1" .

生成成功后查看句是你

?

1

2

3

4

5
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

运行

?

1
docker run -d -p 80:80 --link mysql:mysql --name nginx local/nginx:v1

这时通过查看正在运行的容器

?

1

2

3

4
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容器,

通过

?

1
--link mysql:mysql

命令,把mysql容器的地址加入到了nginx父容器的host文件中,此后,通过访问别名mysql,就可以访问到数据库了。

浏览器访问:192.168.59.103/wall.php,就可访问刚搭好的web服务器

8.持载目录到容器中

我们希望持载一个本地目录到容器中,以后存放可能需要修改的web内容,这里我们通过

?

1
-v /Users/lyc/web:/usr/share/nginx/html

把的本地目录到容器中,存放web目录内容,这样就可以把wall.php之类的web文件放在/Users/lyc/web目录,供容器访问

但是因为mac环境下host主机为virtualbox,因此我们先要绑定mac下的目录到虚拟机中

首先停止boot2docker

?

1
> boot2docker down

然后

?

1

2

3

4
> 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后

先删除原先停止的容器

?

1

2
docker rm mysql

docker rm nginx

启动容器时挂载我们的目录到nginx的目录中

?

1

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

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

原文链接:http://www.cnblogs.com/lycokcc/p/4152034.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 详解mac下通过docker搭建LAMP环境 https://www.kuaiidc.com/68294.html

相关文章

发表评论
暂无评论