当前位置: 首页 > news >正文

零基础部署nginx mysql springboot

参考:写给开发人员看的Docker干货,零基础部署nginx mysql springboot

一、连接linux

阿里云
参考:部署到Linux
可能需要购买:购买链接

二、安装docker

# 先切换到root用户下
sudo su# 更新apt-get,保证apt-get最新版本
apt-get update# 安装docker
apt-get install -y docker.io# 查看docker版本
docker version# 启动docker服务(有可能不需要这一步,多执行一遍也不会有错)
service docker start# 再执行一次version,看到Client、Service说明启动成功了
docker version
Client:Version:           18.09.7API version:       1.39Go version:        go1.10.4Git commit:        2d0083dBuilt:             Fri Aug 16 14:19:38 2019OS/Arch:           linux/amd64Experimental:      falseServer:Engine:Version:          18.09.7API version:      1.39 (minimum version 1.12)Go version:       go1.10.4Git commit:       2d0083dBuilt:            Thu Aug 15 15:12:41 2019OS/Arch:          linux/amd64Experimental:     false

出现问题 1:bash: apt-get: command not found
bash: apt-get: command not found

apt-get: command not found,这个的出现是因为系统的原因。

Linux系统分为两种:
1.RedHat系列:Redhat、Centos、Fedora等

2.Debian系列:Debian、Ubuntu等

RedHat系列的包管理工具是yum

Debian系列的包管理工具是apt-get

查看系统版本:

cat /proc/version
---------------------------

Linux version 4.18.0-305.3.1.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)) #1 SMP Tue Jun 1 16:14:33 UTC 2021

我的是Red Hat,所以因该用yum

yum update

成功!

问题 2:重启系统
在这里插入图片描述
直接在阿里云ESC- 实例重启

问题 3:Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist

可能是 CentOS 已经停止维护的问题。2020 年 12 月 8 号,CentOS 官方宣布了停止维护 CentOS Linux
的计划,并推出了 CentOS Stream 项目,CentOS Linux 8 作为 RHEL 8 的复刻版本,生命周期缩短,于 2021
年 12 月 31 日停止更新并停止维护(EOL),更多的信息可以查看 CentOS 官方公告。如果需要更新 CentOS,需要将镜像从
mirror.centos.org 更改为 vault.centos.org

首先,进入到 yum 的 repos 目录

cd /etc/yum.repos.d/

修改 centos 文件内容

编辑模式:按 i 进入编辑
退出编辑 :电脑左上角 ESC
保存::wq

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

生成缓存更新

yum makecache

运行 yum update 并重新安装 vim编辑器

yum update -y
yum -y install vim

确认一下你的VIM是否已经安装

rpm -qa|grep vim

如果已安装,会显示:

[root@localhost usr]# rpm -qa|grep vim
vim-minimal-7.4.629-6.el7.x86_64
vim-filesystem-7.4.629-6.el7.x86_64
vim-enhanced-7.4.629-6.el7.x86_64
vim-common-7.4.629-6.el7.x86_64
vim-X11-7.4.629-6.el7.x86_64

如果缺少了其中某个

yum -y install vim-enhanced

如果上面三个包一个都没有显示,则直接输入命令:

yum -y install vim*

我的还是没有x11,不管了,继续安装docker

yum install docker -y

启动

start docker.service

Failed to start docker.service: Unit docker.service not found.
CentOS安装Docker,启动时候报错Failed to start docker.service: Unit
docker.service not
found.(如下:),原因是CentOS默认使用podman代替docker,所以需要将podman卸载.

yum erase podman buildah

安装依赖环境

yum install -y yum-utils

安装配置镜像

sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

问题 4:Repository extras is listed more than once in the configuration

可能是镜像重复了,不管了,直接启动

sudo yum install -y docker-ce docker-ce-cli containerd.io

成功!

启动Docker服务

systemctl start docker

成功!

Client: Docker Engine - CommunityVersion:           24.0.6API version:       1.43Go version:        go1.20.7Git commit:        ed223bcBuilt:             Mon Sep  4 12:33:07 2023OS/Arch:           linux/amd64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          24.0.6API version:      1.43 (minimum version 1.12)Go version:       go1.20.7Git commit:       1a79695Built:            Mon Sep  4 12:32:10 2023OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.6.24GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523runc:Version:          1.1.9GitCommit:        v1.1.9-0-gccaecfcdocker-init:Version:          0.19.0GitCommit:        de40ad0

