前言
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等),并通过修改配置文件来调整服务的配置。
暂无评论内容