欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > docker

docker

2025/5/10 22:56:17 来源:https://blog.csdn.net/qq_44819486/article/details/145602914  浏览:    关键词: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文件就可以了,部署这些需要运维人员去操作,并且一些公司都实现了自动化部署功能,我们只需要把代码提交到代码仓库,就能触发自动化脚本构建,一键部署

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词