三、第一个Docker镜像hello world

  1. 先用pull命令从远端拉镜像到本地
  2. 用images命令查看所有镜像
  3. run命令运行镜像
# pull: 从仓库拉取镜像
# docker pull [options] name[:tag]
# docker pull [可选参数] 镜像名[:版本号](如果不填默认为最新版本)
docker pull hello-world
# 默认从docker官方获取镜像,很可能因为网络原因需要多拉取几次# 查看本机上的所有镜像
# docker images [可选参数]
docker images
# 看到hello-world说明拉取成功了
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        15 months ago       1.84kB# 运行镜像
# docker run [options] image[:tag] [command] [args]
# docker run [可选参数] 镜像名[:版本号] [镜像运行时要执行的命令] [命令参数]
docker run hello-worldHello from Docker!
# 当你看到这条消息说明安装成功了
This message shows that your installation appears to be working correctly.
# 生成这条信息,docker做了以下几个步骤
To generate this message, Docker took the following steps:# client端(也就是终端,命令行)连接到daemon端(指的是我们本地docker)1. The Docker client contacted the Docker daemon.# daemon端(本地docker)到Docker hub仓库中拉取了hello-world镜像2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)# daemon端(本地docker)从镜像中创建了一个容器,这个镜像运行了当前看到输出的代码3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.# daemon端(本地docker)将输出流给client端(命令行),显示到终端4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.

配置加速器(已经科学上网的可以忽略)

镜像加速器
在这里插入图片描述

四、运行nginx

# 拉取nginx镜像
docker pull nginx# 查看镜像
docker images# REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ed21b7a8aee9        12 days ago         127MB
hello-world         latest              fce289e99eb9        15 months ago       1.84kB

运行方式

刚刚run命令运行了hello world,这里详细将一下,运行方式有2种,前台运行和后台运行,前台运行则会占用终端,一般都会选择让容器在后台运行

网络

桥接(Bridge):也是最常用的方式,该模式下会将ubuntu主机上的端口映射到docker容器的端口上,例如8080:8081则会将主机上的8080端口映射到docker容器的8081端口
共享(Host):ubuntu主机与docker共享同一端口
无网络(None):docker没有网络,外界无法访问

桥接 Bridge
1. -p 指定端口模式
# docker run -d -p 主机端口:容器端口 image[:tag]
docker run -d -p 8080:80 nginx
5e0cc45d89288faf9ba04b5e8b30548b8c14409a6d93e1abdd297676a7b7769adocker stop 5e

5e:容器端口的前两个字母

可以通过:8080访问nginx了

可能出现的问题:不能访问8080

添加安全组

在这里插入图片描述
自己实例的 IP地址:8080 就可以访问了

实例

在这里插入图片描述
在这里插入图片描述
找不到哪里需要 r 命令了,这里说一下安装 r 命令

yum install R
2. -P 随机端口
# 随机开启一个端口映射到容器
# docker run -d -P image[:tag]
docker run -d -P nginxdocker ps
# 可以看到是32768端口映射到80端口
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
be30acaeb546        nginx               "nginx -g 'daemon of…"   10 seconds ago      Up 9 seconds        0.0.0.0:32768->80/tcp   trusting_kellerdocker stop be

五、运行mysql

从远端仓库拉取mysql 通过docker run运行
-d进行后台运行
-p指定端口映射
-e后面跟着的是mysql的参数,通过上方连接可以查询到通过MYSQL_ROOT_PASSWORD设置数据库密码、MYSQL_DATABASE设置数据库名

docker pull mysqldocker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=leilema -e MYSQL_DATABASE=leilema mysql:latest

安装成别人的数据库了

#查看所有容器
docker ps
#停止所有容器
docker stop 容器id前两位
#删除容器
docker rm 容器id前两位
#查看所有镜像
docker images
#删除镜像
docker rmi 镜像id前两位

六、制作自己的镜像

编写Dockerfile,说明镜像要如何进行创建,跟makefile有点像
通过docker build命令构建镜像

编写Dockerfile

