Docker

文章目录

  • Docker
    • [第1章 容器生态系统(架构与产业链)](#第1章 容器生态系统(架构与产业链))
      • [001 容器技术概述](#001 容器技术概述)
      • [002 容器技术分层](#002 容器技术分层)
        • [核心技术层(Core Technologies)](#核心技术层(Core Technologies))
    • [第2章 容器架构与核心组件](#第2章 容器架构与核心组件)
      • [003 容器架构](#003 容器架构)
        • [1. Docker Daemon](#1. Docker Daemon)
        • [2. Docker Client](#2. Docker Client)
        • [3. Storage Drivers(存储驱动)](#3. Storage Drivers(存储驱动))
        • [4. 组件间关系](#4. 组件间关系)
    • [第3章 镜像构建与分发(源代码、构建、分发)](#第3章 镜像构建与分发(源代码、构建、分发))
    • [第4章 容器生命周期管理(启动、停止、删除、重启等)](#第4章 容器生命周期管理(启动、停止、删除、重启等))
      • [005 容器操作命令详解](#005 容器操作命令详解)
        • [1. 容器启动 `docker run`](#1. 容器启动 docker run)
        • [2. 容器停止 `docker stop`](#2. 容器停止 docker stop)
        • [3. 容器删除 `docker rm`](#3. 容器删除 docker rm)
        • [4. 容器重启 `docker restart`](#4. 容器重启 docker restart)
        • [5. 容器暂停 `docker pause`](#5. 容器暂停 docker pause)
        • [6. 容器日志 `docker logs`](#6. 容器日志 docker logs)
        • [7. 容器进容器 `docker exec`](#7. 容器进容器 docker exec)
    • [第5章 容器网络与服务通信(HTTP服务、容器相互连通等)](#第5章 容器网络与服务通信(HTTP服务、容器相互连通等))
      • [006 容器网络基础](#006 容器网络基础)

Docker

第1章 容器生态系统(架构与产业链)

001 容器技术概述

容器的出现

容器作为一种技术源于 Linux 内核中两个重要模块:

  1. Cgroups(Control Groups):管理资源配额。
  2. Namespaces(命名空间):实现资源隔离。

这两个功能共同作用于容器技术中,使容器拥有与虚拟机相似的性能优势,又有隔离效果。

Docker 在 2013 年初将容器 idea 实现为产品,便迅速成为容器的主流产品。当前各大云厂商都提供容器服务,如阿里云、华为云、Azure、GCP 也支持容器方案。

容器生态系统构成

002 容器技术分层

核心技术层(Core Technologies)
  1. 容器规范:容器规范定义了容器的通用标准,例如:

    • OCI(Open Container Initiative):定义了容器 runtime 和 image。这使得容器可以在不同平台运行。
    • Docker 作为一个容器技术巨头,基于 OCI 的标准进行开发。
  2. 容器 runtime

    • runc:Docker 自持的 runtime,符合 OCI 规范。
    • lxc:对于较早的 Oracle 容器,它是 runtime 的一个组成部分。
    • rkt:CoreOS 开发的 runtime,也符合 OCI 规范。
  3. 容器管理工具

    • Docker cli:Docker 客户端,用来与 daemon 交互。
    • rkt cli:可用来管理容器。
    • Kubernetes 是一个容器 orchestrator,版本号为 1.21。
  4. 容器定义工具

    • Dockerfile:用来定义容器的构建指令。
    • base images :如 ubuntucentosalpine 等,这些镜像包含基础运行时的环境。
  5. Registry(镜像仓库)

    • Docker Hub :即 docker.io 的 mirror,允许用户下载或上传镜像。
    • Harbor:是一个企业级私有容器仓库,适合组织部署镜像。
  6. 容器 OS

    • 专门用于运行容器的操作系统,例如:
      • CoreOS
      • Atomic OS
      • Ubuntu Core

第2章 容器架构与核心组件

003 容器架构

1. Docker Daemon

Docker daemon 是容器实际运行的地方。只有一个:

  • 它侦听 Docker API 的请求。
  • 它将所有的操作动作传递给后台服务进行处理。
  • 它管理容器,镜像,网络等。

你可以通过命令行、REST API 与它交互。

2. Docker Client

你可以用 docker 这个命令与 daemon 交流。例如:

bash 复制代码
[root@docker ~]# docker run hello-world

装过镜像和容器?不是,docker 客户端首先会查询本地是否已存储。如果没有,会自动去 oci 规范支持的 repository 中下载并启动。

3. Storage Drivers(存储驱动)

存储驱动实现镜像和容器的分层机制,有以下几个常用类型:

Name Description
overlay2 Docker 17.06 之后默认使用的存储驱动,性能较优
aufs Ubuntu 14.04 等传统系统常用
btrfs 相对较少使用,但有一定的兼容性及性能优势
devicemapper 不太推荐,因为兼容性差,性能不佳,已被废弃
4. 组件间关系

以下是各个组件之间的互动关系:

  1. Clientserver 之间通过 API 通信。
  2. serverStorage drivers 之间通信,处理容器和镜像操作。
  3. serverNetwork drivers 之间通信,实现容器的网络管理。
  4. serverRegistry 之间通信,实现镜像的拉取、推送、删除。
  5. servercontainers 之间通信,处理容器管理。

第3章 镜像构建与分发(源代码、构建、分发)

004 镜像与容器的交互

text 复制代码
Dockerfile → build → image → run → container

Dockerfile 是构建镜像的结构定义,build 会根据 Dockerfile 构建出 imagerun 会根据 image 创建 container

镜像构建过程

镜像由若干层组成,每层对应一些构建过程。

  • base-image:没有底层依赖的镜像。
  • image layer:每层的不同操作形成不同的镜像。

在 docker 中最常见的构建命令为 docker build,其作用是对 build context 中的文件进行打包。

镜像构建的例子

我们来构建一个带有 nginx 的容器镜像:

bash 复制代码
[root@docker ~]# vim Dockerfile
FROM centos
RUN yum install -y nginx

[root@docker ~]# docker build -t centos-nginx .  #构建镜像

第4章 容器生命周期管理(启动、停止、删除、重启等)

005 容器操作命令详解

1. 容器启动 docker run

docker run 是启动容器的命令,它将执行以下操作:

  • 启动对应的镜像。
  • 配置网络和存储。
  • 环境初始化。
2. 容器停止 docker stop
3. 容器删除 docker rm
4. 容器重启 docker restart
5. 容器暂停 docker pause
6. 容器日志 docker logs
7. 容器进容器 docker exec

这些命令可以满足大部分容器管理操作。

text 复制代码
docker run → docker build → docker images → docker run
bash 复制代码
docker run -d -p 3000:3000 myapp

注意:-d 是以 detached 模式运行,-p 是端口映射。


第5章 容器网络与服务通信(HTTP服务、容器相互连通等)

006 容器网络基础

网络类型(Network Types)
  1. host 网络:容器共享宿主机的网络命名空间,直接使用系统网络。适用于对网络性能要求高的应用。
  2. bridge 网络 :也称为默认的网络类型,可以通过以下方式创建:
    • docker network create --driver bridge docker-network 创建一个自定义桥接网络。
  3. none 网络:容器没有网络,数据存放在自己的库中,不受其他容器影响。
  4. user-defined network :用户可以自己定义,如 overlaymacvlan 等。
容器网络先锋 - docker network inspect
bash 复制代码
[root@docker ~]# docker network inspect bridge
{
    "Name": "bridge",
    "Id": "9c8f4ff0c361c169536a912736d7a305b93abd9f32f67036d53f585c813b",
    "Containers": {},
    "Options": {
        "com.docker.network.bridge.default_bridge": "true"
    }
}

网络配置

  • --network=host:使用 host 网络
  • --network=bridge:使用 bridge 网络
  • --network=none:是一个不与任何端口通信的网络
容器崩溃问题处理

如果容器发生错误退出,你可以通过以下方式排查:

  1. 调试应用:使用 docker logs 查看日志。
  2. 或直接进入容器:docker exec -it <container-id> bash 进入容器 bash。
    st 网络
  • --network=bridge:使用 bridge 网络
  • --network=none:是一个不与任何端口通信的网络
容器崩溃问题处理

如果容器发生错误退出,你可以通过以下方式排查:

  1. 调试应用:使用 docker logs 查看日志。
  2. 或直接进入容器:docker exec -it <container-id> bash 进入容器 bash。
  3. 进入容器查看系统信息:uname -a
相关推荐
用户03284722207014 小时前
如何搭建本地yum源(上)
运维
武子康15 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉4 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造