Docker

前言

你是否曾为这些事头疼过?

  • "在我的电脑上明明能运行,为什么到服务器上就报错?"

  • 为了部署一个应用,需要花半天时间配置复杂的环境和依赖。

  • 服务器上跑着几个应用,它们因为依赖库版本冲突而互相干扰。

这些问题的核心在于 " 环境不一致**"** 和 " 隔离性不足**"**。

Docker 正是为解决这些问题而生的利器。

你可以把它想象成 " 软件的标准集装箱**"**。在现实世界中,集装箱标准化了货物的大小、形状和装卸方式,使得轮船、火车、卡车可以无缝衔接,极大地提升了物流效率。

Docker 则为软件应用提供了这样的"标准集装箱"(即容器)。开发者可以将一个应用及其所有依赖(代码、运行时、系统工具、库等)打包进一个轻量级、可移植的容器中。然后,这个容器可以运行在任何安装了 Docker 的机器上,无论是开发者的笔记本电脑、测试服务器,还是云端的生产环境,都能获得完全一致的行为。

它与传统虚拟机的本质区别在于"轻量":

  • 传统虚拟机 像是"带全套家具和操作系统的公寓"(每个虚拟机包含完整的操作系统),笨重且启动慢。

  • Docker 容器 像是"酒店的标准房间"(共享宿主机的操作系统内核),只包含应用必需品,因此秒级启动、资源消耗极低、性能接近原生。

Docker的口号是:"一次构建,处处运行"(Build, Ship, and Run Any App, Anywhere)。它简化了从开发、测试到部署的整个生命周期,是现代 持续集成/持续部署(CI/CD)、微服务架构和云原生应用 的基石。

通过学习 Docker,你将掌握一种高效、现代化的应用打包和交付方式,迈出进入容器化与云原生世界的关键一步。

接下来,让我们从核心概念和基础操作开始,一步步揭开 Docker 的神秘面纱。

云服务模型

  • IaaS:提供虚拟机、存储等基础设施,用户管理操作系统和应用,灵活但复杂。

  • PaaS:提供应用开发与部署平台,用户专注代码,简化开发。

  • SaaS:提供可直接使用的软件应用,开箱即用,定制性差。

  • DaaS:提供数据访问与分析服务。

虚拟化技术

  • 全虚拟化:完全模拟硬件,兼容性好(如VMware)。

  • 半虚拟化:需修改客户机系统,性能更高(如Xen)。

  • 代表产品:VMware ESXi, KVM (Linux内核虚拟化)。

Docker 是什么?

  • 容器化平台,将应用及其依赖打包成标准化、轻量级、可移植的容器。

  • 设计宗旨:Build, Ship, Run Any App, Anywhere(一次封装,到处运行)。

  • Logo寓意:鲸鱼(宿主机)托着集装箱(容器)。

为什么使用 Docker?

  • 轻量高效:与传统虚拟机相比,容器共享宿主机内核,无需完整操作系统,启动快(秒级)、资源损耗小、性能接近原生。

  • 一致性与移植性:保证开发、测试、生产环境的一致性,实现跨平台无缝迁移。

  • 简化部署与运维:易于创建、复制和分发。

Docker vs. 传统虚拟机

|-----------|-----------|-----------|
| 特性 | Docker 容器 | 传统虚拟机 |
| 启动速度 | 秒级 | 分钟级 |
| 性能损耗 | 几乎无 | 较高(约50%) |
| 性能 | 接近原生 | 较弱 |
| 单机支持量 | 上千个 | 几十个 |
| 隔离性 | 进程级资源隔离 | 完全操作系统级隔离 |

Docker 基础操作(镜像篇)

镜像搜索与下载

bash 复制代码
  ```bash
    docker search nginx          # 搜索镜像
    docker pull nginx            # 下载镜像(默认latest标签)
    ```

镜像加速

bash 复制代码
 *   通过配置 `/etc/docker/daemon.json` 使用国内镜像加速器(如阿里云、华为云)。
    *   示例(阿里云):
        ```json
        {
          "registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
        }
        ```

镜像管理

bash 复制代码
   ```bash
    docker images                         # 查看本地所有镜像
    docker inspect <镜像ID>                # 查看镜像详细信息(JSON格式)
    docker tag nginx:latest nginx:web     # 为镜像添加新标签
    docker rmi nginx:web                  # 删除指定标签的镜像
    ```

镜像导入导出与上传

bash 复制代码
 ```bash
    # 导出(备份)
    docker save -o nginx.tar nginx:latest
    # 导入(恢复)
    docker load -i nginx.tar
    # 登录并上传到Docker Hub
    docker login
    docker tag nginx:latest soscscs/nginx:web
    docker push soscscs/nginx:web
    ```

Docker 优势与应用场景

