当前位置: 首页 > ai >正文

docker

什么是docker

Docker 是一个开源的容器化平台,它允许开发者将应用及其所有依赖打包到一个标准化的容器中。每个容器都包含应用运行所需的所有环境,确保在任何环境下都能够一致地运行。

换句话来说doker就是一个集中化的镜像库,里面集成了各种镜像的库

什么是镜像:简单来说就是集成了环境,配置文件等无需安装和配置的安装包,能在各种服务器直接运行,例如mysql我在服务器上配置时候就需要配置各种信息来适配服务器,用doker拉取就不需要这么复杂,直接拉取mysql镜像就能直接在服务器上运行

使用 Docker 部署 Java 项目

步骤一:准备 Dockerfile

Dockerfile 是一个用于定义 Docker 容器环境的脚本文件。在 Dockerfile 中,你可以指定容器所需的操作系统、安装的依赖包、配置环境变量等。

# 使用一个官方 JDK 镜像作为基础镜像
FROM openjdk:11-jre-slim# 设置工作目录
WORKDIR /app# 将项目的 JAR 文件复制到容器中
COPY target/my-java-project.jar /app/my-java-project.jar# 设置容器启动时执行的命令
CMD ["java", "-jar", "my-java-project.jar"]

FROM openjdk:11-jre-slim: 这是指定一个基础镜像,openjdk:11-jre-slim 是一个包含 JDK 运行时环境(JRE)的精简版镜像。
WORKDIR /app: 这指定容器内的工作目录,所有接下来的命令会在这个目录下执行。
COPY target/my-java-project.jar /app/my-java-project.jar: 将你编译好的 JAR 文件从本地复制到容器内。
CMD [“java”, “-jar”, “my-java-project.jar”]: 指定容器启动时运行的命令,这里启动 Java 应用。

步骤二:准备 docker-compose.yml 文件

Docker Compose 是一个工具,用来定义和管理多个 Docker 容器。你可以通过一个 docker-compose.yml 文件来定义多个容器,例如 MySQL 和 Java 应用容器,并让它们组成一个网络。

没有compose之前,我们需要手动将各种容器手动添加到一个网络,然后依次部署,这样非常麻烦,而compose就是帮我们做了这样的操作

示例 docker-compose.yml:

version: '3.8'services:# MySQL 服务mysql:image: mysql:5.7container_name: mysql-containerenvironment:MYSQL_ROOT_PASSWORD: rootpasswordMYSQL_DATABASE: mydatabaseports:- "3306:3306"networks:- app-network# PostgreSQL 服务postgres:image: postgres:13container_name: postgres-containerenvironment:POSTGRES_PASSWORD: postgrespasswordPOSTGRES_DB: mydbports:- "5432:5432"networks:- app-network# Redis 集群(3个节点)redis-node-1:image: redis:6.0container_name: redis-node-1command: redis-server --appendonly yesports:- "6379:6379"networks:- app-networkvolumes:- redis-data-1:/dataredis-node-2:image: redis:6.0container_name: redis-node-2command: redis-server --appendonly yesports:- "6380:6379"networks:- app-networkvolumes:- redis-data-2:/dataredis-node-3:image: redis:6.0container_name: redis-node-3command: redis-server --appendonly yesports:- "6381:6379"networks:- app-networkvolumes:- redis-data-3:/data# Kafka 集群(2个节点)kafka-broker-1:image: wurstmeister/kafka:latestcontainer_name: kafka-broker-1environment:KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka-broker-1:9093KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXTKAFKA_LISTENER_NAME_INSIDE: INSIDEKAFKA_LISTENERS: INSIDE://0.0.0.0:9093KAFKA_LISTENER_PORT: 9093KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181ports:- "9093:9093"networks:- app-networkdepends_on:- zookeeperkafka-broker-2:image: wurstmeister/kafka:latestcontainer_name: kafka-broker-2environment:KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka-broker-2:9093KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXTKAFKA_LISTENER_NAME_INSIDE: INSIDEKAFKA_LISTENERS: INSIDE://0.0.0.0:9093KAFKA_LISTENER_PORT: 9093KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181ports:- "9094:9093"networks:- app-networkdepends_on:- zookeeper# Zookeeper 集群(Kafka 需要 Zookeeper)zookeeper:image: wurstmeister/zookeeper:latestcontainer_name: zookeeperenvironment:ZOOKEEPER_CLIENT_PORT: 2181ports:- "2181:2181"networks:- app-network# RabbitMQ 服务rabbitmq:image: rabbitmq:managementcontainer_name: rabbitmq-containerports:- "15672:15672"  # Management UI- "5672:5672"    # AMQPnetworks:- app-network# Java 应用服务java-app:build:context: .  # 使用当前目录的 Dockerfile 构建镜像container_name: java-app-containerdepends_on:- mysql- postgres- kafka-broker-1- kafka-broker-2- redis-node-1- rabbitmqports:- "8080:8080"environment:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabaseSPRING_DATASOURCE_USERNAME: rootSPRING_DATASOURCE_PASSWORD: rootpasswordSPRING_REDIS_HOST: redis-node-1SPRING_KAFKA_BOOTSTRAP-SERVERS: kafka-broker-1:9093,kafka-broker-2:9093SPRING_RABBITMQ_HOST: rabbitmqnetworks:- app-networknetworks:app-network:driver: bridgevolumes:redis-data-1:redis-data-2:redis-data-3:

