Linux CentOS使用Docker搭建laravel项目环境(实践案例详细说明)

一、安装docker

bash 复制代码
# 1、更新系统软件包:
sudo yum update

# 2、安装Docker依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 3、添加Docker的yum源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 4、安装Docker引擎:
sudo yum install -y docker-ce

# 5、启动Docker服务:
sudo systemctl start docker
bash 复制代码
# docker常用命令
 
# 查看版本信息
docker --version
 
# 查看 Docker 的详细信息
docker info
 
# 查看当前正在运行的 Docker 容器
docker ps
 
# 进入容器查看
docker exec -it <容器名称或ID> /bin/bash

二、安装docker-composer

bash 复制代码
# 1、下载最新版本的Docker Compose:
curl -L https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 或者: 
curl -L http://mirror.azure.cn/docker-toolbox/linux/compose/v2.24.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
bash 复制代码
# 2、添加可执行权限:
sudo chmod +x /usr/local/bin/docker-compose

三、写docker-composer.yml配置文件

docker-compose.yml 文件是用于定义和配置多容器 Docker 应用程序的文本文件。它允许你通过一个文件来定义、配置和管理多个 Docker 容器,这些容器可以相互通信并一起运行。

找一个目录,写你的docker配置,我这边是在/home

bash 复制代码
# 进入目录
cd /home
# 创建 docker-comser目录
mkdir docker-composer 

# 进入docker-composer
cd docker-composer

# 创建dockoer-compser.yml
vi dockoer-compser.yml

以下是我写的一个dockoer-compser.yml示例:

bash 复制代码
version: '3'
# 表示使用 Docker Compose 的版本 3 语法
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
     # 开启80和443的映射
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl
      - ./nginx/logs:/var/log/nginx
      # 将主机当前目录下的 nginx/conf.d 目录与容器内的 /etc/nginx/conf.d 目录进行映射,用于共享 Nginx 的配置文件
      # 将主机当前目录下的 nginx/ssl 目录与容器内的 /etc/nginx/ssl 目录进行映射,用于共享 SSL 证书文件
      # 将主机当前目录下的 nginx/logs 目录与容器内的 /var/log/nginx 目录进行映射,用于将 Nginx 的日志文件持久化到主机上
  myHtml:
    build: ./myHtml
    # 构建文件Dockerfile写在当前目录下的myHtml下面
  volumes:
    - /home/myHtml/api:/var/www/html/myHtml/api
    # 添加 volumes 部分来定义卷的映射关系,在运行 docker-compose up -d 启动容器时,Docker 将自动将主机目录中的文件同步到容器的挂载目录中。这意味着可以通过 SVN 更新主机目录中的代码,然后在容器中查看更新后的代码
    depends_on:
      - nginx
    # Add any additional configuration specific to myHtml(你的项目名)
    # 这里可以添加多个项目依赖同一个nginx容器

根据上面的配置,那么我需要在当前目录新建nginx目录,nginx目录下面分别还有三个目录:conf.d 、 ssl 、 logs。然后我在nginx/conf.d/下面就可以写我的网站nginx配置文件。

下面是我写的示例:

在nginx/conf.d/新建myHtml.conf

bash 复制代码
server {
    listen 80;
    server_name larashop.ishare.cool;
    # 注意 这里写的是nginx容器中的目录
    root /var/www/html/myHtml/api/public;
    index index.php index.html index.htm;
    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ \.php$ {
        try_files $uri /index.php =404;
        # 注意这里需使用 服务名:端口 的形式
        fastcgi_pass php-fpm73:9000;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

四、写Dockerfile文件

进入到当前目录下的 myHtml目录,新建Dockerfile:

bash 复制代码
FROM php:7.3-fpm
# 根据你的情况安装php版本

# 安装 Laravel 所需的依赖
RUN apt-get update && apt-get install -y \
    libzip-dev \
    zip \
    unzip \
    && docker-php-ext-install zip pdo_mysql

# 安装 Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# 设置工作目录,需要对应上面配置nginx映射目录
WORKDIR /var/www/html/myHtml/api

# 复制项目文件到容器
COPY /home/bugu/api /var/www/html/myHtml/api

# 安装项目依赖
RUN composer install --no-interaction

# 设置文件和目录权限
RUN chown -R www-data:www-data \
    /var/www/html/myHtml/api/storage \
    /var/www/html/myHtml/api/bootstrap/cache \
    /var/www/html/myHtml/api/public \
    /var/www/html/myHtml/api/vendor/

可以根据自己的情况有说增加,然后在终端中,进入包含 Dockerfile 文件的项目目录,执行下面命令来构建和启动具有修改后工作目录的容器。

bash 复制代码
 docker-compose up -d
相关推荐
FoldWinCard13 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计14 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12314 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质14 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX15 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.15 小时前
Linux系统管理
linux·运维
阿龙的工作记录15 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手15 小时前
Linux的基本指令
linux·运维·服务器
hkj880816 小时前
Ubuntu 切换java版本
java·linux·ubuntu
AAA@峥17 小时前
CentOS7 源码编译安装 MySQL5.7|SQL 基础操作 + 备份恢复完整实战
运维·数据库·sql·centos