docker-comple 部署lnmp

本文详细记录了如何使用Docker Compose在Linux环境中搭建LNMP(Nginx、MySQL、PHP-FPM)服务,包括创建Dockerfile、docker-compose.yml文件,下载并安装docker-compose,配置PHP、MySQL及Nginx,并实现服务的数据持久化。最后进行了服务的启动、测试和验证。

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

安装docker-comple

[root@docker ~]# mkdir -p compose_lnmp/php
[root@docker ~]# touch compose_lnmp/docker-compose.yml
[root@docker ~]# touch compose_lnmp/php/Dockerfile

[root@docker ~]# wget -c  https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64
[root@docker ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
[root@docker ~]# chmod  a+x /usr/local/bin/docker-compose 
[root@docker ~]# docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6

创建相应的文件和目录

[root@docker ~]# tree compose_lnmp/
compose_lnmp/
├── docker-compose.yml
└── php
    └── Dockerfile

1 directory, 2 files

编辑php/Dockerfile

[root@docker ~]# vim compose_lnmp/php/Dockerfile
FROM php:7.0-fpm
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libmemcached-dev \
        zlib1g-dev \
        libcurl4-openssl-dev \
        libxml2-dev \
        --no-install-recommends && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install -j$(nproc) \
        iconv mcrypt gettext curl mysqli pdo pdo_mysql zip \
        mbstring bcmath opcache xml simplexml sockets hash soap \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

CMD ["php-fpm", "-F"]

编写docker-compose.yml

[root@docker ~]# vim compose_lnmp/docker-compose.yml
version: "3"

services:
  mysql:
    hostname: mysql
    restart: always
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - mysql-config:/etc/mysql
      - mysql-log:/var/log/mysql
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_USER: user
      MYSQL_PASSWORD: user123
  php:
    hostname: php
    restart: always
    container_name: php
    build:
      context: ./php
      dockerfile: Dockerfile
    ports:
      - "9000:9000"
    links:
      - mysql:mysql
    volumes:
      - nginx-html:/var/www/html
      - php-config:/usr/local/etc
  nginx:
    hostname: nginx
    restart: always
    container_name: nginx
    image: nginx
    ports:
      - "80:80"
      - "443:443"
    links:
      - "php:php"
    volumes:
      - nginx-config:/etc/nginx
      - nginx-log:/var/log/nginx
      - nginx-html:/usr/share/nginx/html

volumes:
  mysql-config:
  mysql-log:
  mysql-data:
  nginx-html:
  php-config:
  nginx-config:
  nginx-log:

启动服务

cd compose_lnmp

docker-compose up -d 启动
docker-compose restart 重启

查看容器

[root@docker compose_lnmp]# docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS                    PORTS                                                                      NAMES
f8c18829cabf   nginx                                "/docker-entrypoint.…"   11 seconds ago   Up 9 seconds              0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   nginx
72176d819d74   compose_lnmp_php                     "docker-php-entrypoi…"   3 minutes ago    Up 3 minutes              0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                  php
ed1f8854128f   mysql                                "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes              0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                       mysql

数据化持久目录

[root@docker compose_lnmp]# docker volume ls 
DRIVER    VOLUME NAME
local     03c7770fea6d9350f979847be29f2b8146303fbd48116618616628b3b77221a0
local     4e5fed374feab2035464fad478c611db71aa6e1174065fe31b8c4626c7c08ca7
local     7fc541df71d8c55675f12ecf92e219b3f2353b54533a10701443bb3fa17b6d71
local     8c79a13f19fe88e0ece1013cc5bc28bca0433bda2d61c3e67dac4b6f5f61bff8
local     9cc1ed86d97c0dc679e8bc41ec7c4b0d96ced9562b64e42c3583b1d2e854bafc
local     16fe9d63e0550065f430ac23bfebc44d90eec5905c7e4c30761aaa8372d146c8
local     401f58ed1ca49d98ad53ac052adda6865a32e3ba82135c869a490d469b6d6f6f
local     1397ed5ef8e78fb5fc52b8ffb4c4dce37ed809e8baedacccec43af05f7e5cd5b
local     75855c7759d263a7bd9b6ef1ecf5481e828c46d083e55eba199ebb780da57bfd
local     907641a94d3a3c4d83e4978a43d9f64575cd4457dfb2b9cf9374556002084f48
local     9872933f652693474acdb9d723376abe90b429801aa6ce1e398face00b1e708d
local     a2e26dc94e5e02c4c69789c95a75d8d3d5f26fc7d206701ac9606620797949db
local     compose_lnmp_mysql-config #数据库配置文件
local     compose_lnmp_mysql-data	#数据库数据文件
local     compose_lnmp_mysql-log	#数据库日志
local     compose_lnmp_nginx-config #nginx配置文件
local     compose_lnmp_nginx-html	#nginx web目录
local     compose_lnmp_nginx-log	#nginx日志目录
local     compose_lnmp_php-config	#php配置文件
local     e7d2f4821be653b47497c2670e1d33b691ace4c39f279057efda3ae91a3d21c0

配置php

#默认的php.ini文件是没有的,需要手动把模板配置文件复制为php.ini
[root@docker ~]# cd /var/lib/docker/volumes/compose_lnmp_php-config/_data/php
[root@docker php]# cp php.ini-production php.ini

修改php.ini时区
[root@docker php]# vim php.in
date.timezone = Asia/Shanghai

配置nginx

[root@docker ~]# vim /var/lib/docker/volumes/compose_lnmp_nginx-config/_data/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;     #此处添加index.php

#取消注销并进行修改
    location ~ \.php$ {
        root           html;
        fastcgi_pass   php:9000;   #php为容器的名字
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
        include        fastcgi_params;
    }

mysql测试

[root@docker ~]# docker container exec -it mysql bash
root@mysql:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.26    |
+-----------+
1 row in set (0.01 sec)

mysql> 

验证php

[root@docker ~]# vim /var/lib/docker/volumes/compose_lnmp_nginx-html/_data/index.php
<?php phpinfo();

重启所有容器

[root@docker ~]# cd compose_lnmp
[root@docker compose_lnmp]# docker-compose restart
Restarting nginx ... done
Restarting php   ... done
Restarting mysql ... done
[root@docker compose_lnmp]# ss -antl
State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port       Process       
LISTEN       0            128                      0.0.0.0:80                    0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:22                    0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:443                   0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:9000                  0.0.0.0:*                        
LISTEN       0            128                      0.0.0.0:3306                  0.0.0.0:*                        
LISTEN       0            128                    127.0.0.1:1514                  0.0.0.0:*                        
LISTEN       0            128                         [::]:80                       [::]:*                        
LISTEN       0            128                         [::]:22                       [::]:*                        
LISTEN       0            128                         [::]:443                      [::]:*                        
LISTEN       0            128                         [::]:9000                     [::]:*                        
LISTEN       0            128                         [::]:3306                     [::]:*        

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值