跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Shell / Bashjava

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

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

DataScient发布于 2026/3/16更新于 2026/4/2711 浏览
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. 启动镜像
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Spring Boot 安全认证与授权
  • OpenClaw 与 Telegram 机器人集成指南
  • COT 思维链:AI 拆解问题与逻辑推理方法
  • 机器学习模型评估:8 种算法对比实战
  • 绿联云 NAS 配置 WebDAV 实现公网同步
  • 从零搭建 AI 运维系统:MCP AI Copilot 架构与部署
  • macOS 下升级 Python 的几种主流方案
  • 在线图书借阅平台的设计与实现:Spring Boot 实战
  • Python 环境下安装 pydbg 及依赖库配置指南
  • 结合 Whisper 与 pyannote.audio 实现说话人分离转写系统
  • ERNIE-4.5-0.3B 开源模型部署与性能测评指南
  • SuperMerger 插件:Stable Diffusion 模型融合使用指南
  • 修复 Anaconda 开始菜单快捷方式丢失及 mkmenus 报错
  • JeecgBoot 低代码平台 AI 功能与零代码开发指南
  • OpenHarmony 工具适配:tree 2.2.1 交叉编译与 HNP 打包
  • C++ STL 容器适配器:stack 与 queue 剖析
  • Comfy-Photoshop-SD 集成指南:在 Photoshop 中集成 Stable Diffusion 工作流
  • Cubase 15 核心定位与潜在新功能分析
  • 前端 DOM 操作核心知识与实战解析
  • sscom软件

相关免费在线工具

  • 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