Docker搭建LNMP环境

本教程详细介绍了如何在Ubuntu环境下使用Docker搭建LNMP(Nginx、PHP、PostgreSQL)环境,包括Docker的安装、镜像源更换、容器的启动和停止,以及使用docker-compose管理多容器服务。通过实践,读者将掌握Docker部署LNMP的基本流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章为腾讯云免费实验的相关笔记,具体实验地址:Docker 搭建 LNMP 环境 - 腾讯云实验室 (tencent.com)

相关概念

Docker:是一个开源的应用级别的虚拟化工具,能够让您轻松而优雅地部署多种服务,无需因为开发环境与部署环境的依赖问题而焦头烂耳。

LNMP:LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP。

本实验将介绍 Docker 简单用法,并带领大家在 Ubuntu 环境下(其他平台类似)使用 Docker 完成 搭建 LNMP 环境 这一目标。

由于安全性问题,一般情况下Docker的所有命令均需要root权限,因此本文所有Docker有关的命令均使用sudo完成。

安装 Docker

Docker 的安装过程十分的简单:

mkdir ~/docker && cd ~/docker &&
sudo apt-get -y install docker.io

完成后,您可以通过docker version来查看 Docker 的版本信息,docker help来查看 Docker 的帮助文档。

更换镜像源

Docker 工作的基础即是镜像。您可以认为一个镜像即是一个独立的由应用组成的虚拟机。为此,docker 建立了 Docker Hub 来存贮镜像(就像GitHub一样)。

但是由于网络原因, Docker Hub 的访问速度过慢,推荐您更换为国内的镜像源地址。这里我们采用 腾讯云 Docker 镜像加速,请输入下面的命令:

sudo su -
cat >> /etc/docker/daemon.json <<- EOF
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
systemctl restart docker
exit

下载需要用到的 Docker 镜像

Docker 使用docker pull <镜像>来完成镜像的下载工作,而我们本次实验需要使用到的镜像有。

  • Nginx
  • PHP
  • PostgreSQL

您可以通过以下相关命令获取这几个软件的镜像。您也随时可以使用sudo docker image ls来查看已下载的镜像。

下载 Nginx 镜像

运行以下命令:

sudo docker pull nginx:alpine

下载 PHP 镜像

运行以下命令:

sudo docker pull php:7-fpm-alpine

下载 PostgreSQL 镜像

您可能注意到了,我们使用 PostgreSQL 代替了 MySQL 。两者在使用上的差异并不大,但是从大小上看, PostgreSQL 更适合于容器化,因此我们选择了它。 可观看视频了解 PostgreSQL介绍

运行以下命令:

sudo docker pull postgres:alpine

 

启动 Nginx

本节的目的是为了让您尝试使用docker run来启动容器(启动后的镜像即为容器)。此处只介绍其主要用法。

启动容器

您可以使用以下命令来启动容器:

sudo docker run --rm -d -p 80:80 --name nginx nginx:alpine
  • 这个命令中涉及到的参数有:
    • --rm:表示这个容器执行完后会被直接销毁。
    • --name:指定这个容器的名称。
    • -d:表示这个容器会在后台运行。
    • -p:表示开放容器的80端口到主机的80端口。
    • -v:表示将nginx的配置文件挂载到容器的对应目录下。

停止容器