使用git拉取项目(或者自己通过rz命令将jar包传到服务器上)
cd到jar包目录下,在同级目录开始编写Dockerfile文件

get clone https://gitee.com/chaitou/hello-springbootcd hello-springboot
vim Dockerfile

get命令找不到

安装git命令也可以

yum -y install git
git clone https://gitee.com/chaitou/hello-springbootcd hello-springboot
vim Dockerfile

dockerfile文件如下

# 依赖的基础镜像
from java:8
# 创建者
MAINTAINER bugpool xxx@163.com
# 将当前目录下的jar复制到容器/目录下
COPY hello-springboot.jar /hello-springboot.jar
# 指定启动时运行java -jar 命令
ENTRYPOINT ["java", "-jar","/hello-springboot.jar"]

构建镜像

需要从仓库先pull一下java镜像
使用docker build构建镜像,-t指定镜像名:版本号,最后一个.表示当前目录
启动镜像,如果使用的是上面我提供的jar包,我特意将其运行端口改为8081来练习一下-p桥接网络的使用。

# 拉取java8
docker pull java:8
# 构建镜像
docker build -t hello-springboot:1.0 .
# 启动镜像
docker run -p 80:8081 hello-springboot:1.0

这里也需要设置一下安全组

在这里插入图片描述
在这里插入图片描述
完成!

相关文章:

零基础部署nginx mysql springboot

参考:写给开发人员看的Docker干货,零基础部署nginx mysql springboot 一、连接linux 阿里云 参考:部署到Linux 可能需要购买:购买链接 二、安装docker # 先切换到root用户下 sudo su# 更新apt-get,保证apt-get最新…...

6-3 模式匹配

description 给出主串s和模式串t,其长度均不超过1000。本题要求实现一个函数BF(string s, string t),求出模式串t在主串s中第一次出现的位置(从0开始计算),如果在s中找不到t,则输出-1。 函数接口定义&…...

SQL JOIN 时 USING 和 ON 的异同

在数据表做 join 时,即可以用 using,也可以用 on。有什么异同点呢。 ON 是更加普遍的用法,可以连接表 On 一个字段,多个字段,甚至一个条件表达式。举例 SELECT * FROM world.City JOIN world.Country ON (City.Cou…...

安全学习_开发相关_JNDI介绍(注入)RMILDAP服务

文章目录 参考&本节目的JNDI概念-RMI&LDAP服务调用检索:在RMI服务中调用了InitialContext.lookup()的常用类有:在LDAP服务中调用了InitialContext.lookup()的常用类有: JNDI注入-使用工具生成远程调用JNDI远程调用-工具(j…...

C#学生选课及成绩查询系统

一、项目背景 学生选课及成绩查询系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的手工管理所无法比拟的…...

【C语言】利用数组处理批量数据(一维数组和二维数组)

前言:在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的&#x…...

WPF中, 如何将控件的触发事件绑定到ViewModel

在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…...

解决Qt msvc编译器 中文显示乱码问题

第一步:代码文件选择用utf8编码带bom。第二步:在有中文汉字的代码文件顶部加一行(一般是cpp文件) #pragma execution_character_set(“utf-8”) 可以考虑放在head.h中,然后需要的地方就引入head头文件就行,…...

JAVA面经整理(7)

一)什么是AQS? 1)AQS也被称之为是抽象同步队列,它是JUC包底下的多个组件的底层实现,Lock,CountDownLatch和Semphore底层都使用到了AQS AQS的核心思想就是给予一个等待队列和同步状态来实现的,它的内部使用一个先进先出…...

CentOS7使用技巧

1、防火墙相关 关闭防火墙 systemctl stop firewalld 关闭防火墙开机自启 systemctl disable firewalld.service 查看防火墙状态 systemctl status firewalld...

Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法

论文题目:Knowledge graph-enhanced molecular contrastive learning with functional prompt 论文链接:https://doi.org/10.1038/s42256-023-00654-0 项目地址:GitHub - HICAI-ZJU/KANO: Code and data for the Nature Machine Intelligence…...

CppCheck静态代码检查工具教程【Windows和Linux端】

