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

docker构建镜像并运行容器详细过程

1,编写dockerfile


FROM openjdk:8-jre-slimLABEL maintainer="111@sina.com"RUN mkdir -p /blade/visualWORKDIR /blade/visualEXPOSE 9876COPY ./target/blade-visual.jar ./app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]CMD ["--spring.profiles.active=dev"]

 1. **`FROM openjdk:8-jre-slim`** 指定基础镜像:使用OpenJDK 8的JRE(Java运行时环境)精简版(slim)。 - `openjdk:8` 表示基于Java 8版本的OpenJDK - `jre` 表示仅包含运行时环境(而非完整的JDK开发环境),体积更小 - `slim` 是精简版镜像,去除了不必要的工具,进一步减小镜像体积

2. **`LABEL maintainer="111@sina.com"`** 添加元数据标签:声明镜像的维护者邮箱,方便追溯镜像的维护者。

3. **`RUN mkdir -p /blade/visual`** 在镜像构建阶段执行命令:创建目录 `/blade/visual`。 - `mkdir -p` 确保父目录不存在时也能递归创建(避免报错)

4. **`WORKDIR /blade/visual`** 设置工作目录:后续的命令(如COPY、ENTRYPOINT等)都会在 `/blade/visual` 目录下执行(相当于“cd 到该目录”)。

5. **`EXPOSE 9876`** 声明容器运行时暴露的端口:告知Docker该容器会使用9876端口对外提供服务(仅为声明,实际需通过`-p`参数映射到宿主机才能访问)。

6. **`COPY ./target/blade-visual.jar ./app.jar`** 复制文件到镜像:将本地(构建上下文)`target`目录下的`blade-visual.jar`文件,复制到镜像的当前工作目录(`/blade/visual`),并命名为`app.jar`(简化后续命令)。

7. **`ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]`** 定义容器启动时执行的固定命令:启动Java应用。 - `java -jar app.jar` 是运行jar包的标准命令 - `-Djava.security.egd=file:/dev/./urandom` 是优化参数:加快Java应用(尤其是使用Tomcat等组件时)的启动速度,避免因随机数生成阻塞(默认随机数生成器可能较慢)

8. **`CMD ["--spring.profiles.active=dev"]`** 定义容器启动时的默认参数:为`ENTRYPOINT`的命令提供默认参数。 - 这里指定Spring应用的激活环境为`dev`(即使用`application-dev.properties/yaml`配置文件) - 若运行容器时手动指定参数(如`docker run 镜像名 --spring.profiles.active=prod`),会覆盖此默认参数

**总结**:这个Dockerfile的作用是构建一个可运行`blade-visual` Java应用的镜像,基于OpenJDK 8环境,默认使用`dev`环境配置,暴露9876端口,启动时运行`app.jar`。 

2,构建镜像

docker build -t visual:dev .

3,查看镜像是否构建成功

docker images 

4,构建网络

docker network create my-network

 5,运行容器

docker run -d \
-p 9876:9001 \
--network my-network \
--name visual-dev \
-e "SPRING_PROFILES_ACTIVE=dev" \
visual:dev

  • 9876 是宿主机的端口(即你当前运行 Docker 的机器的端口);
  • 9001 是容器内部的端口(即容器中运行的应用程序实际监听的端口,比如这里的 visual:dev 镜像可能在容器内用 9001 端口提供服务)。

6,docker-compose文件

name: visual-dev
services:visual-1:build:context: .dockerfile_inline: |FROM openjdk:8-jre-alpineLABEL maintainer="chendl@ivdc.chinacdc.cn"RUN mkdir -p /blade/visualWORKDIR /blade/visualEXPOSE 9000ADD ./target/blade-visual.jar ./app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]CMD ["--spring.profiles.active=test"]image: blade-visual:dev1  container_name: visual-1-dev  networks:- tmports:- "9000:9000"visual-2:build:context: .dockerfile_inline: |FROM openjdk:8-jre-alpineLABEL maintainer="chendl@ivdc.chinacdc.cn"RUN mkdir -p /blade/visualWORKDIR /blade/visualEXPOSE 9000ADD ./target/blade-visual.jar ./app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]CMD ["--spring.profiles.active=test"]image: blade-visual:dev2  container_name: visual-2-dev  networks:- tmports:- "9001:9000"networks:tm:driver: bridge

7,构建命令

docker-compose build

8,运行

docker-compose up -d

 

http://www.dtcms.com/a/315521.html

相关文章:

  • HTML总结全览
  • JDK安装教程
  • 机器学习 集成学习之随机森林
  • 攻击实验(ARP欺骗、MAC攻击、报文洪水攻击、DNS欺骗)
  • 调用com对象的坑
  • 自由学习记录(77)
  • 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
  • 水库安全“守护者”:智能雨水情监测预报系统
  • 联发科芯片组曝高危漏洞:越界写入缺陷危及智能手机与物联网设备安全
  • 论文阅读笔记:《Curriculum Coarse-to-Fine Selection for High-IPC Dataset Distillation》
  • table行内--图片预览--image
  • 防御保护07-08
  • 2025年服务器漏洞生存指南:从应急响应到长效免疫的实战框架
  • 多层Model更新多层ListView
  • 4. 什么是字节码采用字节码的好处是什么
  • avue---upload 图片上传
  • 南柯电子|直流电机EMC整改:从干扰源到解决方案的实战指南
  • DHCP 握手原理
  • Laravel The requested URL /hellowzy was not found on this server. 404 问题的解决
  • gRPC Keepalive 机制详解与最佳实践
  • 本地部署文档管理平台 BookStack 并实现外部访问( Windows 版本)
  • C# LINQ(标准询运算符)
  • Windows 电脑远程访问,ZeroTier 实现内网穿透完整指南(含原理讲解)
  • 汽车OBD定位器:即插即用车辆管理省心又实用
  • CodeBuddy IDE 使用测评——半小时做一个web可视化数据工具
  • 数据可视化发展历程
  • eclipse类IDE导入现有工程教程
  • 分布式CAP定理
  • Java 中抽象概念的全面解析与实战指南
  • Python爬虫09_Requests用bs4进行数据解析