步骤三:启动容器

在准备好 docker-compose.yml 文件后,可以按照以下步骤启动容器:

构建和启动服务:

docker-compose up --build -d

这条命令会构建所有服务(包括你的 Java 应用)并在后台启动容器。

查看服务运行状态:

使用以下命令来查看正在运行的服务:

docker-compose ps

停止服务:

如果你需要停止所有容器,可以运行:

docker-compose down

问题

我们项目中开发人员,一般只需要开发好java项目,且编写好dockerfile文件就可以了,部署这些需要运维人员去操作,并且一些公司都实现了自动化部署功能,我们只需要把代码提交到代码仓库,就能触发自动化脚本构建,一键部署

http://www.xdnf.cn/news/1665.html

相关文章:

  • 通付盾入选苏州市网络和数据安全免费体验目录,引领企业安全能力跃升
  • 智能小助手部署 Win10 + ollama的Deepseek + CentOS+ maxKB
  • C语言结构体和union内存对齐
  • 3.4/Q1,GBD数据库最新文章解读
  • 新增优惠券
  • 如何计算光伏电站的收益率
  • PyQt6基础_QProgressDialog
  • Discuz!+DeepSeek赋能虎跃办公:传统网址导航的智能进化之路
  • Python实例题:使用Pvthon3编写系列实用脚本
  • 【Java】jdk8安装——英文版
  • Java快速上手之实验4(接口回调)
  • 第13章:MCP服务端项目开发实战:向量检索
  • 如何在Spring Boot中配置自定义端口运行应用程序
  • 2025上海车展:光峰科技全球首发“灵境”智能车载光学系统
  • linux 中断子系统 层级中断编程
  • 【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》
  • Python中random库的应用
  • openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解
  • 【项目管理】进度网络图 笔记
  • Redis--预备知识以及String类型
  • 【刷题系列】LeetCode消失的数字、轮转数组
  • 前端微服务详解
  • Datawhale AI春训营——用AI帮助老人点餐
  • Redis 及其在系统设计中的作用
  • Docker 的基本概念和优势以及在应用程序开发中的实际应用
  • 金融行业一体化运维监控平台解决方案
  • 阶段性人生答疑解惑篇:穿越市场迷雾,重构生命坐标系
  • Java Thread类深度解析:构造方法与核心方法全攻略
  • 多级缓存架构深度解析:从设计原理到生产实践
  • 【AI提示词】艺人顾问