• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于Docker的Web应用部署

陈焜
  
炫动漫
2023年9期
湖北职业技术学院 湖北 孝感 432000

摘要:不同环境之间迁移成本太高。另外软件更新发布及部署低效,过程繁琐且需要人工介入,成本高,可能还会受限于硬件设备。针对这些问题,本文首先介绍Docker的优点和安装,然后提出了一种在Docker中部署基于LAMP架构的云平台在线教学系统的Web应用,结果部署效果良好。

关键词:DOCKER Web应用 Docker-compose

中图分类号:G4 文献标识码:A

1 Docker简介

Docker 是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器[1]。开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括 VMs(虚拟机)、bare metal、OpenStack 集群、云端、数据中心和其他的基础应用平台。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker的使用简单至极,从开发的角度来看就是三步走:构建,运输,运行。其中关键步骤就是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制,运行。有了这个镜像,那么想复制到哪运行都可以,完全和平台无关了。同时Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源了以及还不需要考虑应用之间相互影响。

2 Docker-compose概述

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排[2]。Compose 定位是定义和运行多个 Docker 容器的应用,其前身是开源项目 Fig。

我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

l服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

l项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

3 基于Docker的web应用

3.1 web应用介绍

本文要部署的Web应用是云平台在线教学系统,该系统是基于LAMP(Linux+Apache+MariaDB+PHP)实现的,其中Linux采用CentOS 8系统。基于Docker搭建的云平台在线教学系统需要首先在CentOS 8宿主机上安装Docker Engine完成容器环境的部署,其次部署数据库容器和Web容器,然后配置Web容器能够访问数据库容器,最后部署和发布云平台在线教学系统这个Web应用[3]。

3.2 web应用部署

通过 Docker-Compose 容器编排的方式部署云平台在线教学系统,该系统系统运用 LAMP(Linux+Apache+MariaDB+PHP)实现的,具有用户管理、学生在线学习管理、学习报告管理和教师管理等功能,系统的前端后台代码已经编写好。

在项目目录项创建conf子目录,在其中在创建apache和php目录,分别存放Apache和php的配置文件。创建htdocs子目录,在本地 Eclipse 中将 Web 项目导出为 stuprj.war 包,并将它放到该子目录。创建build子目录,在其中创建Dockerfile文件,内容如下:

FROM php:7.3-apache

RUN apt-get update

RUN a2enmod rewirte

RUN docker-php-ext-install pdo pdo-mysql mysqli

Docker-Compose 的标准 yaml 模板文件包含 version、services、networks 三部分。version 指定 Docker-Compose 的版本。services定义服务,此项目中定义了db、Web服务。在项目目录下新建 docker-compose.yml 文件,限于篇幅,以下只列出部分代码:

version:’3.1’

services:

web:

build: ./build

container_name:lamp-web

ports:

-${APACHE_PORT}

volumes:

-./htdocs:/var/www/html

- ./conf/apache/apache2.conf:/etc/apache2/apache2.conf:ro

- ./conf/apache/ports.conf:/etc/apache2/ports.conf:ro

- ./conf/apache/sites-available:/etc/apache2/sites-available:rw

- ./conf/apache/sites-enabled:/etc/apache2/sites-enabled:rw

- ./conf/php/php.ini:/usr/local/etc/php/php.ini:ro

depends_on:

-db

db:

image: mysql:latest

command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8

restart: always

#设置环境变量

environment:

MYSQL_ROOT_PASSWORD: root   #指定用户root的密码

MYSQL_DATABASE: studb  #指定数据库名

MYSQL_USER: user01  #指定数据库用户名

MYSQL_PASSWORD: root  #指定数据库用户密码

# 指定端口映射。将宿主机的 3307 端口映射到容器的3306端口。

ports:

- “3307:3306”

volumes:

- db_data:/var/lib/mysql

……

最后执行docker-compose up –d启动web应用即可。

参考文献

[1] 戴远泉,王勇,钟小平.Docker容器技术配置、部署与应用[M].人民邮电出版社,2021:13-15

[2] 罗利,蒋杰,胡柳,彭成辉.Docker,环境下Docker-Compose部署应用实践[J].现代信息科技,2021,5(10):94-96

[3] 孙雅妮.基于Docker的Web应用部署与实现[J].科技与创新,2021,(9):87-89

*本文暂不支持打印功能

monitor