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
相关推荐
风好衣轻2 小时前
Ubuntu单卡5090部署VeRL:从安装到运行
linux·运维·ubuntu
init_23612 小时前
Option B(MP-EBGP跨AS VRF)设备配置及ASBR标签转发原理
运维·服务器·网络
番茄撒旦在上2 小时前
Docker部署springboot项目
服务器·spring boot·docker·容器
刚哥的进化路2 小时前
Kubernetes 集群部署详细教程:kubeadm 单 Master / 高可用部署实操
运维
invicinble2 小时前
对于nginx(一,认识nginx)
运维·nginx
徒手千行代码无bug2 小时前
Nginx upstream 负载均衡 404,单节点转发正常的根因与解决
运维·nginx·负载均衡
东风微鸣2 小时前
Apache Parquet 优势与日志应用场景解析
运维·apache
Danileaf_Guo2 小时前
256台H100服务器算力中心业务集群部署方案
运维·服务器
掘根2 小时前
【消息队列项目】连接管理模块实现
运维·服务器