1.生成MySQL容器

注:因为要将php链接到mysql,所以我们先生成mysql容器

为了方便快捷,并且只是学习使用,我们就使用官方的mysql镜像,首先将镜像源设置国内镜像源


# vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}
systemctl restart docker

拉取官方mysql镜像

# 默认最新版本
docker pull mysql 

创建mysql容器

# 1.创建mysql文件目录
cd /docker-study/mysql
# 2. 创建mysql容器
docker run \
--name mysql \
-p 3308:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v "$PWD"/data:/var/lib/mysql \
-v "$PWD"/docker_study/dockerdocker-lnmp/mysql/conf:/etc/mysql/conf.d \
-d mysql
  • --name 容器名字
  • -p 映射端口
  • -e 变量
  • -v 关在目录
  • -d 守护进程
    docker ps

docker ps

2.生成php容器

cd /docker-study/php
# 1.拉取官方镜像
docker pull php:7.2-fpm
# 2.创建php容器
docker run -d \
--name php \
-p 9001:9000 \
-v "$PWD"/etc:/usr/local/etc/php \
-v "$PWD"/www/:/var/www/html:ro \
--link mysql \
php:7.2-fpm

3.生成nginx容器

cd /docker-study/nginx
# 1.拉取官方镜像
docker pull nginx
# 2.创建nginx容器
docker run -d \
--name nginx \
-p 8096:80 \
-v "$PWD"/www:/home/www/ \
-v "$PWD"/www:/usr/share/nginx/html \
-v "$PWD"/nginx.conf:/etc/nginx/nginx.conf \
-v "$PWD"/logs:/var/log/nginx \
-v "$PWD"/conf.d:/etc/nginx/conf.d \
--link php \
nginx

注:这里有个坑,nginx 启动挂载目录报错
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused

因为这里自动将配置文件创建为目录了

解决方法

  1. 换一种方法不启动 -v "$PWD"/nginx.conf:/etc/nginx/nginx.conf 这个
    启动之前先把刚刚已经启动的容器删除 docker rm -f nginx

然后记得删除掉/dcoker-study/nginx/nginx.conf这个目录

docker run -d \
--name nginx \
-p 8096:80 \
-v "$PWD"/www:/home/www/ \
-v "$PWD"/www:/usr/share/nginx/html \
-v "$PWD"/logs:/var/log/nginx \
--link php \
nginx

2.docker exec -it nginx /bin/bash (进入容器 获取文件)
3.cd /etc/nginx/ (这里主要获取配置文件路径的)
4.exit
5.然后进入cd /dcoker-study/nginx/ 里面,docker cp nginx:/etc/nginx/nginx.conf . 然后再次启动就好了
6.docker rm -f nginx,完后重新执行

docker run -d \
--name nginx \
-p 8096:80 \
-v "$PWD"/www:/home/www/ \
-v "$PWD"/www:/usr/share/nginx/html \
-v "$PWD"/nginx.conf:/etc/nginx/nginx.conf \
-v "$PWD"/logs:/var/log/nginx \
-v "$PWD"/conf.d:/etc/nginx/conf.d \
--link php \
nginx

没有报错,创建ngixn容器成功

4.配置nginx

vim /docker-study/nginx/nginx.conf

server {
        #根据映射的端口确定
        listen       80;
        listen       [::]:80;
        server_name  localhost;
        root         /docker-study/php/www/;
        index  index.php index.html index.htm;

        location ~ \.php$ {
                fastcgi_pass   php:9000;
                fastcgi_index  index.php;
                #此处 $fastcgi_script_name之前必须为/var/www/html
                fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
                include        fastcgi_params;
        }
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

5.在/docker-study/php/www下面新建index.php,写入内容

cd /docker-study/php/www
touch index.php

<?php
    phpinfo();

6.访问:ip:8096/index.php

访问页面
好了,使用docker快速搭建lnmp环境成功