使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
文章目录
- 应用快速部署
- Nginx
- Redis
- MySQL
- Tomcat
- 制作镜像
- 镜像原理
- 基于已有容器创建
- 使用 Dockerfile 创建镜像
- 指令说明
- 构建应用
- 创建 Dockerfile 文件
- 创建镜像
应用快速部署
Nginx
docker run -d -p 80:80 nginx
使用浏览器访问虚拟机地址

Redis
docker pull redis
docker run --name redis -d -p 6379:6379 redis
可以使用 Redis 客户端工具连接

连接成功可以看到服务器信息

MySQL
企业中用得最多的是 MySQL 5.7 版本
docker pull centos/mysql-57-centos7
# MYSQL_ROOT_PASSWORD是设置默认登录用户名和密码都是root
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
通过客户端例如 navicat、dbeaver 连接
Tomcat
可以先在 Docker Hub 中搜索 tomcat,找到对应的 tomcat 版本和 JDK 版本
# 下载镜像
docker pull tomcat
# 创建tomcat目录
mkdir -p /opt/docker/tomcat/ROOT
cd /opt/docker/tomcat/ROOT
# 创建index.html文件
vim index.html
# 写入简单内容
<html><h1>Hello Tomcat in Docker!</h1>
</html># 启动容器
docker run -d -p 8080:8080 --name tomcat -v /opt/docker/tomcat:/usr/local/tomcat/webapps tomcat
参数说明:
-
-p 8080:8080 :将容器的 8080 端口映射到主机的 8080 端口
-p XXX:YYY:前面的 XXX 指的是宿主机的端口,后面的 YYY 指的是容器中的端口 -
-v /opt/docker/tomcat:/usr/local/tomcat/webapps 将主机中 /opt/docker/tomcat 目录挂载到容器的 webapps
用浏览器打开 8080 端口

制作镜像
镜像原理
思考:
-
Docker 镜像本质是什么?
是一个分层文件系统
-
Docker 中一个 centos 镜像为什么只有200MB,而一个 centos 操作系统的 iso 文件要几个G ?
Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层
-
Docker 中一个 tomcat 镜像为什么有 600MB,而一个 tomcat 安装包只有 10多MB?
由于 docker 中镜像是分层的,tomcat 虽然只有10多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小 600多MB

镜像原理