目录 1、背景 2、特性介绍 2.1、检查结果 2.2、检查范围 2.3、支持的检查规则(列举一些): 2.4、自定义规则 3、linux 端 4、windows 端 1、背景 最近调研了几款 c/c 代码静态检查工具,包括 cppcheck、cpplint、cppdepend、splint、ts…...

W25Q128芯片手册精读

文章目录 前言1. 概述2. 特性3. 封装类型和引脚配置3.1 8焊盘WSON 8x6 mm3.2其他封装 4. 引脚描述4.1 片选4.2 串行数据输入输出4.3 写保护4.4 保持脚4.5 时钟 5. 块图6. 功能描述6.1 SPI功能6.1.1 标准SPI6.1.2 双通道SPI6.1.3 四通道SPI6.1.4 保持功能 6.2 写保护6.2.1 写保护…...

QT商业播放器

QT商业播放器 总体架构图 架构优点:解耦,采用生产者消费者设计模式,各个线程各司其职,通过消息队列高效协作 这个项目是一个基于ijkplayer和ffplayer.c的QT商业播放器, 项目有5部分构成: 前端QT用户界面 后端是集成了…...

Python的函数

近期遇到了一个没怎么看懂的Python函数的形式。 def twoSum(self, nums: List[int], target: int) -> List[int]: 后来上网查了资料。...

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中,中断是一种重要的机制,用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器,可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…...

深入剖析红黑树:优雅地平衡二叉搜索树

目录 一.红黑树的概念二.插入操作三.与AVL树的比较 一.红黑树的概念 在之前的学习中,我们了解了二叉搜索平衡树,AVL树通过控制每个结点中的平衡因子的绝对值不超过1,实现了一个高性能的树。而相较于AVL的高度平衡,红黑树觉得AVL为…...

C10K问题:高并发模型设计

一、循环服务器模型 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> //*******// #include &l…...

哈希/散列--哈希表[思想到结构][==修订版==]

文章目录 1.何为哈希?1.1百度搜索1.2自身理解1.3哈希方法/散列方法1.4哈希冲突/哈希碰撞1.5如何解决?哈希函数的设计 2.闭散列和开散列2.1闭散列/开放定址法2.2开散列/链地址法/开链法1.概念2.容量问题3.字符串问题4.开散列性能测试5.开散列与闭散列比较 3.代码实现[配备详细…...

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…...

亨元模式 结构型模式之六

1.定义 享元模式是一种结构型设计模式&#xff0c; 它允许你在消耗少量内存的情况下支持大量对象。 2.滑滑梯问题 在说明亨元模式之前&#xff0c;我们先看看关于滑滑梯的程序设计。小区的楼下只有三个滑滑梯&#xff0c;但是想玩的小朋友却非常多。怎么设计计滑滑梯资源的管理…...

面试题: Spring中Bean的实例化和Bean的初始化有什么区别?

Spring中Bean的实例化和Bean的初始化有什么区别? 背景答案扩展知识什么是实例化什么是初始化 个人评价我的回答 背景 想换工作, 看了图灵周瑜老师的视频想记录一下, 算是学习结果的一个输出. 答案 Spring 在创建一个Bean对象时, 会先创建出一个Java对象, 会通过反射来执行…...

阻塞队列,生产者消费者模型

目标&#xff1a; 1. 认识与使用阻塞队列 2. 认识与实现消费者模型 目录 阻塞队列的特点 生产者消费者模型 生产者消费者模型的优点 阻塞队列实现该模型 阻塞队列的特点 1. 线程安全 2. 带有阻塞特性 &#xff08;1&#xff09;如果队列为空&#xff0c;继续出队列&a…...

【RCRL充放电时间相关计算】

一. 基础知识 L、C元件称为“惯性元件”&#xff0c;即电感中的电流、电容器两端的电压&#xff0c;都有一定的“电惯性”&#xff0c;不能突然变化。充放电时间&#xff0c;不光与L、C的容量有关&#xff0c;还与充/放电电路中的电阻R有关。RC电路的时间常数&#xff1a;τRC…...

C++ primer plus--输入、输出和文件

17 输入、输出和文件 17.1 C 输入和输出概述 C 把输入和输出看做字节流。输入时&#xff0c;程序从输入流中抽取字节&#xff1b;输出时&#xff0c;程序将字节插到输出流中。 缓冲区是内存中的临时存储区域&#xff0c;是程序与文件或其他 I/O 设备之间的桥梁。 17.2 使用…...

案例题--Web应用考点

案例题--Web应用考点 负载均衡技术微服务XML和JSON无状态和有状态真题 在选择题中没有考察过web的相关知识&#xff0c;主要就是在案例分析题中考察 负载均衡技术 应用层负载均衡技术 传输层负载均衡技术 就近的找到距离最近的服务器&#xff0c;并进行分发 使用户就近获取…...

MySQL的SQL 优化:提升数据库性能

1. 插入操作优化 1.1 使用多值插入 通常情况下&#xff0c;插入大量数据时&#xff0c;使用多值插入语句比逐行插入更高效。例如&#xff0c;将多个数据行打包成一个 INSERT 语句&#xff1a; INSERT INTO users (name, email) VALUES (Alice, aliceexample.com), (Bob, bob…...

【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇

一、click one for uniapp置顶&#xff1a; 全部免费开源 (你商业用途也没关系&#xff0c;不过可以告诉我公司名或者项目名&#xff0c;放在官网上好看点。哈哈-_-) 二、写在之前 距离上一篇更新已经大约4个月了&#xff0c;公司的事情&#xff0c;自己的一些琐事一直没时间…...

BIT-5-操作符详解(C语言初阶学习)

1. 各种操作符的介绍。 2. 表达式求值 1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 除了 % 操作符…...

【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)

