使用Docker Compose搭建简易LDNMP环境

前言

Docker如今是云端部署应用的主流技术,可以让开发者一次性定义和部署整个应用的环境与配置,极大地简化了部署和迁移过程。在本文中,我将会演示如何通过Docker-compose来部署一个简单的LDNMP(Linux, Docker, Nginx, MySQL, PHP)环境。

Docker-compose是Docker的一个编排工具,可以通过一个YAML文件来定义多个Docker容器及其配置,然后一键管理(启动,停止,销毁)所有的服务。

1. 安装Docker

假设你在使用基于Debian的Linux系统,可以通过以下命令来安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

PS: 使用此命令安装的高版本docker已无需再安装docker-compose,而是使用docker compose命令替代

然后使用以下命令来检查安装的版本:

docker --version

2. 创建Docker-compose.yml文件

1. 项目结构

 lnmp_docker
    ├── default.conf
    ├── docker-compose.yml
    └── nginx.conf
  • default.conf: 该文件是nginx的server块配置文件,可根据需要修改,也可以使用已有文件替换
  • nginx.conf: 该文件是nginx的http块配置文件,可根据需要修改,也可以使用已有文件替换
  • docker-compose.yml: 该文件为docker编排的配置文件,其中配置了个容器的docker网络和各容器的版本及初始化信息

文件展示

nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    server_tokens off;

    open_file_cache max=1024 inactive=20s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;

    limit_req_zone $binary_remote_addr zone=example_zone:20m rate=20r/s;
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:20m max_size=512m inactive=30m;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

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

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  _;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;

        limit_req zone=example_zone burst=10;
        limit_rate 10k;

    }

    #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           /usr/share/nginx/html;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        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;
    }
}

docker-compose.yml

见下方 项目构建 一栏

2. 项目仓库

这里提供一个代码仓库的链接,方便大家使用

https://gitea.balabi.top/Laizer/lnmp_docker.git

克隆命令:

git clone https://gitea.balabi.top/Laizer/lnmp_docker.git

3. 项目构建

当然大家也可以使用以下流程进行手动创建

在你的工作目录下创建一个名为docker-compose.yml的文件,并打开它。

vim docker-compose.yml

然后在文件中添加以下内容:

version: '3'
services:
# nginx
  web:
    container_name: nginx
    image: nginx:1.24.0-alpine
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./www/html:/usr/share/nginx/html
    depends_on:
      # - redis
      - db
      - php
    networks:
      - lnmp

  # mysql官方镜像版本
  # db:
  #   container_name: mysql
  #   image: mysql:8.0.35
  #   restart: unless-stopped
  #   ports:
  #     - 3306:3306
  #   volumes:
  #     - ./mysql:/var/lib/mysql
  #   environment:
  #     - TZ=Asia/Shanghai
  #     - MYSQL_ROOT_PASSWORD=123456
  #     - MYSQL_DATABASE=demodb
  #     - MYSQL_USER=demouser
  #     - MYSQL_PASSWORD=123456
  #   networks:
  #     - lnmp

  # 第三方数据库版本,数据库为mariadb,限制了内存占用
  db:
    container_name: mariadb
    image: yobasystems/alpine-mariadb
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=demodb
      - MYSQL_USER=demouser
      - MYSQL_PASSWORD=123456
    expose:
      - "3306"
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - lnmp
  # php
  php:
    container_name: php
    image: php:fpm-alpine3.18
    command: sh -c "/usr/local/bin/docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable mysqli pdo_mysql && php-fpm"  # 安装php扩展,可自定义加减
    ports:
      - 9000:9000
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./www/html:/usr/share/nginx/html
    networks:
      - lnmp

    # redis如需启用则解除注释

    #  redis:
    #    container_name: redis
    #    image: redis:7.2.3-alpine
    #    restart: unless-stopped
    #    environment:
    #      - TZ=Asia/Shanghai
    #    volumes:
    #      - ./redis/data:/data
    #    networks:
    #      - lnmp

networks:
  lnmp:
    name: lnmp

这个文件定义了三个服务:web(Nginx),php(PHP)和db(MySQL)。每个服务都有自己的配置信息。

3. 启动和停止服务

现在你可以使用以下命令来启动你的应用:

docker compose up

可以看到,Docker compose将依次启动db,php,web三个服务,并且如果你在浏览器中访问 http://localhost ,你应该可以看到Nginx的欢迎页面。

当你要停止你的应用时,使用以下命令:

docker compose down

现在你可以看到,使用docker-compose来搭建LDNMP环境真的非常简单方便。之后,你还可以使用docker-compose再添加更多的服务(如Redis,MongoDB等),并通过修改配置文件来调整服务的配置。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容