基于已有容器创建
docker commit [OPTIONS] 容器名称或ID [镜像名称[:TAG]]
# 示例;使用MySQL容器创建镜像
docker commit 7c mysqltest:1.0# 查看镜像
docker images
# 启动容器
docker run -d -p 3306:3306 mysqltest:1.0
OPTIONS 参数说明:
- -a, --author string :作者信息
- -c, --change list :使用 Dockerfile 创建
- -m, --message string :提交信息
- -p, --pause :提交时暂停容器运行
使用 Dockerfile 创建镜像
Dockerfile 是一个文件,内容由一行行命令语句组成,主要分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
# 使用基础镜像
FROM ubuntu:latest
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置镜像的作者信息
#LABEL maintainer="Your Name <your.email@example.com>"
# 暴露容器的端口。非必需
#EXPOSE 80
# 定义环境变量
#ENV ENV_VARIABLE_NAME=value
# 执行更新操作并安装基本软件包。非必需
#RUN apt-get update && \
# apt-get install -y \
# software-properties-common \
# build-essential \
# curl# 设置工作目录
WORKDIR /app
# 复制本地文件到容器中
COPY . /app
# 执行容器启动时的命令
CMD ["command", "arg1", "arg2"]
# 或者,如果需要以可执行文件形式运行应用程序
# CMD ["./your_executable"]
# 或者,如果是需要通过ENTRYPOINT启动的服务
# ENTRYPOINT ["entrypoint_script.sh"]
指令说明
| 指令 | 说明 |
|---|---|
| FROM | 指定所创建镜像的基础镜像 |
| MAINTAINER | 维护者信息 |
| RUN | 运行命令 |
| CMD | 启动容器时默认执行命令 |
| LABEL | 标签信息 |
| EXPOSE | 声明镜像内服务所监听的端口 |
| ENV | 环境变量 |
| ADD | 复制指定路径下的内容到容器中的路径下,可以为URL,也可以是文件路径,如果为tar文件,会自动解压 |
| COPY | 复制宿主机的定路径下的内容到容器中的路径下 |
| USER | 运行容器时的用户名 |
| WORKDIR | 配置工作目录 |
| ARG | 指定镜像内使用的参数 |
构建应用
需求:构建一个 Web 应用,通过 docker 来运行
步骤:
-
使用 SpringBoot 搭建应用,并提供一个 REST 接口
@RestController public class HelloController {@GetMapping("/hello")public String hello(){return "Hello Docker!";} } -
将应用打包成 jar 包
-
将 jar 包上传到 Linux 服务器
-
构建 dockerfile 文件
创建 Dockerfile 文件
vi Dockerfile
编辑内容如下:
# Spring Boot 运行需要依赖java
FROM java:8
# 复制jar包到容器中
COPY docker-demo-0.0.1-SNAPSHOT.jar docker-demo-0.0.1-SNAPSHOT.jar
# 运行命令
CMD java -jar docker-demo-0.0.1-SNAPSHOT.jar
创建镜像
编写完成Dockerfile后,可以通过以下命令来创建镜像:
docker build [OPTIONS]
主要参数如下:
- -f :指定 Dockerfile 路径,默认为当前目录
- -t :指定生成镜像的标签信息
示例:
# 最后的.表示当前目录
docker build -t mywebapp:1.0 .
构建过程:

# 查看镜像
docker images
# 启动镜像
docker run -d -p 8080:8080 mywebapp:1.0
打开浏览器访问

