基于Docker搭建LNMP环境

关于什么是docker,建议大家先上网查查有关的用法。如果您不了解,在这篇文章中,您可以简单的理解为他是一个轻量级的虚拟机

一、docker安装mysql
首先,我们从仓库拉取一个MySql的镜像

docker pull mysql:5.6

查询镜像

gongzhiyangdeMacBook-Air:conf gongzhiyang$ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
mysql                            5.6                 b3983abaa3fe        4 weeks ago         302MB

接下来,我们就开始运行并启动一个容器,通过以下命令

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name xy_mysql mysql:5.6

参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射 本地3307端口映射容器3006端口
-e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
–name 容器的名字,随便取,但是必须唯一

接下来我们就可以通过命令docker ps -a 查看我们刚刚创建的容器

gongzhiyangdeMacBook-Air:conf gongzhiyang$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                         NAMES
0f3ce9419dd7        mysql:5.6           "docker-entrypoint.s…"   5 hours ago         Up 38 minutes               0.0.0.0:3307->3306/tcp        xy_mysql

这里我们可以看到我的容器状态的Up状态,表示容器正在运行,并且把可以看到主机和容器的端口映射关系。

接下来,我们就可以进入到我们刚刚创建的容器中,输入命令

docker exec -ti xy_mysql /bin/bash

参数说明
-t 在容器里生产一个伪终端
-i 对容器内的标准输入 (STDIN) 进行交互

容器中默认是没有vim的,所以我们首先要安装vim,需要注意的是安装前记得先执行apt update命令,不然安装会出现问题。
进入到mysql容器后,我们通过创建一个远程可以访问的用户,这样我们就能从别的主机访问到我们的数据库了。

二、docker安装php-fpm

同样首先我们拉取php-fpm的镜像

docker pull php:7.0-fpm

再创建一个phpfpm容器

docker run -d -v /Users/gongzhiyang/www:/var/www/html -p 9000:9000 --link xy_mysql:mysql --name xy_phpfpm php:7.0-fpm 

参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,即主机上的/var/nginx/www/html和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。

这里如果不指定–link参数其实也是可以得,因为容易本身也是有ip的且唯一,所以我们也可以直接利用ip去访问容器。

然后我们在相应的/Users/gongzhiyang/www目录中创建一个index.php的文件。

touch index.php

你在进入容器中,可以查看到相应的文件,因为在创建容器的时候,我们已经把主机中的目录挂载到了容器中去了。

docker exec -ti xy_phpfpm /bin/bash

因为后面我要使用pdo模块进行测试,所以我需要自己安装pdo_mysql模块,在docker容器中可以这样来安装

docker-php-ext-install pdo_mysql

三、docker安装nginx
首先,我们从仓库里去拉取一个nginx镜像

docker pull nginx:1.10.3

接下来运行nginx容器

docker run -d -p 80:80 --name xy_nginx \
 -v /Users/gongzhiyang/www:/var/www/html \
-v /Users/gongzhiyang/www/conf:/etc/nginx/conf.d \
--link xy_phpfpm:phpfpm --name xy_nginx nginx:1.10.3

参数说明:

-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一点非要一模一样,如果不一样在配置nginx的时候需要注意
–name 容器的名字
–link 与另外一个容器建立起联系我

在NGINX中我们挂载了配置文件,在/Users/gongzhiyang/www/conf中创建default.conf文件

server {
    listen       80;
    server_name  gong.gzy;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/html;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    location ~ \.php$ {
        root           /var/www/html;
        fastcgi_index  index.php;
        fastcgi_pass   phpfpm:9000;
	fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
	include        fastcgi_params;
     }                                                                                                                                                
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

在/etc/hosts文件中添加相应的域名

gongzhiyangdeMacBook-Air:etc gongzhiyang$ cat hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost gong.gzy
255.255.255.255	broadcasthost
::1             localhost
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

接下来看一下是否成功
在这里插入图片描述

ps:上面我们都是通过输入一条条命令去创建容器,为了更高效的创建容器,我们可以事先写一个shell脚本,把这些命令打包,通过命令sh ***.sh去执行脚本

猜你喜欢

转载自blog.csdn.net/weixin_36851500/article/details/103093271