在 Ubuntu 上使用 Docker-Compose 对 LEMP 栈进行 Docker 化在 Ubuntu 上使用 Docker-Compose 对 LEMP 栈进行 Docker 化在 Ubuntu 上使用 Docker-Compose 对 LEMP 栈进行 Docker 化在 Ubuntu 上使用 Docker-Compose 对 LEMP 栈进行 Docker 化
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

在 Ubuntu 上使用 Docker-Compose 对 LEMP 栈进行 Docker 化

在此页

  1. 第 1 步 - 安装 Docker
  2. 第 2 步 - 安装 Docker-Compose
  3. 第 3 步 - 创建和配置 Docker 环境
  4. 第 4 步 - 配置 docker-compose.yml 文件
  5. 第 5 步 - 运行 Docker-Compose
  6. 第 6 步 - 测试
    1. 参考资料

    Docker-Compose 是一个命令行工具,用于定义和管理多容器 docker 应用程序。 Compose 是一个 python 脚本,可以使用 pip 命令轻松安装(pip 是从 python 包存储库安装 Python 软件的命令)。使用 compose,我们可以使用一个命令运行多个 docker 容器。它允许您创建容器即服务,非常适合您的开发、测试和暂存环境。

    在本教程中,我将逐步指导您使用 docker-compose 创建一个 LEMP Stack 环境(LEMP=Linux - Nginx - MySQL - PHP)。我们将在不同的 Docker 容器中运行所有组件,我们设置了 Nginx 容器、PHP 容器、PHPMyAdmin 容器和 MySQL/MariaDB 容器。

    先决条件

    • Ubuntu 服务器 16.04 -64 位
    • 根权限

    第 1 步 - 安装 Docker

    在此步骤中,我们将安装 Docker。 Docker 在 Ubuntu 存储库中可用,只需更新您的存储库然后安装它。

    更新 ubuntu 存储库并升级:

    sudo apt-get update
    sudo apt-get upgrade

    从 ubuntu 存储库安装最新的 Docker。

    sudo apt-get install -y docker.io

    启动 docker 并使其在引导时启动:

    systemctl start docker
    systemctl enable docker

    Docker 服务正在运行。

    接下来,您可以尝试使用 docker 和下面的命令来测试它:

    docker run hello-world

    来自 docker 的世界,你好。

    第 2 步 - 安装 Docker-Compose

    在第一步中,我们已经安装了 Docker。现在我们将安装 docker-compose。

    我们需要 python-pip 来进行 compose 安装,使用 apt 安装 python 和 python-pip:

    sudo apt-get install -y python python-pip

    安装完成后,使用 pip 命令安装 docker-compose。

    pip install docker-compose

    现在检查 docker-compose 版本:

    docker-compose --version

    Docker-compose 已经安装。

    第 3 步 - 创建和配置 Docker 环境

    在这一步中,我们将构建我们的 docker-compose 环境。我们将使用非根用户,因此我们现在需要创建该用户。

    添加一个名为 hakase 的新用户(如果您愿意,可以在此处选择您自己的用户名):

    useradd -m -s /bin/bash hakase
    passwd hakase

    接下来,将新用户添加到 docker 组并重新启动 docker。

    usermod -a -G docker hakase
    sudo systemctl restart docker

    现在用户 hakase 可以在没有 sudo 的情况下使用 docker。

    接下来,从 root 用户使用 su 登录到 hakase 用户。

    su - hakase

    为撰写环境创建一个新目录。

    mkdir lemp-compose/
    cd lemp-compose/

    这是我们的 docker-compose 环境,所有应该在 Docker 容器中的文件都必须在这个目录中。当我们使用 docker-compose 时,我们需要一个名为 docker-compose.yml 的 .yml 文件。

    在 lemp-compose 目录中,创建一些新目录和一个 docker-compose.yml 文件:

    touch docker-compose.yml
    mkdir -p {logs,nginx,public,db-data}

    • logs:Nginx 日志文件的目录。
    • nginx:包含 Nginx 配置,如虚拟主机等。
    • public:网络文件、index.html 和 PHP 信息文件的目录。
    • db-data:MariaDB 数据目录卷。

    在日志目录中创建日志文件 error.log 和 access.log。

    touch logs/{error,access}.log

    在nginx目录下新建一个nginx虚拟主机配置文件:

    vim nginx/app.conf

    下面粘贴配置:

    upstream php {
            server phpfpm:9000;
    }

    server {

            server_name 193.70.36.50;

            error_log "/opt/bitnami/nginx/logs/myapp-error.log";
            access_log  "/opt/bitnami/nginx/logs/myapp-access.log";

            root /myapps;
            index index.php index.html;

            location / {

                    try_files $uri $uri/ /index.php?$args;
            }

            location ~ \.php$ {

                    include fastcgi.conf;
                    fastcgi_intercept_errors on;
                    fastcgi_pass php;
            }

            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    expires max;
                    log_not_found off;
            }
    }

    保存文件并退出 vim。

    在公共目录中创建一个新的 index.html 文件和 PHP 信息文件。

    echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
    echo '<?php phpinfo(); ?>' > public/info.php

    现在可以看到环境目录如下图:

    tree

    第 4 步 - docker-compose.yml 文件的配置

    在上一步中,我们创建了容器所需的目录和文件。在这一步中,我们要编辑文件 docker-compose.yml。在 docker-compose.yml 文件中,我们将为 LEMP 堆栈、每个容器的基础映像和 docker 卷定义我们的服务。

    登录 hakase 用户并使用 vim 编辑 docker-compose.yml 文件:

    su - hakase
    cd lemp-compose/
    vim docker-compose.yml

    - 定义 Nginx 服务

    粘贴下面的 nginx 配置:

    nginx:
        image: 'bitnami/nginx'
        ports:
            - '80:80'
        links:
            - phpfpm
        volumes:
            - ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
            - ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
            - ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
            - ./public:/myapps

    在该配置中,我们已经定义了:

    • nginx:服务名称
    • 图像:我们使用的是 bitnami/nginx docker 图像
    • 端口:将容器端口 80 暴露给主机端口 80
    • 链接:将 nginx 服务容器链接到 phpfpm 容器
    • volumes:将本地目录挂载到容器中。挂载日志文件目录,挂载 Nginx 虚拟主机配置和挂载 web 根目录。

    - 定义 PHP-fpm 服务

    将配置粘贴到 Nginx 块下方:

    phpfpm:
        image: 'bitnami/php-fpm'
        ports:
            - '9000:9000'
        volumes:
            - ./public:/myapps

    我们在这里定义:

    • phpfpm:定义服务名称。
    • 图像:使用 bitnami/php-fpm 图像为 phpfpm 服务定义基础图像。
    • 端口:我们使用 TCP 端口 9000 运行 PHP-fpm,并将端口 9000 暴露给主机。
    • volumes:挂载 web 根目录 public 到容器上的 myapps。

    - 定义MySQL服务

    在第三块中,为 MariaDB 服务容器粘贴以下配置:

    mysql:
        image: 'mariadb'
        ports:
            - '3306:3306'
        volumes:
            - ./db-data:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=hakase-labs123

    在这里你可以看到我们正在使用:

    • mysql:作为服务名。
    • 图像:容器基于 mariadb docker 图像。
    • ports:服务容器使用端口 3306 连接 MySQL,并在端口 3306 上将其暴露给主机。
    • volumes: db-data 目录 mysql
    • environment:设置环境变量 MYSQL_ROOT_PASSWORD 为 docker images 的 mysql root 密码,在构建容器时执行。

    - PHPMyAdmin服务配置

    最后一块,粘贴下面的配置:

    phpmyadmin:
        image: 'phpmyadmin/phpmyadmin'
        restart: always
        ports:
           - '8080:80'
        links:
            - mysql:mysql
        environment:
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: hakase-labs123
            PMA_HOST: mysql

    我们正在使用 phpmyadmin docker 镜像,将容器端口 80 映射到主机上的 8080,将容器链接到 mariadb 容器,设置始终重启并设置 docker 镜像的一些环境变量,包括设置 PMA_HOST。

    保存文件并退出 vim。

    你可以在 github 上看到完整的例子。

    第 5 步 - 运行 Docker-Compose

    现在准备运行 docker-compose。注意:当你想运行docker-compose时,你必须在docker-compose项目目录下,并确保有包含compose配置的yml文件。

    运行以下命令以启动 LEMP 堆栈:

    docker-compose up -d

    -d:作为守护进程或后台运行

    您将看到已创建新容器的结果,使用以下命令检查它:

    docker-compose ps

    现在我们有四个运行 Nginx、PHP-fpm、MariaDB 和 PHPMyAdmin 的容器。

    第 6 步 - 测试

    检查主机上 docker-proxy 使用的端口。

    netstat -plntu

    我们可以看到 Nginx 容器的端口 80、MariaDB 容器的端口 3306、php-fpm 容器的端口 9000 和 PHPMyAdmin 容器的端口 8080。

    从网络浏览器访问端口 80,您将看到我们的 index.html 文件。

    确保 PHP-fpm 正在运行,从网络浏览器访问它。

    在 MySQL shell 中访问 MySQL 容器。

    docker-compose exec mysql bash
    mysql -u root -p
    TYPE MYSQL PASSWORD: hakase-labs123

    现在创建一个新的数据库:

    create database hakase_db;
    exit

    MariaDB mysql shell 容器是可以访问的,我们已经创建了一个新的数据库 hakase_db。

    接下来,在端口 8080 上访问 PHPMyAdmin:http://serverip-address:8080/。

    您将看到 PHPMyAdmin 登录页面,只需输入用户名 root,密码为 hakase-labs123。

    您将自动连接到已在 PMA_HOST 环境变量中定义的 mysql 容器。

    单击 Go,您将看到连接到 mysql 容器的 phpmyadmin 仪表板。

    成功! LEMP Stack 在 docker-compose 设置下运行,由四个容器组成。

    参考

    • https://hub.docker.com/r/bitnami/nginx/
    • https://hub.docker.com/r/bitnami/php-fpm/
    • https://hub.docker.com/_/mariadb/
    • https://hub.docker.com/r/phpmyadmin/phpmyadmin/
    • https://docs.docker.com/compose/
    • https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
    • https://linux教程/tutorial/how-to-create-docker-images-with-dockerfile/

©2015-2025 艾丽卡 support@alaica.com