以 Docker-compose 方式部署 lnmp 站点
本实验已事先安装好docker环境。
一、安装docker-compose
1.1、下载docker compose
docker compose下载地址:https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64
更换下载链接中的版本号下载不同的版本。尽量使用迅雷下载,可加速下载,否则下载很慢。然后上传至服务器中。
1.2、安装docker compose
将下载好的docker-compose上传至服务器。
root@k8s-node:/home/rshine# ls
calico.tar.gz docker-compose-linux-x86_64 jenkins-2-394.tar.gz
root@k8s-node:/home/rshine# chmod u+x docker-compose-linux-x86_64
root@k8s-node:/home/rshine# mv docker-compose-linux-x86_64 /usr/local/bin/
root@k8s-node:/home/rshine# docker-compose version
Docker Compose version v2.29.7
root@k8s-node:/home/rshine#
1.3、docker-compose常用的命令
#启动并后台运行所有的服务
docker-compose up -d
#列出项目中目前的所有容器
docker-compose ps
#停止某个服务
docker-compose stop 服务名
#启动某个服务
docker-compose start 服务名
#停止并删除容器、网络、卷、镜像
docker-compose down
二、docker-compose部署lnmp服务
实验项目路径(自己创建):/usr/local/DockerApp
宿主机IP地址:192.168.60.141
软件版本:
nginx:latest
php:7.3.29-fpm
MySQL:5.7.26
镜像版本如下:
2.1、准备nginx配置文件及默认网页文件
创建nginx配置目录:mkdir -p /usr/local/DockerApp/nginx/conf
Nginx默认配置文件:/usr/local/DockerApp/nginx/conf/default.conf
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm index.php;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
index index.html index.htm index.php ;
try_files $uri $uri/ /index.php?$query_string;
autoindex on;
}
location ~ \.php$ {
#php73是容器命名
fastcgi_pass php73:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
}
}
创建nginx根目录:mkdir -p /usr/local/DockerApp/nginx/www
创建一个网页文件:/usr/local/DockerApp/nginx/www/index.html
My name is God!
God bless you!
Oh ye!
2.2、创建清单文件docker-compose.yml
创建清单文件:/usr/local/DockerApp/docker-compose.yml
#定义docker compose yml版本
version: "3"
#定义我们的服务对象
services:
#自定义的服务名称
nginx:
#镜像名称,默认拉取本地镜像,没有的话从远程获取
image: nginx:latest
#自定义容器的名称
container_name: nginx
#将宿主机的80端口映射到容器的80端口
ports:
- "80:80"
#将宿主机的~/lnmp/www目录和容器的/usr/share/nginx/html目录进行绑定,并设置rw权限
#将宿主机的~/lnmp/nginx/conf/default.conf和容器的/etc/nginx/conf.d/default.conf进行绑定
volumes:
- ./nginx/www/:/usr/share/nginx/html/:rw
- ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
#设置环境变量,当前的时区
environment:
TZ: "Asia/Shanghai"
#容器是否随docker服务启动重启
restart: always
#容器加入名为lnmp的网络
networks:
- lnmp
php:
image: php:7.3.29-fpm
container_name: php73
volumes:
- ./nginx/www/:/var/www/html/:rw
restart: always
cap_add:
- SYS_PTRACE
networks:
- lnmp
mysql:
image: mysql:5.7.26
container_name: mysql57
ports:
- "3306:3306"
volumes:
- ~/lnmp/mysql/data:/var/lib/mysql/:rw
restart: always
networks:
- lnmp
environment:
MYSQL_ROOT_PASSWORD: "123456"
TZ: "Asia/Shanghai"
networks:
#创建了一个自定义的网络叫做lnmp
lnmp:
2.3、基于docker-compose启动容器
执行命令:
# 切换到项目路径
cd /usr/local/DockerApp
# 启动容器
docker-compose up -d
容器状态如下:
三、安装结果验证
3.1、验证nginx是否正常安装
访问宿主机80端口,如:“http://宿主机IP地址”,是否输出默认网页内容。
3.2、验证PHP是否正常安装
在www目录中创建rshine.php探针文件(名字随意.php),探针文件内容如下:
/usr/local/DockerApp/nginx/www/rshine.php
<?php
phpinfo();
?>
通过浏览器访问探针文件:http://192.168.60.141/rshine.php
结果如下:
证明PHP安装正常。
3.3、验证MySQL是否正常安装
在www目录中创建mysql.php文件(名字随意.php),文件里面写上连接mysql的代码,文件内容如下:
/usr/local/DockerApp/nginx/www/mysql.php
<?php
// 创建连接,mysql57是MySQL容器的名称,指的是MySQL的连接地址。镜像中MySQL的root默认密码为123456。
$conn = new mysqli('mysql57','root','123456');
if($conn->connect_error){
die("连接失败,错误:" . $conn->connect_error);
}
echo "mysql连接成功";
通过浏览器访问文件:http://192.168.60.141/mysql.php
注:这里会报错,原因是一些PHP连接MySQL的模块未安装,需进入到PHP容器中,安装和启用这些模块。命令如下:
# 进入到容器
[root@docker-compose www]# docker exec -it php73 /bin/bash
# 安装模块
root@384e58105d56:/var/www/html# docker-php-ext-install pdo pdo_mysql mysqli
# 启用模块
root@384e58105d56:/var/www/html# docker-php-ext-enable pdo pdo_mysql mysqli
# 显示如下,说明加载成功
warning: pdo (pdo) is already loaded!
warning: pdo_mysql (pdo_mysql) is already loaded!
warning: mysqli (mysqli) is already loaded!
# 退出容器
root@384e58105d56:/var/www/html# exit
exit
重启lnmp服务:
# 切换到项目目录
root@k8s-node:/usr/local/DockerApp/nginx/www# cd /usr/local/DockerApp
root@k8s-node:/usr/local/DockerApp# docker-compose restart
WARN[0000] /usr/local/DockerApp/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Restarting 3/3
✔ Container nginx Started 1.1s
✔ Container php73 Started 1.0s
✔ Container mysql57 Started 2.7s
root@k8s-node:/usr/local/DockerApp#
再次通过浏览器访问文件:http://192.168.60.141/mysql.php
证明MySQL安装成功。
至此,docker compose安装lnmp环境完成。