跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bashjava

Docker 快速部署 Nginx、Redis、MySQL、Tomcat 及制作镜像

Docker 技术用于快速部署 Nginx、Redis、MySQL 和 Tomcat 等服务,并支持通过 commit 或 Dockerfile 方式制作自定义镜像。基础镜像原理、容器创建流程及基于 Spring Boot 应用的镜像构建方法,涵盖端口映射、卷挂载等关键配置。

DataScient发布于 2026/3/16更新于 2026/6/1531 浏览
Docker 快速部署 Nginx、Redis、MySQL、Tomcat 及制作镜像

应用快速部署

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
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 端口。

页面展示

制作镜像

镜像原理

思考:

  1. Docker 镜像本质是什么?是一个分层文件系统。
  2. Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个 G?Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层。
  3. 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 <[email protected]>"
# 暴露容器的端口。非必需
# 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 来运行。

步骤:

  1. 将应用打包成 jar 包。
  2. 将 jar 包上传到 Linux 服务器。
  3. 构建 dockerfile 文件。

使用 SpringBoot 搭建应用,并提供一个 REST 接口。

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello Docker!";
    }
}
创建 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

打开浏览器访问。

访问结果

目录

  1. 应用快速部署
  2. Nginx
  3. Redis
  4. MySQL
  5. Tomcat
  6. 下载镜像
  7. 创建 tomcat 目录
  8. 创建 index.html 文件
  9. 写入简单内容
  10. 启动容器
  11. 制作镜像
  12. 镜像原理
  13. 基于已有容器创建
  14. 示例;使用 MySQL 容器创建镜像
  15. 查看镜像
  16. 启动容器
  17. 使用 Dockerfile 创建镜像
  18. 使用基础镜像
  19. 设置时区
  20. 设置镜像的作者信息
  21. LABEL maintainer="Your Name <[email protected]>"
  22. 暴露容器的端口。非必需
  23. EXPOSE 80
  24. 定义环境变量
  25. ENV ENVVARIABLENAME=value
  26. 执行更新操作并安装基本软件包。非必需
  27. RUN apt-get update && \
  28. apt-get install -y \
  29. software-properties-common \
  30. build-essential \
  31. curl
  32. 设置工作目录
  33. 复制本地文件到容器中
  34. 执行容器启动时的命令
  35. 或者,如果需要以可执行文件形式运行应用程序
  36. CMD ["./your_executable"]
  37. 或者,如果是需要通过 ENTRYPOINT 启动的服务
  38. ENTRYPOINT ["entrypoint_script.sh"]
  39. 指令说明
  40. 构建应用
  41. 创建 Dockerfile 文件
  42. Spring Boot 运行需要依赖 java
  43. 复制 jar 包到容器中
  44. 运行命令
  45. 创建镜像
  46. 最后的.表示当前目录
  47. 查看镜像
  48. 启动镜像
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 无人机红外照片处理中的温度校准与精度优化策略
  • Trae 集成图片素描 MCP 工具实现多风格素描转换
  • 自回归生成原理剖析:从零实现一个‘逐字生成‘的AI写作模型
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • VS Code Copilot 实战指南:从安装到智能编码
  • 网络安全人才缺口大为何招聘少?两大原因解析与学习路径
  • 首席情绪架构师(CEA):工程化写作的总设计师
  • TqSdk与VnPy两款Python量化框架对比
  • GLM-4.7 与 Dify 平台深度集成实践
  • Java IO API 获取文件元素的方法
  • 商汤开源 SenseNova-MARS 多模态自主推理模型
  • Dify 前后端分离:独立启动前端 Docker 容器指南
  • AI 赋能软件测试全流程解析与实战指南
  • 昇腾 NPU 部署 CodeLlama 实战指南
  • 数据结构:基于队列的二叉树深度计算(层次遍历实现)
  • 探索 Ovis 多模态大模型量化实战指南
  • 大模型时代人形机器人感知:视觉 - 语言模型在机器人中的应用
  • Windows 11 安装 JDK 25:下载、配置环境变量及验证
  • 大模型 AI 产品经理学习路径:从基础到实战的完整指南
  • 宇树机器人g1二次开发:建图,定位,导航手把手教程(四)导航仿真部分:建完图之后打开仿真导航

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online