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
你好世界从码头。
第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已经安装。
第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
第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'码头服务器映像,映射主机上的容器端口80到8080 ,将容器链接到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文件。
确保PHP-fpm正在运行,从Web浏览器访问它。
http://serverip-address/info.php
访问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运行在码头组合设置下,由四个容器组成。
参考
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