20250706-11-Docker快速入门(下)-构建Nginx镜像和Tomcat镜像_笔记

发布于:2025-07-07 ⋅ 阅读:(22) ⋅ 点赞:(0)
一、构建镜像命令

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. 打包进镜像

动态挂载与静态打包的适用场景对比

⭐⭐⭐

镜像仓库原理

集中存储自建镜像与官方镜像

解决镜像分发问题

企业级仓库与本地仓库的安全策略差异

⭐⭐