为什么要使用docker,docker有什么用??一篇文章带你快速了解docker。

为什么要使用docker,docker有什么用??一篇文章带你快速了解docker。

1. Docker 是什么?

Docker 是一个 容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,并在任何支持 Docker 的环境中运行。

类比:Docker 就像“软件集装箱”,让应用可以在不同环境中无缝运行,而不用担心环境差异导致的问题。

核心概念:

镜像(Image):只读模板,包含运行应用所需的代码、库、环境等(类似于“安装包”)。

容器(Container):镜像的运行实例(类似于“进程”),独立且隔离。

Dockerfile:定义如何构建镜像的脚本文件。

2. 为什么使用 Docker?它能解决什么问题?

可以让应用程序快速部署,安全运行,并且使其更容易跨环境迁移和管理

(1)解决“在我机器上能跑,线上却报错”的问题

传统方式:开发、测试、生产环境不一致,导致应用在不同环境表现不同。

Docker 方案:通过容器封装应用和依赖,确保 “一次构建,到处运行”。

(2)快速部署与扩展

传统方式:部署新服务器需要手动安装环境(如 Java、MySQL、Nginx),耗时且易出错。

Docker 方案:直接运行容器,秒级启动,支持自动化扩缩容(如 Kubernetes)。

(3)资源利用率高,轻量级

虚拟机(VM):每个 VM 需要独立操作系统,占用大量 CPU、内存。

Docker 容器:共享主机 OS,更轻量,启动更快,资源占用更少。

Docker 容器传统虚拟机启动时间秒级分钟级性能接近原生有损耗硬盘占用MB 级GB 级隔离性进程级隔离完整 OS 隔离

当然和传统虚拟机的区别还是很大的,

虚拟机包含操作系统的完整副本,包括内核及所有驱动和应用,因此占用更多的磁盘空间和内存。而docker在操作系统层面进行虚拟化,共享宿主机的操作系统内核。

虚拟机需要独立的维护和管理,包括操作系统和应用的更新。容器可以通过容器编排工具(如 Kubernetes)进行集中管理,易于自动化和扩展。容器的无状态性使得更新和维护更简单,可以快速部署和回滚应用

(4)微服务架构的最佳搭档

微服务需要多个独立服务协同工作,Docker 让每个服务可以独立打包、部署、伸缩。

例如:电商系统拆分为 用户服务、订单服务、支付服务,每个服务运行在单独容器中。

(5)持续集成/持续交付(CI/CD)

开发 → 构建镜像 → 测试 → 生产,全流程自动化。

例如:GitHub + Docker + Jenkins 实现自动化部署。

3. Docker 的典型应用场景

(1)本地开发环境标准化

新成员加入团队时,无需手动配环境,直接运行 docker-compose up 即可启动全套服务(如 MySQL + Redis + Nginx)。

(2)快速搭建测试环境

测试人员可以一键启动隔离的测试环境,避免污染本地数据。

(3)云原生与微服务

Docker是一个容器编排工具,可以帮助我们管理应用程序。但是,如果想要管理大量的容器,就需要更为强大的编排工具,而 Kubernetes(K8s)就是这样一个工具。

Kubernetes(K8s)管理成千上万个 Docker 容器,实现自动化运维。

(4)边缘计算与 IoT

在资源受限的设备(如树莓派)上运行容器化应用。

关于dockerfile 文件 和 docker compose的理解

Dockerfile 是一个文本文件,用于自动化地构建 Docker 镜像。Dockerfile 定义了从基础镜像开始,按步骤配置环境和部署应用所需要的所有命令。

比如:以下是一个常用dockerfile文件的相关设置

# 设置Java 17 官方镜像作为基础镜像

FROM openjdk:17-jdk

# 设置维护者信息

LABEL maintainer="zsy"

# 设置环境变量,可以设置默认的环境变量用于应用配置

ENV SPRING_PROFILES_ACTIVE=dev \

# 可选 JAVA_OPTS="-Xmx512m -Xms256m"

# 设置容器内的工作目录

WORKDIR /work-App

# 将 jar 包复制到工作目录

COPY target/boot.jar work-App.jar

# 设置对外暴露的端口号

EXPOSE 8080

# 容器健康检查设置,用于定期检查应用是否崩掉

HEALTHCHECK --interval=1m --timeout=10s \

CMD curl -f http://localhost:8080/actuator/health || exit 1

docker Compose又是什么呢?像我们项目中使用的redis,MQ,mysql等中间件,不能写在dockerfile里面吧。都有各自独立的镜像。Docker Compose就是用来一键启动所有的其他的服务的。

文件名后缀为yml,比如,docker-compose.yml

version: '0.0.1'

services:

web:

image: nginx:latest

ports:

- "80:80"

volumes:

- ./webroot:/usr/share/nginx/html

depends_on:

- app

app:

build:

context: ./app

dockerfile: Dockerfile

environment:

- DEBUG=false

depends_on:

- db

db:

image: postgres:latest

environment:

- POSTGRES_USER=exampleuser

- POSTGRES_PASSWORD=examplepass

volumes:

- db-data:/var/lib/postgresql/data

volumes:

db-data:

使用docker-compose up一键启动和停止

4. Docker 核心命令速查

docker run:启动一个新的容器

docker ps:列出正在运行的容器

docker ps -a:列出所有容器

docker stop: 停止正在运行的容器

docker start: 启动已停止的容器

docker rm:删除容器

docker images: 列出本地镜像

docker pull:从镜像仓库拉取或更新指定的镜像

docker build: 使用 Dockerfile 构建镜像

docker logs :查看日志

docker logs -f :实时跟踪日志输出

docker logs --tail 50 :查看最新的50行日志

docker logs --since 30m :查看最近30分钟的日志

5. Docker 的局限性

不适合 GUI 应用:主要针对服务端应用。

安全性低于虚拟机:容器共享主机内核,隔离性较弱(但可通过安全配置优化)。

镜像可能较大:需优化分层构建(如使用 Alpine Linux 基础镜像)。

6. 总结:Docker 的优势

✅ 环境一致性:开发、测试、生产环境一致。

✅ 快速部署:秒级启动,简化 DevOps 流程。

✅ 资源高效:比虚拟机更轻量,节省服务器成本。

✅ 生态强大:支持 Kubernetes、云服务(AWS/Azure)、CI/CD 工具链。

Docker 已成为现代软件开发的标配工具,掌握它能极大提升开发效率和系统可靠性! 🚀

相关推荐

如何在 Android 上安装 APK 文件
365bet官网备用网站

如何在 Android 上安装 APK 文件

📅 06-30 👁️ 8533
路由器换网线怎么设置?详细教程及注意事项
365服务热线

路由器换网线怎么设置?详细教程及注意事项

📅 07-08 👁️ 5983
《堡垒之夜》国服上线时间公布
365bet官网备用网站

《堡垒之夜》国服上线时间公布

📅 07-09 👁️ 6992