翼度科技»论坛 云主机 服务器技术 查看内容

docker搭建lnmp环境的实现步骤

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
近期闲来无事,用公司电脑部署了一套环境,记录一下部署经过和踩的坑。

Nginx


1、拉取镜像,需要使用镜像创建容器

拉取的Nginx版本可以自己设,我是用的nginx:latest
  1. // 拉取镜像
  2. docker pull nginx:1.18.0

  3. 1.18.0: Pulling from library/nginx
  4. f7ec5a41d630: Pull complete
  5. 0b20d28b5eb3: Pull complete
  6. 1576642c9776: Pull complete
  7. c12a848bad84: Pull complete
  8. 03f221d9cf00: Pull complete
  9. Digest: sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0
  10. Status: Downloaded newer image for nginx:1.18.0
  11. docker.io/library/nginx:1.18.0

  12. // 安装完成后可以使用命令查看安装了哪些镜像
  13. docker images

  14. REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
  15. nginx             latest    605c77e624dd   2 years ago   141MB
复制代码
2、宿主机创建Nginx所需的映射文件

这个需要提前创建,因为如果直接使用docker命令创建容器会报错本地没有映射文件
先把nginx所需目录创建了
  1. [root@localhost ~]# mkdir -pv /lnmp/nginx/{conf/conf.d,data,logs,html}
  2. mkdir: created directory ‘/lnmp'
  3. mkdir: created directory ‘/lnmp/nginx'
  4. mkdir: created directory ‘/lnmp/nginx/conf'
  5. mkdir: created directory ‘/lnmp/nginx/conf/conf.d'
  6. mkdir: created directory ‘/lnmp/nginx/data'
  7. mkdir: created directory ‘/lnmp/nginx/logs'
  8. mkdir: created directory ‘/lnmp/nginx/html'

  9. [root@localhost ~]# ls /lnmp/nginx/
  10. conf  data  logs html
  11. [root@localhost ~]#
