20250706-11-Docker快速入门(下)-构建Nginx镜像和Tomcat镜像_笔记
一、构建镜像命令
1. Dockerfile常用指令
- FROM: 指定新镜像的基础镜像
- LABEL: 为镜像添加元数据标签
- RUN: 构建时执行的Shell命令
- COPY: 拷贝文件/目录到镜像中
- ADD: 自动解压压缩包并拷贝
- ENV: 设置环境变量
- USER: 为RUN/CMD/ENTRYPOINT指定运行用户
- EXPOSE: 声明容器服务端口
- WORKDIR: 设置工作目录
- CMD: 容器启动时默认执行的命令(多个CMD时最后一个生效)
- 多行命令技巧: 使用&& \连接符可以执行多行命令
- 数据持久化原则: 应用程序服务产生的数据应尽量放到单独目录(如/data),构建时不打包已生成数据
2. 构建Nginx镜像
- 编译安装步骤:
- 安装依赖包(gcc等开发工具)
- 执行./configure检查环境
- make编译
- make install安装
- 关键配置:
- 设置时区:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 环境变量:ENV PATH$PATH:/usr/local/nginx/sbin
- 工作目录:WORKDIR /usr/local/nginx
- 前台启动:CMD ["nginx", "-g", "daemon off;"]
- 目录映射注意: 编译安装的Nginx默认网站根目录为/usr/local/nginx/html,与yum安装的/usr/share/nginx/html不同
1)构建Tomcat镜像
- 核心步骤:
- 安装JDK:yum install java-1.8.0-openjdk
- 解压二进制包:ADD apache-tomcat-${VERSION}.tar.gz /usr/local/
- 优化配置:添加JAVA_OPTS参数防止随机数生成阻塞
- 设置时区:同Nginx配置
- 启动方式: 使用catalina.sh run保持前台运行
- 版本管理技巧: 通过ENV VERSION=8.5.43定义变量,便于版本升级维护
- 开发环境实践: 将构建产物挂载到容器对应目录(如前端项目挂载到Nginx的html目录)
二、Harbor镜像仓库搭建与使用
1. Harbor概述
- 定义: 由VMWare公司开源的容器镜像仓库,基于Docker Registry进行企业级扩展
- 企业级特性:
- 提供管理用户界面
- 基于角色的访问控制
-
AD/LDAP\mathrm{AD}/\mathrm{LDAP}AD/LDAP
集成 - 审计日志功能
- 官方资源:
- 官网: https://goharbor.io/
- Github: https://github.com/goharbor/harbor
三、Tomcat容器化实践
1. 基础环境安装
- 关键依赖:
- Java环境: java-1.8.0-openjdk-headless-1.8.0.262.b10
- 图形库: libXtst-1.2.3, libXcursor-1.1.15
- 字体处理: fribidi-1.0.2, harfbuzz-1.7.5
2. 镜像构建与运行
- 关键步骤:
- 设置环境变量: ENV PATH$PATH:/usr/local/tomcat/bin
- 工作目录: WORKDIR /usr/local/tomcat
- 暴露端口: EXPOSE 8080
- 启动命令: CMD ["catalina.sh", "run"]
- 运行命令: docker run -d -p 8081:8080 tomcat:v1
3. 容器目录挂载
- 网站根目录: /usr/local/tomcat/webapps/ROOT
- 修改方法:
- 直接进入容器修改index.jsp文件
- 或通过挂载目录方式: docker run -d -p 8082:8080 -v /opt/wwwroot/:/usr/local/tomcat/webapps/ROOT tomcat:v1
- 验证方式: 访问8081端口查看默认页面,8082端口查看修改后内容
4. 其他应用容器化
- Java应用部署:
- 基础镜像: FROM java:8-jdk-alpine
- 环境变量: ENV JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8"
- 启动命令: CMD ["/bin/sh", "-c", "java -jar$JAVA_OPTS /hello.jar"]
- 优势:
- 环境配置文档化,便于长期维护
- 可复用性强,修改后快速构建新镜像
- 支持静态资源直接挂载和动态应用打包两种部署方式
四、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
Docker镜像构建 | 使用Dockerfile构建Nginx镜像的两种方式:yum安装和编译安装 | RUN vs CMD指令区别 ADD自动解压特性 | ⭐⭐ |
Nginx容器部署 | 端口映射与目录挂载实践: - 修改默认网站根目录 - 多容器端口区分 | 网站根目录不一致导致访问差异 容器间共享宿主机目录的风险 | ⭐⭐ |
编译安装四步骤 | 1. 安装依赖包 2. ./configure检查环境 3. make编译 4. make install安装 | 编译参数--prefix的作用 依赖包缺失的典型报错 | ⭐⭐⭐ |
Tomcat容器化 | 二进制部署流程: 1. 安装JDK环境 2. 下载Tomcat二进制包 3. 移动至目标目录 | webapps目录结构解析 JSP与HTML混编可行性 | ⭐⭐ |
镜像版本管理 | 标签化实践: - nginx:v1(yum安装) - nginx:v2(编译安装) | 相同应用不同版本的并行测试方法 | ⭐ |
开发环境构建 | 两种项目部署方式: 1. 挂载宿主机目录 2. 打包进镜像 | 动态挂载与静态打包的适用场景对比 | ⭐⭐⭐ |
镜像仓库原理 | 集中存储自建镜像与官方镜像 解决镜像分发问题 | 企业级仓库与本地仓库的安全策略差异 | ⭐⭐ |