相关文章:
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…...
在ensp中ACL路由控制实验
一、实验目的 掌握ACL路由控制管理 二、实验要求 要求: 配置路由策略,左右两边不公开区域对方不可达,其他区域可以互相ping通 设备: 1、三台路由器 2、四台交换机 3、四台电脑 4、四台服务器 使用ensp搭建实验环境,如图所…...
μC/OS-Ⅱ源码学习(3)---事件模型
快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) 本文开始,进入事件源码的学习。 事件模型 在一个多任务系统里,各个任务在系统的统筹下相继执行,由于执行速度极快&a…...
Jmeter进阶篇(30)深入探索 JMeter 监听器
前言 在性能测试领域里,Apache JMeter 是一款经典而强大的工具,而其中的监听器(Listeners)组件更是发挥着不可或缺的关键作用。 监听器就像敏锐的观察者,默默记录测试执行过程中的各种数据,作为系统性能分析的数据依据。 本文将带你全方位走进 JMeter 监听器的奇妙世界,…...
虚幻引擎的工程目录结构
虚幻引擎的工程目录结构如下: .idea/.vs:用于IDE(如IntelliJ IDEA或Visual Studio)的项目配置文件,包含工程设置和解决方案文件。 Binaries:存放编译后的可执行文件和相关的动态链接库(DLL&…...
深度学习中的yield
以下为例: def data_iter(batch_size, features, labels):num_examples len(features)indices list(range(num_examples))# 这些样本是随机读取的,没有特定的顺序random.shuffle(indices)for i in range(0, num_examples, batch_size):batch_indices …...
数据库数据恢复—ORACLE常见故障有哪些?如何恢复数据?
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。 Oracle数据库数据恢复方案: 1、检测存放数据库的服务器/存储设备是否存…...
使用JavaScrip和HTML搭建一个简单的博客网站系统
搭建一个简单的博客网站系统,我们需要创建几个基本的页面和功能:登录、注册、文章发布等。这里我们先实现一个基础版本,包括用户登录、注册以及文章发布的功能。由于这是一个简化版的示例,我们将所有逻辑集成在一个HTML文件中&…...
算法-字符串-76.最小覆盖子串
一、题目 二、思路解析 1.思路: 滑动窗口!!! 2.常用方法: 无 3.核心逻辑: 1.特殊情况:s或t是否为空字符串 if(snull||tnull)return ""; 2.声明一个字符数组——用于记录对应字符出现…...
Python爬虫之Selenium的应用
【1】Selenium基础介绍 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driv…...
粉丝生产力与开源 AI 智能名片 2+1 链动模式商城小程序的融合创新与价值拓展
摘要:本文聚焦于粉丝生产力在当代文化与商业语境中的独特作用,并深入探讨其与开源 AI 智能名片 21 链动模式商城小程序的有机结合。通过剖析粉丝生产力的多元表现形式、内在驱动机制以及开源 AI 智能名片 21 链动模式商城小程序的功能特性与商业潜力&…...
红黑树(Red-Black Tree)
一、概念 红黑树(Red Black Tree)是一种自平衡的二叉搜索树,通过添加颜色信息来确保在进行插入和删除操作时,树的高度保持在对数级别,从而保证了查找、插入和删除操作的时间复杂度为 O(log n)。这种树可以很好地解决普…...
Cocos 资源加载(以Json为例)
resources 通常我们会把项目中需要动态加载的资源放在 resources 目录下,配合 resources.load 等接口动态加载。你只要传入相对 resources 的路径即可,并且路径的结尾处 不能 包含文件扩展名。 resources.load("Inf", JsonAsset, (error, ass…...
解决 IntelliJ IDEA 启动错误:插件冲突处理
引言 在使用 IntelliJ IDEA 进行开发时,我们可能会遇到各种启动错误。本文将详细介绍一种常见的错误:插件冲突,并提供解决方案。 错误背景 最近,有用户在启动 IntelliJ IDEA 时遇到了一个错误,提示信息为:…...
SQL——DQL分组聚合
分组聚合: 格式: select 聚合函数1(聚合的列),聚合函数2(聚合的列) from 表名 group by 标识列; ###若想方便分辨聚合后数据可在聚合函数前加上标识列(以标识列进行分组) 常见的聚合函数: sum(列名):求和函数 avg(列名)…...
Ripro V5日主题 v8.3 开心授权版 wordpress主题虚拟资源下载站首选主题模板
RiPro主题全新V5版本,是一个优秀且功能强大、易于管理、现代化的WordPress虚拟资源商城主题。支持首页模块化布局和WP原生小工具模块化首页可拖拽设置,让您的网站设计体验更加舒适。同时支持了高级筛选、自带会员生态系统、超全支付接口等众多功能&#…...
分布式搜索引擎之elasticsearch基本使用2
分布式搜索引擎之elasticsearch基本使用2 在分布式搜索引擎之elasticsearch基本使用1中,我们已经导入了大量数据到elasticsearch中,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以j接下来,我们研究下…...
java学习-第十五章-IO流(java.io包中)
一、理解 1. 简单而言:流就是内存与存储设备之间传输数据的通道、管道。 2. 分类: (1) 按方向(以JVM虚拟机为参照物)【重点】 输入流:将中的内容读入到中。 输出流:将中的内容写入到中。 (2) 按单位: 字节流…...
企业如何实现数据从源端到消费端的全链路加工逻辑可视化?
要想实现数据加工链路的可视化,血缘图谱无疑是一个有效的工具。血缘图谱能够清晰地展示数据从产生、流转、加工到最终消费的每一个环节,帮助企业直观地理解数据之间的关联和依赖关系,轻松追溯数据来源和去向,并在数据出现问题时快…...
Toxicity of the Commons: Curating Open-Source Pre-Training Data
基本信息 📝 原文链接: https://arxiv.org/abs/2410.22587👥 作者: Catherine Arnett, Eliot Jones, Ivan P. Yamshchikov, Pierre-Carl Langlais🏷️ 关键词: toxicity filtering, language models, data curation📚 分类: 机器…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