目录 前言 三、分支程序设计 3.1 判断成绩是否及格——双分支程序设计 3.2 成绩加上获奖信息—单分支程序设计 3.3 逻辑判断——布尔类型 3.4 获奖分等级——多分支程序设计 3.5 表示汽车种类——枚举类型 3.6 例题 3.6.1 例题——判断某个年份是否闰年 3.6.2 例题—…...

论坛网站建设推广优化/重庆网站seo技术

最近在项目中遇到一个需求&#xff0c;需要把项目部署在客户内网服务器上&#xff08;无外网&#xff09;&#xff0c;内网服务器&#xff08;无外网&#xff09;需要访问公网IP&#xff0c;由于我们的项目包括外接谷歌地图接口&#xff0c;视频直播接口&#xff1b;项目经理就…...

手机网站建设模板/深圳今日头条新闻

在开发项目的过程中&#xff0c;遇到一个常见的需求&#xff0c;输入框只能输入数字&#xff0c;最开始的时候是这样写的 后发现不兼容火狐浏览器&#xff0c;于是修改成 经测试&#xff0c;没有问题了&#xff0c;由于使用的地方较多&#xff0c;便萌生了封装一个指令的想法&a…...

黄梅那里有做网站的/seo怎么赚钱

Spark应用程序作为独立的进程集运行&#xff0c;由驱动程序中的Spark context进行协调。它可以自动创建(例如&#xff0c;如果您从shell中调用pyspark(然后将Spark上下文称为sc)。但是我们还没有建立它&#xff0c;所以需要进行定义:from 如果想要使用全部可用资源&#xff0c;…...

拐角型网页布局/上海优化外包

最近在学习Python&#xff0c;自然也安装了Atom编辑器的一些Python插件。有一个插件名字叫做atom-python-run&#xff0c;作用很简单&#xff0c;就是按F5运行当前Python文件。不过这个插件有一个问题&#xff0c;就是只能在Windows平台上以cmd方式运行。我希望这个插件能支持P…...

义乌做网站的公司哪家好/怎样优化网络

文章目录 代理服务代理的作用代理相关头字段代理协议总结在前面讲 HTTP 协议的时候,我们严格遵循了 HTTP 的“请求 - 应答”模型,协议中只有两个互相通信的角色,分别是“请求方”浏览器(客户端)和“应答方”服务器。 今天,我们要在这个模型里引入一个新的角色,那就是HTT…...

济南建手机网站哪家好/百度客服平台

题目分析 题意&#xff1a;每个点都有一个值$v_i$&#xff0c;从一个点出发&#xff0c;每走到一个点&#xff0c;会跳到ivi的位置&#xff0c;问需要跳多少次能跳出n&#xff1f;带修改。 此题可以用lct做&#xff0c;此处使用了分块&#xff1a;将序列分块后&#xff0c;每个…...