核心优势:

  • 移植性:一次打包,处处运行。

  • 隔离性:应用间互不影响。

  • 高效率:轻量、快速启动、高密度部署。

主要应用场景:

  • CI/CD:实现环境标准化,加速构建与发布流程。

  • 微服务架构:理想的微服务部署与运行载体。

  • 多云/混合云:便于应用在不同云环境间迁移。

linux命名空间

|------|----|----------|------------------------------------|
| 命名空间 | 缩写 | 作用 | 效果 |
| MNT | 挂载 | 文件系统隔离 | 每个命名空间可以有自己的文件系统挂载点 |
| NET | 网络 | 网络资源隔离 | 每个命名空间可以有自己的网络栈,包括网络接口、路由表等 |
| PID | 进程 | 进程号隔离 | 每个命名空间有自己独立的PID编号空间 |
| IPC | 简盾 | 进程间通信隔离 | 每个命名空间有自己独立的System V IPC和POSIX消息队列 |
| UTS | 主机 | 主机名、域名隔离 | 每个命名空间可以有自己的主机名和域名 |
| USER | 用户 | 用户名、组名隔离 | 每个命名空间可以有自己的用户和组ID映射 |

总结

Docker 简单总结(一句话 + 核心要点)

Docker 是一个开源的容器化平台,能将应用及其依赖打包成轻量、可移植的"容器",实现"一次构建,到处运行"。

🧱 核心概念(4 个关键词)

|---------------|-----------------------------|-------------------------------|
| 概念 | 说明 | 类比 |
| 镜像(Image) | 应用的"模板"或"快照",包含代码、运行时、库、配置等 | 像 **安装光盘** 或 **类(Class) |
| 容器(Container) | 镜像的运行实例,是真正执行的进程 | 像 正在运行的虚拟机 或 对象(Object) |
| Dockerfile | 文本文件,定义如何构建镜像(类似"菜谱") | 像 Makefile |
| 仓库(Registry) | 存储和分发镜像的地方(如 Docker Hub) | 像 GitHub for 镜像 |

✅ Docker 的核心优势

  • 环境一致

开发、测试、生产环境完全一致,告别 "在我机器上能跑!"轻量高效容器共享宿主机内核,秒级启动,资源占用远低于虚拟机。

  • 隔离性好

进程、网络、文件系统相互隔离,互不干扰。

  • 快速部署 & 扩缩容

`docker run` 一键启动;配合编排工具(如 Kubernetes)可秒级扩缩容。

标准化交付镜像作为交付物,开发打包一次,运维随处运行。

🐳 常用命令速记

bash 复制代码
```bash
# 构建镜像
docker build -t myapp .

# 运行容器(后台)
docker run -d --name web -p 8080:80 myapp

# 查看运行中的容器
docker ps

# 进入容器
docker exec -it web /bin/bash

# 查看日志
docker logs web

# 停止/删除容器
docker stop web && docker rm web

# 删除镜像
docker rmi myapp

# 拉取镜像(从 Docker Hub)
docker pull nginx
```

🌐 典型使用场景

  • 微服务架构(每个服务一个容器)
  • 持续集成/持续部署(CI/CD)
  • 快速搭建开发/测试环境
  • 隔离运行不同版本的应用(如 Python 2 和 Python 3)
  • 云原生应用的基础(Kubernetes 调度的就是 Docker 容器)

⚠️ 注意事项

  • 容器不是虚拟机:它没有独立操作系统,依赖宿主机内核。
  • 数据持久化:容器删除后内部文件会丢失 → 需用 **Volume** 挂载宿主机目录。
  • 安全:容器默认以 root 运行,建议最小权限原则。

📌 一句话记住 Docker:

"Build once, Run anywhere." ------ 打包一次,随处运行。

它是现代 DevOps 和云原生技术的基石工具,值得掌握!

相关推荐
玥轩_5212 小时前
防火墙技术-综合应用实验
运维·网络·网络协议·网络安全·智能路由器·路由器·防火墙
Lynnxiaowen2 小时前
今天我们继续学习devops内容基于Jenkins构建CICD环境
linux·运维·学习·jenkins·devops
小尧嵌入式2 小时前
Linux网络介绍网络编程和数据库
linux·运维·服务器·网络·数据库·qt·php
qq_455760852 小时前
docker - 存储卷
运维·docker·容器
最贪吃的虎2 小时前
MySQL调优 一:慢SQL日志
运维·数据库·后端·mysql
翼龙云_cloud2 小时前
阿里云GPU卡顿、掉线如何处理?
运维·服务器·阿里云·云计算
lin张2 小时前
Docker 场景化操作:生产环境容器实践
运维·docker·容器
山川而川-R2 小时前
在香橙派5pro上的ubuntu22.04系统烧录镜像
linux·运维·服务器
学习3人组2 小时前
自动拨号和录音的App解决方案
运维