复制代码
在conf中创建nginx.conf,conf.d中也需要一个default.conf,这些后面映射都会用到,创建好nginx配置文件后打开将默认配置存进去,因为在映射时本地的这个文件会将容器中的文件覆盖掉(当然你也可以先创建容器,将容器中的nginx.conf复制出来)
  1. user  nginx;
  2. worker_processes  1;

  3. error_log  /var/log/nginx/error.log warn;
  4. pid        /var/run/nginx.pid;

  5. events {
  6.     worker_connections  1024;
  7. }

  8. http {
  9.     include       /etc/nginx/mime.types;
  10.     default_type  application/octet-stream;

  11.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  12.                       '$status $body_bytes_sent "$http_referer" '
  13.                       '"$http_user_agent" "$http_x_forwarded_for"';

  14.     access_log  /var/log/nginx/access.log  main;

  15.     sendfile        on;
  16.     #tcp_nopush     on;

  17.     keepalive_timeout  65;

  18.     #gzip  on;

  19.     include /etc/nginx/conf.d/*.conf;
  20.         server {
  21.                 listen 80;
  22.                 server_name localhost;
  23.                 root /usr/share/nginx/html;
  24.                 index index.php index.html index.htm;

  25.                 location / {
  26.                         try_files $uri $uri/ /index.php?$query_string;
  27.                         autoindex on;
  28.                 }
  29.                
  30.                 location ~ \.php$ {
  31.             // 这里是我踩的一个大大的坑
  32.             // 如果不指定php-fpm运行目录,会为空导致nginx无法解析php文件
  33.             // 所以这里必须要明确指定运行根目录!!!
  34.                         root           /var/www/html;
  35.                         fastcgi_pass   php81-fpm:9000;
  36.                         fastcgi_index  index.php;
  37.                         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  38.                         include        fastcgi_params;
  39.                 }


  40.                 error_log /var/log/nginx/error.log;
  41.                 access_log /var/log/nginx/access.log;
  42.         }

  43. }
复制代码
3、创建容器

这里有一个点需要注意,在创建之前我们需要先创建一个 Docker 网络,以便 Nginx、MySQL 和 PHP 容器可以相互通信
  1. docker network create lnmp-network
复制代码
之后创建容器,创建成功后可以使用ps命令查看有哪些容器
  1. docker run -it --name nginx --network lnmp-network -p 80:80 -v D:/lnmp/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v D:/lnmp/nginx/conf/conf.d:/etc/nginx/conf.d -v D:/lnmp/nginx/html:/usr/share/nginx/html -v D:/lnmp/nginx/logs:/var/log/nginx -d nginx:latest


  2. docker ps
  3. CONTAINER ID   IMAGE                    COMMAND                   CREATED        STATUS             PORTS
  4.                 NAMES
  5. a9af314321d6   nginx:latest             "/docker-entrypoint.…"   25 hours ago   Up 57 minutes      0.0.0.0:80->80/tcp                  nginx
复制代码
命令中的镜像名称和地址需要改成自己的,我这里只映射了80端口,443端口也可以一起映射,有需要的话就加上。

Mysql

没什么好说的,mysql还是一样的流程,上才艺
  1. #拉取Mysql镜像,这里使用5.7版本
  2. [root@localhost ~]# docker images
  3. REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
  4. nginx        1.18.0    c2c45d506085   12 months ago   133MB
  5. [root@localhost ~]# docker pull  mysql:5.7.32           
  6. 5.7.32: Pulling from library/mysql
  7. a076a628af6f: Pull complete
  8. f6c208f3f991: Pull complete
  9. 88a9455a9165: Pull complete
  10. 406c9b8427c6: Pull complete
  11. 7c88599c0b25: Pull complete
  12. 25b5c6debdaf: Pull complete
  13. 43a5816f1617: Pull complete
  14. 7065aaa2655f: Pull complete
  15. b4bc531db40f: Pull complete
  16. 8c3e9d7c9815: Pull complete
  17. fadfb9734ed2: Pull complete
  18. Digest: sha256:e08834258fcc0efd01df358222333919df53d4a0d9b2a54da05b204b822e3b7b
  19. Status: Downloaded newer image for mysql:5.7.32
  20. docker.io/library/mysql:5.7.32
  21. [root@localhost ~]# docker images
  22. REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
  23. nginx        1.18.0    c2c45d506085   12 months ago   133MB
  24. mysql        5.7.32    cc8775c0fe94   15 months ago   449MB
  25. [root@localhost ~]#

  26. #创建数据目录
  27. [root@localhost ~]# mkdir -pv /lnmp/mysql/{conf,data,logs}
  28. mkdir: 已创建目录 "/lnmp/mysql"
  29. mkdir: 已创建目录 "/lnmp/mysql/conf"
  30. mkdir: 已创建目录 "/lnmp/mysql/data"
  31. mkdir: 已创建目录 "/lnmp/mysql/logs"
  32. [root@localhost ~]# ls /lnmp/mysql/
  33. conf  data  logs
  34. [root@localhost ~]#

  35. #启动mysql容器
  36. [root@localhost ~]# docker ps
  37. CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
  38. d4c36a62dde4   nginx:1.18.0   "/docker-entrypoint.…"   18 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx
  39. [root@localhost ~]# docker run -d -p 3306:3306 --name mysql \
  40. > -v /lnmp/mysql/conf:/etc/mysql/conf.d \
  41. > -v /lnmp/mysql/logs:/logs \
  42. > -v /lnmp/mysql/data:/var/lib/mysql \
  43. > -e MYSQL_ROOT_PASSWORD=root \
  44. > mysql:5.7.32
  45. 55cc5694695d26327abee0580af2cbcaf28c49f33da8da24aa50c5b049946e01
  46. [root@localhost ~]# docker ps
  47. CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
  48. 55cc5694695d   mysql:5.7.32   "docker-entrypoint.s…"   5 seconds ago    Up 3 seconds    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
  49. d4c36a62dde4   nginx:1.18.0   "/docker-entrypoint.…"   18 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx
  50. [root@localhost ~]#
复制代码
PHP

其实也还一样,拉取镜像
  1. docker pull nfqlt/php81-fpm:latest
复制代码
创建映射目录、文件
  1. cd /lnmp/php-fpm
  2. mkdir logs
  3. touch php.ini
  4. touch php-fpm.conf
复制代码
当然了,php.ini这种配置文件我是万万不会去弄的,所以我创建了一个临时容器,cp了出来哈哈,感兴趣的也可以这么操作,我把命令贴出来
  1. // 启动容器(不映射 php.ini 文件)
  2. docker run -d --name php81-fpm --network lnmp-network -v D:/lnmp/nginx/html:/var/www/html -v D:/lnmp/php-fpm/logs:/var/log/php-fpm nfqlt/php81-fpm:latest

  3. // 复制容器中的 php.ini 文件到本地
  4. docker cp php81-fpm:/etc/php/8.1/fpm/php.ini D:/lnmp/php-fpm/php.ini

  5. // 停止并删除原容器
  6. docker stop php81-fpm
  7. docker rm php81-fpm
复制代码
然后,熟悉的环节,创建容器
  1. docker run -d --name php81-fpm --network lnmp-network -p 9000:9000 -v D:/lnmp/nginx/html:/var/www/html -v D:/lnmp/php-fpm/php.ini:/etc/php/8.1/fpm/php.ini -v D:/lnmp/php-fpm/php-fpm.conf:/etc/php/8.1/fpm/php-fpm.conf -v D:/lnmp/php-fpm/logs/error.log:/tmp/log/error.log nfqlt/php81-fpm:latest
复制代码
注:D:/lnmp/nginx/html:/var/www/html映射这个的时候是使用映射nginx的运行目录(D:/lnmp/nginx/html)的地址来映射,/var/www/html这个是我们上面提到的我踩的大坑,需要设置php运行根目录,如果搞错了就会导致无法解析php文件!!
到此这篇关于docker搭建lnmp环境的实现步骤的文章就介绍到这了,更多相关docker搭建lnmp环境内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/323542emq.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具