欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

以 Docker-compose 方式部署 lnmp 站点

最编程 2024-10-12 09:50:31
...

本实验已事先安装好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# 

Docker-compose部署lnmp网站_docker

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

镜像版本如下:

Docker-compose部署lnmp网站_nginx_02

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

容器状态如下:

Docker-compose部署lnmp网站_nginx_03

三、安装结果验证

3.1、验证nginx是否正常安装

访问宿主机80端口,如:“http://宿主机IP地址”,是否输出默认网页内容。

Docker-compose部署lnmp网站_docker-compose_04

Docker-compose部署lnmp网站_php_05

3.2、验证PHP是否正常安装

在www目录中创建rshine.php探针文件(名字随意.php),探针文件内容如下:

/usr/local/DockerApp/nginx/www/rshine.php

<?php
  phpinfo();
?>

Docker-compose部署lnmp网站_php_06

通过浏览器访问探针文件:http://192.168.60.141/rshine.php

结果如下:

Docker-compose部署lnmp网站_docker_07

证明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# 

Docker-compose部署lnmp网站_php_08

再次通过浏览器访问文件:http://192.168.60.141/mysql.php

Docker-compose部署lnmp网站_nginx_09

证明MySQL安装成功。

至此,docker compose安装lnmp环境完成。