Docker简单记录

DockerFile文件

// 编辑好DockerFile文件后使用如下语句生成镜像  不要忘记最后的.  
docker build -f DockerFile文件名 -t 镜像名:版本tag .
  • docker build 命令中,最后的 . 表示 构建上下文(Build Context)的路径,它告诉 Docker 在构建镜像时从哪里获取文件(如 COPYADD 指令需要的文件)。这个点(.)代表当前目录

  • 可以直接如下不加-f,默认则去找名字为Dockerfile的文件

    docker build -t 镜像名:版本tag .
    
  • 如何给别用人:

    • 【推荐】构建好镜像给别人用:
      • 通过docker build生成镜像,web目录挂载到服务器
      • 上传项目【jar包或者war包】到服务器挂载的文件夹,即镜像里面已经有了项目
      • 该镜像里面已经有了 环境+项目
      • 此时要么上传该镜像到运程供别人下载,要么执行docker save命令,生成压缩包保存到本地再发给别人。
    • DockerFile文件名和程序包发给别人,别人自己去构建镜像吧

Docker Compose

Docker Compose可以一下开启多个镜像

  • 启动所有服务:docker-compose up -d

    • 执行docker-compose.yml文件的配置
  • Docker Compose 的核心是服务编排,适合本地开发、测试和轻量级部署。

  • 如何给别用人:

    • 项目目录结构里用到的文件打包发给别人

    • your-project/
      ├── Dockerfile          # 构建 JavaWeb + Tomcat
      ├── docker-compose.yml  # 定义 MySQL + Redis + Tomcat
      ├── your-webapp.war     # 你的 WAR 包
      └── init.sql            # (可选)MySQL 初始化脚本
      
  • 生产环境编排总结

    方案 适用场景 复杂度 高可用 自动扩缩容
    docker-compose up 单机、测试环境
    Docker Swarm 中小集群、基础高可用 ⭐⭐ 手动
    Kubernetes 大规模生产环境 ⭐⭐⭐
    云托管服务 无运维团队、快速上云 ⭐⭐

实例

场景:一个 JavaWeb 项目(Tomcat + MySQL + Redis)

根据下面的步骤构建好需要的文件,再使用命令

  1. 项目目录结构

    • your-project/
      ├── Dockerfile          # 构建 JavaWeb + Tomcat
      ├── docker-compose.yml  # 定义 MySQL + Redis + Tomcat
      ├── your-webapp.war     # 你的 WAR 包
      └── init.sql            # (可选)MySQL 初始化脚本
      
  2. 只构建 JavaWeb + Tomcat 的 Dockerfile

    • 如果你的项目是标准的 WAR 包部署到 Tomcat,可以这样写:Dockerfile

    • # 使用官方 Tomcat + JDK 镜像(推荐)
      FROM tomcat:9.0-jdk11-openjdk
      
      # 删除 Tomcat 默认的 ROOT 应用(可选)
      RUN rm -rf /usr/local/tomcat/webapps/ROOT
      
      # 复制 WAR 包到 Tomcat 的 webapps 目录
      COPY your-webapp.war /usr/local/tomcat/webapps/ROOT.war
      
      # 暴露 Tomcat 默认端口
      EXPOSE 8080
      
      # 启动 Tomcat(Tomcat 镜像已默认设置 CMD,这里可以省略)
      # CMD ["catalina.sh", "run"]
      
    • 说明

      • tomcat:9.0-jdk11-openjdk 已包含 JDK 11 和 Tomcat 9,无需额外安装。
      • your-webapp.war 重命名为 ROOT.war 可以让应用直接运行在 / 路径(否则访问需加 /your-webapp)。
  3. 使用 Docker Compose 整合 MySQL + Redis

    • 由于 MySQL 和 Redis 应该独立运行,推荐使用 docker-compose.yml 管理多个容器:

      version: '3.8'
      
      services:
        # JavaWeb + Tomcat 服务
        webapp:
          build: .  # 使用当前目录的 Dockerfile
          ports:
            - "8080:8080"
          depends_on:
            - mysql
            - redis
          environment:
            - DATABASE_URL=jdbc:mysql://mysql:3306/your_db
            - REDIS_HOST=redis
      
        # MySQL 服务
        mysql:
          image: mysql:8.0
          ports:
            - "3306:3306"
          environment:
            - MYSQL_ROOT_PASSWORD=your_root_password
            - MYSQL_DATABASE=your_db
            - MYSQL_USER=your_user
            - MYSQL_PASSWORD=your_password
          volumes:
            - mysql-data:/var/lib/mysql
            - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # (可选)初始化 SQL
      
        # Redis 服务
        redis:
          image: redis:6.0
          ports:
            - "6379:6379"
          volumes:
            - redis-data:/data
      
      # 数据卷(持久化数据)
      volumes:
        mysql-data:
        redis-data:
      
  4. 构建并运行

    • docker-compose up -d  # 启动所有服务
      
  5. 访问:

    • Tomcat: http://localhost:8080
    • MySQL: jdbc:mysql://localhost:3306/your_db
    • Redis: redis://localhost:6379

关键点

  1. Tomcat + JDK
    • 直接使用 tomcat:jdkXX 镜像,避免手动安装 JDK。
    • WAR 包放在 webapps/ 下,Tomcat 会自动解压部署。
  2. MySQL
    • 使用 mysql:8.0 镜像,通过 environment 配置数据库。
    • volumes 持久化数据,避免容器重启后数据丢失。
    • init.sql 可初始化数据库表结构(可选)。
  3. Redis
    • 使用 redis:6.0 镜像,默认无密码,可按需配置。
  4. 网络互联
    • webapp 服务中,MySQL 和 Redis 的主机名分别是 mysqlredis(由 Docker Compose 自动解析)。

    • 因此,JavaWeb 项目的数据库连接 URL 应写:

      jdbc:mysql://mysql:3306/your_db
      redis.host=redis
      
posted @ 2025-04-12 16:55  deyang  阅读(34)  评论(0)    收藏  举报