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
相关推荐
Java.熵减码农2 小时前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的3 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
猫头虎3 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕3 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
黎陌MLing4 小时前
docker安装管理TDengine
docker·容器·tdengine
HIT_Weston4 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿5 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin5 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
SelectDB5 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
❀͜͡傀儡师5 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器