Docker简单记录
DockerFile文件
// 编辑好DockerFile文件后使用如下语句生成镜像 不要忘记最后的.
docker build -f DockerFile文件名 -t 镜像名:版本tag .
-
在
docker build命令中,最后的.表示 构建上下文(Build Context)的路径,它告诉 Docker 在构建镜像时从哪里获取文件(如COPY或ADD指令需要的文件)。这个点(.)代表当前目录。 -
可以直接如下不加-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)
根据下面的步骤构建好需要的文件,再使用命令
-
项目目录结构
-
your-project/ ├── Dockerfile # 构建 JavaWeb + Tomcat ├── docker-compose.yml # 定义 MySQL + Redis + Tomcat ├── your-webapp.war # 你的 WAR 包 └── init.sql # (可选)MySQL 初始化脚本
-
-
只构建 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)。
-
-
使用 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:
-
-
构建并运行
-
docker-compose up -d # 启动所有服务
-
-
访问:
- Tomcat:
http://localhost:8080 - MySQL:
jdbc:mysql://localhost:3306/your_db - Redis:
redis://localhost:6379
- Tomcat:
关键点
- Tomcat + JDK
- 直接使用
tomcat:jdkXX镜像,避免手动安装 JDK。 - WAR 包放在
webapps/下,Tomcat 会自动解压部署。
- 直接使用
- MySQL
- 使用
mysql:8.0镜像,通过environment配置数据库。 volumes持久化数据,避免容器重启后数据丢失。init.sql可初始化数据库表结构(可选)。
- 使用
- Redis
- 使用
redis:6.0镜像,默认无密码,可按需配置。
- 使用
- 网络互联
-
在
webapp服务中,MySQL 和 Redis 的主机名分别是mysql和redis(由 Docker Compose 自动解析)。 -
因此,JavaWeb 项目的数据库连接 URL 应写:
jdbc:mysql://mysql:3306/your_db redis.host=redis
-
浙公网安备 33010602011771号