docker compose一键部署lnmt环境
创建docker compose 目录
[root@localhost ~]# mkdir -p /compose_lnmt
编写nginx的dockerfile文件
创建目录
[root@localhost compose_lnmt]# mkdir -p nginx
编写nginx配置文件
[root@localhost nginx]# vim nginx.conf
user root; #运行身份#nginx自动设置进程数量
worker_processes auto;#指定错误日志文件的位置和日志级别。在此示例中,错误日志被记录到logs/error.log文件中,并且只记录信息级别的日志。
error_log logs/error.log info;pid logs/nginx.pid; events {use epoll;
}#定义了HTTP模块相关配置。
http {#引入mime.types文件,用于定义MIME类型映射。include mime.types;#设置默认MIME类型为application/octet-stream。default_type application/octet-stream;#定义日志格式。log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 配置访问日志文件路径和格式。access_log logs/access.log main;sendfile on; #开启sendfile功能以提高文件传输效率。keepalive_timeout 65; #设置keepalive连接超时时间为65秒。upstream tomcat_8080 { # 定义了名为tomcat_8080的upstream组,并指定两个后端服务器地址和端口号。server tomcat1:8080; server tomcat2:8080;}
#定义了一个虚拟主机配置,监听80端口,并设置代理转发规则。server {listen 80;server_name localhost;location ~ / {proxy_pass http://tomcat_8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# When setting up Harbor behind other proxy, such as an Nginx instance, remove the below line if the proxy already has similar settings.proxy_set_header X-Forwarded-Proto $scheme;proxy_buffering off;proxy_request_buffering off;}}
}
[root@localhost nginx]# vim Dockerfile
#基于的基础镜像
FROM centos:7
#
##镜像作者信息
MAINTAINER Crushlinux <crushlinux@163.com>
#
##安装相关依赖包
RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
#
##下载并解压nginx源码包
RUN wget http://nginx.org/download/nginx-1.19.0.tar.gz && tar zxf nginx-1.19.0.tar.gz
##编译安装nginx
RUN cd nginx-1.19.0 && ./configure --prefix=/usr/local/nginx && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#
##开启 80 和 443 端口
EXPOSE 80
#
##修改 Nginx 配置文件,以非 daemon 方式启动
#RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
#
##定义时区
#RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#
#复制服务启动脚本并设置权限
#ADD run.sh /run.sh
#RUN chmod 775 /run.sh
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
创建数据存放目录
[root@localhost compose_lnmt]# mkdir -p /var/www/html/
编写tomcat的dockerfile
[root@localhost compose_lnmt]# mkdir -p tomcat
[root@localhost compose_lnmt]# cd tomcat/
下载安装包
[root@localhost tomcat]# wget http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
--2023-08-04 16:37:12-- http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
正在解析主机 www.oracle.com (www.oracle.com)... 23.202.224.60, 2600:1417:76:798::a15, 2600:1417:76:7a0::a15
正在连接 www.oracle.com (www.oracle.com)|23.202.224.60|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html [跟随至新的 URL]
--2023-08-04 16:37:13-- https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
正在连接 www.oracle.com (www.oracle.com)|23.202.224.60|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html [跟随至新的 URL]
--2023-08-04 16:37:15-- https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
正在连接 www.oracle.com (www.oracle.com)|23.202.224.60|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:./downloads/#java8 [跟随至新的 URL]
--2023-08-04 16:37:16-- https://www.oracle.com/java/technologies/javase/downloads/
再次使用存在的到 www.oracle.com:443 的连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://www.oracle.com/java/technologies/javase-downloads.html [跟随至新的 URL]
--2023-08-04 16:37:16-- https://www.oracle.com/java/technologies/javase-downloads.html
再次使用存在的到 www.oracle.com:443 的连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:./downloads/ [跟随至新的 URL]
--2023-08-04 16:37:17-- https://www.oracle.com/java/technologies/downloads/
再次使用存在的到 www.oracle.com:443 的连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [text/html]
正在保存至: “jdk8-downloads-2133151.html”
[ <=> ] 112,559 137KB/s 用时 0.8s
2023-08-04 16:37:18 (137 KB/s) - “jdk8-downloads-2133151.html” 已保存 [112559]
[root@localhost tomcat]# wget http://tomcat.apache.org/
--2023-08-04 16:37:33-- http://tomcat.apache.org/
正在解析主机 tomcat.apache.org (tomcat.apache.org)... 151.101.2.132, 2a04:4e42::644
正在连接 tomcat.apache.org (tomcat.apache.org)|151.101.2.132|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://tomcat.apache.org/ [跟随至新的 URL]
--2023-08-04 16:37:37-- https://tomcat.apache.org/
正在连接 tomcat.apache.org (tomcat.apache.org)|151.101.2.132|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:17702 (17K) [text/html]
正在保存至: “index.html”
100%[=============================================================>] 17,702 113KB/s 用时 0.2s
2023-08-04 16:37:38 (113 KB/s) - 已保存 “index.html” [17702/17702])
下载tomcat的dockers文件
https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.59/bin/apache-tomcat-8.5.59.tar.gz
如果这一步做了下面就不用了
这里上一步做了 就可以跳过
在tomcat目录下放一个apache包
[root@localhost tomcat]# ll
总用量 9600
-rw-r--r--. 1 root root 9690027 7月 17 2020 apache-tomcat-8.5.40.tar.gz
[root@localhost tomcat]# vim Dockerfile
[root@localhost tomcat]# cat Dockerfile
# this docker file
# VERSION 1.0
# author: shichao# email: shichao@scajy.cn
FROM centos:7
MAINTAINER shichao@scajy.cn
ENV VERSION=8.5.40 看这里根据版本号写
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel net-tools wget curl unzip iproute java-1.8.0-openjdk && yum clean all && rm -rf /var/cache/yum/*
ADD apache-tomcat-${VERSION}.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat &&\sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH /usr/local/tomcat/bin:$PATH
WORKDIR /usr/local/tomcatEXPOSE 8080CMD ["catalina.sh", "run"]
拷贝tomcat数据到容器目录下
mkdir -p /var/www/tomcat
cp -a /usr/local/tomcat/webapps/* /var/www/tomcat/
如果没有
apache-tomcat-8.5.40.tar.gz 把一个apache包解压把文件放到/var/www/tomcat/
[root@localhost tomcat]# ll /var/www/tomcat/
总用量 8
drwxr-x---. 14 root root 4096 8月 4 16:52 docs
drwxr-x---. 6 root root 83 8月 4 16:52 examples
drwxr-x---. 5 root root 87 8月 4 16:52 host-manager
drwxr-x---. 5 root root 103 8月 4 16:52 manager
drwxr-x---. 3 root root 4096 8月 4 16:52 ROOT
切换目录
编写docker compose配置文件
[root@localhost tomcat]# cd ..
[root@localhost compose_lnmt]# cat docker-compose.yml
version: '3'
services:nginx:hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 80:80networks:- lnmtvolumes:- /var/www/html:/usr/local/nginx/html- ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conftomcat1:hostname: tomcat1build:context: ./tomcatdockerfile: Dockerfilenetworks:- lnmtports: - "8080:8080"command: ["catalina.sh", "run"]volumes:- /var/www/tomcat:/usr/local/tomcat/webappstomcat2:hostname: tomcat2build:context: ./tomcatdockerfile: Dockerfilenetworks:- lnmtports:- "8081:8080"command: ["catalina.sh", "run"]volumes:- /var/www/tomcat:/usr/local/tomcat/webappsmysql:hostname: mysqlimage: mysql:5.6ports:- 3307:3306networks:- lnmtvolumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysqlcommand: --character-set-server=utf8environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: tomcatMYSQL_USER: tomcatMYSQL_PASSWORD: tomcat123
networks:lnmt:
构建启动lnmt环境
[root@localhost compose_lnmt]# /root/docker-compose -f docker-compose.yml up -d
Building nginx
Step 1/9 : FROM centos:7
---> f31fca55b7fb
Step 2/9 : MAINTAINER Crushlinux <crushlinux@163.com>
---> Using cache
---> 83b5a758b0fc
Step 3/9 : RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
---> Using cache
---> d3e03fc7ad3c
Step 4/9 : RUN wget http://nginx.org/download/nginx-1.19.0.tar.gz && tar zxf nginx-1.19.0.tar.gz
---> Using cache
---> 89974cef8e72
Step 5/9 : RUN cd nginx-1.19.0 && ./configure --prefix=/usr/local/nginx && make && make install
---> Using cache
---> a8714c890132
Step 6/9 : ENV PATH /usr/local/nginx/sbin:$PATH
---> Running in bbb45b0a836f
Removing intermediate container bbb45b0a836f
---> 9bada7c394eb
Step 7/9 : EXPOSE 80
---> Running in 3b0e33a9736b
Removing intermediate container 3b0e33a9736b
---> 463315793fa6
Step 8/9 : ENTRYPOINT ["nginx"]
---> Running in 3ed88b7b34de
Removing intermediate container 3ed88b7b34de
---> 8da0735f0bf6
Step 9/9 : CMD ["-g","daemon off;"]
---> Running in c1f164f4064c
Removing intermediate container c1f164f4064c
---> f97e665ec70f
Successfully built f97e665ec70f
Successfully tagged compose_lnmt_nginx:latest
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating compose_lnmt_tomcat2_1 ... done
Creating compose_lnmt_tomcat1_1 ... done
Creating compose_lnmt_mysql_1 ... done
Creating compose_lnmt_nginx_1 ... done
查看容器是否正常
[root@localhost compose_lnmt]# /root/docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------
compose_lnmt_mysql_1 docker-entrypoint.sh --cha ... Up 0.0.0.0:3307->3306/tcp,:::3307->3306/
tcp
compose_lnmt_nginx_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp,:::80->80/tcp
compose_lnmt_tomcat1_1 catalina.sh run Up 0.0.0.0:8080->8080/tcp,:::8080->8080/
tcp
compose_lnmt_tomcat2_1 catalina.sh run Up 0.0.0.0:8081->8080/tcp,:::8081->8080/
tcp
浏览器访问
nginx
tomcat1

tomcat2

mysql

相关文章:
docker compose一键部署lnmt环境
创建docker compose 目录 [rootlocalhost ~]# mkdir -p /compose_lnmt 编写nginx的dockerfile文件 创建目录 [rootlocalhost compose_lnmt]# mkdir -p nginx 编写nginx配置文件 [rootlocalhost nginx]# vim nginx.conf user root; #运行身份#nginx自动设置进程…...
Eeny Meeny Moo
Eeny Meeny Moo 题目描述输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 正确解法A C 代码 题目描述 你肯定有过这样的经验,那就是当很多一起使用网络的时候,网速变得很慢很慢。为了解决这个问题,德国的Ulm大学开发了一份意外事…...
flask---闪现/请求扩展/g对象
闪现 # 一个请求---》假设出错了---》重定向到另一个地址---》把错误信息在另一个返回中看到 错误信息放个位置----》另一个请求过来,去那个位置拿 # 把一些数据,放在某个位置---》后期可以去取出来----》取完不用删除,就没了 def index():s…...
Qt视频播放器
一、设置好ui界面二、打开文件槽函数1.QDir::homePath()作用介绍2.QFileDialog::getOpenFileName()介绍3.QFileInfo介绍4.player 指针解释5.打开文件槽函数完整代码 三、视频播放器初始化1.QMediaPlayer()函数2.设置时间间隔的作用3. QGraphicsScene介绍4.QGraphicsVideoItem介…...
Stable Diffusion教程(8) - X/Y/Z 图表使用
1. 介绍 这项功能可以在 文生图/图生图 界面的左下角种 “脚本” 一栏内选择 “X/Y/Z 图表” 以启用。 它创建具有不同参数的图像网格。使用 X 类型和 Y 类型字段选择应由行和列共享的参数,并将这些参数以逗号分隔输入 X 值 / Y 值字段。支持整数、浮点数和范围。…...
Android 获取网关 ip 和 DNS ip
参考下方 PingUtil.java 代码 import android.content.Context; import android.net.DhcpInfo; import android.net.wifi.WifiManager; import android.text.format.Formatter;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; impor…...
Docker root用户的pip使用方法
Docker下root用户 pip install XX 显示pip命令不存在 # 原始目标:pip install XX pip install --root-user-actionignore 【XX】# (要安装的包)参考:WARNING: Running pip as the ‘root‘ user can result in broken permissions Linux 中 root 与 su…...
企业新片场排名如何优化
企业新片场排名如何优化 要如何去做关键SEO?第一个我们要做的就是做好 SEO 关键词的选词,一般就是会有第一个常用的选词方法,第一是以常用的提问词去做,不实像是情人节买什么礼物,母亲节买什么礼物, 618 有…...
Database Name
概述 DB_NAME与INSTANCE_NAME DB_NAME 数据库名称,也就是数据库的名字标示。这里,数据库里可能有多个实例,比如RAC里的多节点,这多个节点是不同的实例,但是却有相同的名字,他们的 DB_NAME是相同的…...
git代码版本管理
git 文章目录 git基本使用 基本使用 在一台新的电脑上使用git 你要下载安装git, 然后把git的安装路径配到系统环境变量里 然后把这台电脑的.ssh/ id_rsa.pub里的公钥整到github里 然后在github上新建仓库,它会生成一些指令引导上你传本地的代码 之后就可以在终…...
k8s概念-ConfigMap
回到目录 一般用于去存储 Pod 中应用所需的一些配置信息,或者环境变量,将配置于 Pod 分开,避免应为修改配置导致还需要重新构建 镜像与容器。 1 创建ConfigMap #使用 kubectl create configmap -h 查看示例,构建 configmap 对象…...
Mybatis 实体类属性名和表中字段名不一致怎么处理
一. 前言 最近耀哥有学生出去面试,被问到 “Mybatis实体类的属性名和表中的字段名不一致该怎么处理?”,这其实是一个很经典的面试题,接下来耀哥就为大家详细解析一下这道面试题。 二. 分析 2.1 实体类和字段名不一致所带来的后果…...
CAS - 从AtomicInteger窥探CAS
Unsafe类是CAS的核心,由于Java方法无法直接访问底层,需要通过本地方法(native)来实现,Unsafe类相当于一个桥梁。基于Unsafe类,可以直接操作特定的内存数据。 我们从上一篇说CAS基本原理的时候,有说到一个“资源”被100…...
micro-ros IMU ML 代码
示例代码: #include <micro_ros_arduino.h>#include "LSM6DSOXSensor.h" #include "lsm6dsox_activity_recognition_for_mobile.h"#include <stdio.h> #include <rcl/rcl.h> #include <rcl/error_handling.h> #inclu…...
二十三种设计模式第二十四篇--访问者模式(完结撒花)
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式,元素对象已接…...
月报总结|Moonbeam 7月份大事一览
炎炎夏日,Moonbeam于越南举办了线下交流会,在EthCC 2023和以太坊社区成员共同讨论多链应用,在Polkadot Decoded中分享了Moonbeam的与众不同之处。 Bear Necessities Hackathon也于本月圆满结束,选出了每个赛道最杰出的项目&#…...
【2023.8】docker一键部署wvp-GB28181-pro和ZLMediaKit过程全记录
安装docker 使用的操作系统是ubuntu20.04 如何在 Ubuntu 20.04 上安装和使用 Docker https://developer.aliyun.com/article/762674 docker拉取配置好的ZLMediaKIt和wvp-GB28181-pro docker pull 648540858/wvp_pro第一次运行 docker一键运行ZLMediaKIt和wvp-GB28181-pro …...
【2023】字节跳动 10 日心动计划——第四关
目录 1. 买卖股票的最佳时机2. 打家劫舍 II 1. 买卖股票的最佳时机 🔗 原题链接:121. 买卖股票的最佳时机 假设在第 i i i 天卖出股票可获得最大利润,那么买入股票必然是在前 i − 1 i-1 i−1 天中的某一天。更进一步,买入股票应…...
数据库与数据仓库的区别及关系
数据库与数据仓库的区别及关系 数据库数据仓库异同差异联系例子 数据库 数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统 (DBMS) 来控制。它是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集…...
Emacs之设置行号前景颜色(字体颜色)/背景颜色/光标颜色/背景透明度(一百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
