在Ubuntu上Docker化LEMP与Docker组合

在本教程中,我将逐步指导您使用docker-compose创建LEMP环境(LEMP = Linux - Nginx - MySQL - PHP)。我们会...

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

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

先决条件

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

第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进行组合安装,使用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已经安装。

安装Docker在Ubuntu上编写

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

在这一步中,我们将建立我们的码头组合环境。 我们将使用非root用户,因此我们需要立即创建该用户。

添加一个名为“ 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}

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

在' logs '目录中创建日志文件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。

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

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

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

tree

Docker组合项目环境

第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 '码头图像
  • 端口 :将容器端口80暴露给主机端口80
  • 链接 :将' nginx '服务容器链接到' phpfpm '容器
  • :将本地目录装载到容器。 安装日志文件目录,挂载Nginx虚拟主机配置并挂载web根目录。

- 定义PHP-fpm服务

将配置粘贴到Nginx块下方:

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

我们在这里定义:

  • phpfpm :定义服务名称。
  • image :使用' bitnami / php-fpm '映像定义phpfpm服务的基本映像。
  • 端口 :我们正在运行带有TCP端口9000的 PHP-fpm,并将端口9000暴露给主机。
  • :将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 '码头的图像。
  • 端口 :服务容器使用端口3306进行MySQL连接,并将其暴露给端口3306上的主机。
  • db-data目录下的mysql
  • 环境 :设置环境变量' MYSQL_ROOT_PASSWORD '作为建立容器时执行的Docker映像的mysql根密码。

- 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'码头服务器映像,映射主机上的容器端口808080 ,将容器链接到mariadb容器,并始终设置重启,并设置docker映像的一些环境变量,包括设置' PMA_HOST '。

保存文件并退出vim。

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

第5步 - 运行Docker-Compose

现在我们已经准备好运行docker-compose。 注意:当您要运行docker-compose时,您必须位于docker-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。

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

http:// serverip-address /

nginx码头容器是工作

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

http://serverip-address/info.php

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 ”。

访问mysql shell docker容器

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

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

phpmyadmin码头容器

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

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

phpmyadmin和mysql docker容器正在工作

成功! LEMP运行在码头组合设置下,由四个容器组成。

参考

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