Docker

目录

[1. 什么是 Docker](#1. 什么是 Docker)

[2. Docker 的工作流程](#2. Docker 的工作流程)

[3. Docker 的特性](#3. Docker 的特性)

[4. 什么是 DockerFile](#4. 什么是 DockerFile)


1. 什么是 Docker

Docker,翻译过来就是码头工人

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

小知识:沙盒也叫沙箱(sandbox)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。

2. Docker 的工作流程

  • 构建镜像:通过编写 dockerfile 来进行构建

  • 推送镜像到仓库:将镜像上传到 Docker Hub 或私有注册表中

  • 拉取镜像:通过 docker pull 从从仓库中拉取镜像

  • 运行容器:使用镜像创建并启动容器

  • 管理容器:使用 Docker 客户端命令管理正在运行的容器,如查看日志、停止容器、查看资源使用情况等

  • 网络与存储:容器之间通过 Docker 网络连接,数据通过 Docker 卷或绑定挂载进行持久化

3. Docker 的特性

文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。

资源隔离 :系统资源,像 CPU 和内存等可以分配到不同的容器中,使用 cgroup。网络隔离:每个进程容器运行在自己的网路空间,虚拟接口和IP地址。

日志记录:Docker 将收集到和记录的每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或者批量检索

变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或者手动配置。

交互式shell:Docker 可以分配一个虚拟终端并且关联到任何容器的标准输出上,例如运行一个一次性交互 shell。

4. 什么是 DockerFile

Dockerfile 是一个创建镜像所有命令的文本文件,包含了一条条指令和说明, 每条指令构建一层,,通过 docker build 命令,根据 Dockerfile 的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建。有了 Dockerfile,,就可以制定自己的docker镜像规则,只需要在 Dockerfile 上添加或者修改指令,,就可生成 docker 镜像。

java 复制代码
# 1. 构建阶段
# 使用 Maven 3.6.3 和 JDK 8 的镜像来构建 Java 项目
FROM maven:3.6.3-jdk-8 AS builder

# 2. 设置工作目录
# 设置工作目录为 /app,后续的命令都将在该目录下执行
WORKDIR /app

# 3. 复制 pom.xml 文件
# 将主机上的 pom.xml 文件复制到容器中的 /app 目录下
COPY pom.xml .

# 4. 复制 src 目录
# 将主机上的 src 目录(包含源代码)复制到容器中的 /app/src 目录下
COPY src ./src

# 5. 使用 Maven 构建项目
# 运行 Maven 命令清理并打包项目,跳过单元测试以加速构建过程
RUN mvn clean package -DskipTests

# 6. 运行阶段
# 使用 Eclipse Temurin 8 JRE 镜像(基于 Alpine Linux),适用于生产环境,只包含 Java 运行时环境
FROM eclipse-temurin:8-jre-alpine

# 7. 设置工作目录
# 在运行阶段再次设置工作目录为 /app
WORKDIR /app

# 8. 从构建阶段复制生成的 JAR 文件
# 从构建阶段(builder)中复制构建出的 JAR 文件到当前镜像的 /app/app.jar
# 假设构建出来的文件名是 nettychat-*.jar
COPY --from=builder /app/target/nettychat-*.jar app.jar

# 9. 暴露端口
# 通知 Docker 该容器将监听 8080 和 8082 端口
EXPOSE 8080 8082

# 10. 设置容器启动时的默认命令
# 容器启动时运行 'java -jar app.jar' 来启动应用程序
ENTRYPOINT ["java", "-jar", "app.jar"]
相关推荐
william_yangshun4 分钟前
【AI实战】rakazo中文版使用教程:3869星开源AI agent,Docker一条命令跑起来
人工智能·docker·开源
程序员-Benothing5 分钟前
Linux CPU性能分析:top、mpstat、pidstat、perf实战
linux·运维·服务器
William.csj7 分钟前
Bitvise SSH Client——配置跳板机:通过中转服务器连接内网服务器
运维·服务器·ssh
小诗懂技术11 分钟前
Linux设备驱动并发控制总结_CSDN
linux·运维·服务器
colinu12 分钟前
Docker 容器端口未发布问题快速排查文档
运维·docker·容器
迪康coolmu20 分钟前
迪康Defender网络准入控制系统落地实战:部署、配置与问题排查记录
运维·开发语言·网络·经验分享·php
Dovis(誓平步青云)20 分钟前
一年1956亿行:智能电表场景下的时序数据存储实践
运维·前端·自动化·音视频·prometheus
不停喝水30 分钟前
【前端转全栈java速通课】 项目实战④12-14节 拦截器过滤器和全局配置-cors跨域设置-token体系-利用session做验证码
java·开发语言·前端·ai·容器
小白鸽i30 分钟前
【linux】麒麟桌面版安装人大金仓V8
linux·运维
Ruiery35 分钟前
Linux 6.6内核内存管理深度解析(三):页表与缺页处理 — 虚拟地址怎么按需映射到物理页
linux·运维·服务器