完成后您应该可以在对应的网址(http://175.178.214.43/)上看到 Nginx 的默认欢迎界面了。

您可以使用以下命令来停止一个容器:

sudo docker stop <容器ID或容器名称>

容器ID就是您在运行上面那个命令时显示的一串字符,或者您可以使用sudo docker container ls来查看所有容器及其ID。 对于使用容器ID停止容器,您可以只输入前几个字符,Docker会自动匹配剩下的字符。 但是对于使用容器名称停止容器,您必须完整地输入容器名称。

例如:sudo docker stop 91b6

请尝试停止Nginx:

sudo docker stop nginx

 

启动 LNMP

由于 LNMP 共由3个容器组成,单个启动过于麻烦,推荐您使用 docker-compose 管理并启动它们。

安装 docker-compose

docker-compose 是 Docker 的多个服务部署工具,以方便地同时启动多个容器。

您可以使用以下命令方便地安装它。

sudo apt-get install -y python-pip && sudo pip install docker-compose

创建 docker-compose 的配置文件

对于每一个您希望使用 docker-compose 来启动的项目,您都应该在 该项目的目录下 配置 docker-compose.yml

创建docker-compose.yml文件

touch ~/docker/docker-compose.yml

 

编辑 docker-compose 的配置文件

点击打开 docker-compose.yml 文件进行编辑,参考内容如下:

docker-compose.yml

version: "3"
services:

  Nginx:
    image: nginx:alpine
    ports:
      - 80:80
    volumes:
      - ./web:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

  PHP:
    image: undefined01/php:7-fpm-alpine
    volumes:
      - ./web:/var/www/html:rw

  Database:
    image: postgres:alpine
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "rootroot"
    volumes:
      - ./data:/var/lib/postgresql/data:rw

记得保存!

保存方法:Windows 系统点击 ctrl+sMac OS 点击 command+s 保存

  • 这个配置文件中涉及到的参数有:
    • version:表示这个配置文件使用第三套标准。
    • services:表示需要启动的服务(容器)列表。
  • 对于每一个服务,又有:
    • image:表示该服务使用的镜像。
    • ports:表示该服务开放的端口。
    • volumes:表示将某目录或文件挂载到容器的相应位置上,后面的rorw表示对于容器是否可读写。此处挂载了配置文件、数据库和网站代码。
    • enviornment:设置该容器的环境变量。此处通过环境变量的形式设置数据库的账号和密码。

创建 Nginx 的配置文件

创建nginx.conf文件

touch ~/docker/nginx.conf

编辑 Nginx 的配置文件

为了让 Nginx 能够将请求顺利的转交给 PHP 处理,我们需要更改 Nginx 的配置文件。

点击打开 nginx.conf 文件进行编辑,参考内容如下:

nginx.conf

如何更改容器里的配置文件?

很简单,我们只需要在本地编辑好后挂载到容器中去(会覆盖容器中的文件),前面小节中预留的nginx.conf就是为此。

如何让 Nginx 容器与 PHP 容器通讯? 您可能注意到了下面提供参考的 nginx.conf 里用到了PHP:9000这样的地址。没错,对于由 docker-compose 启动的所有容器,都会自动加入由 docker 维护的局域网中,并且会自动为其他容器将某容器的名称(如 PHP )解析成相应的局域网IP。 如果您有兴趣可以查阅更多的资料。

 

使用 docker-compose 启动服务

使用以下命令来启动服务:

sudo docker-compose up -d

可以使用以下命令来查看启动服务:

sudo docker container ls

 

编辑权限

以上命令都使用了root权限,因此您如果想要修改其中的内容可能不太方便。您可以使用以下命令来获取编辑权限。

sudo chmod -R 777 ./data ./web

 

创建index.php文件

touch ~/docker/web/index.php

 

编辑index.php文件

点击打开 web/index.php 进行编辑, 参考内容如下:

index.php

<?php
phpinfo();
?>

如果一切顺利的话,您就可以在http://175.178.214.43/index.php看到 php 的相关信息了。

 

测试 PostgreSQL

您还记得密码吗?就在 docker-compose 中配置了。因此在实际环境中您一定要注意该文件的访问权限。

至于 PostgreSQL 数据库的地址嘛,就是这个容器的名称(此处是 Database )。您可以把它想象为一个域名就好了。

创建test.php文件

touch ~/docker/web/test.php

 

编辑test.php文件

点击打开 web/test.php 进行编辑, 参考内容如下:

test.php

<?php
$dbconn = pg_connect('host=Database user=postgres password=rootroot') or die('Could not connect: ' . pg_last_error());
pg_query('CREATE TABLE IF NOT EXISTS test ( tester INT )');

pg_query('INSERT INTO test VALUES (0)');
$res = pg_query('SELECT * FROM test') or die('Query failed: ' . pg_last_error());
$num = pg_num_rows($res);
echo "You have visited this site $num times";

pg_free_result($res);
pg_close($dbconn);
?>

 

使用 docker-compose 停止服务

如果一切顺利的话,您就可以在http://175.178.214.43/test.php 看到一个网页计数器。

不断刷新它试试看。

您可以使用以下命令来停止服务,它会自动销毁相应的容器:

sudo docker-compose down

用命令查看 docker 目录:

 ls  -la ~/docker

您的数据库已经保存在当前 docker 目录下的 data 文件夹中了,用命令查看:

ls -lf ./data

什么?销毁?别担心,迁移到任何一台新的主机,只需要将该目录打包带走就行了! 不信?您可以重新启动上面的示例,刷新 test.php 这个计数网页, 看看数据库是否被保存了下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值