发布于 2026-01-06 7 阅读
0

LFS253:容器基础知识目录 第一章:什么是容器? 第二章:容器的历史 第三章:构建模块 第四章:容器运行时 第五章:适用于 Mac 和 Windows 的 Docker 第六章:访问远程 Docker 守护进程 第七章:容器操作 第八章:使用镜像 第九章:使用 Dockerfile 第十章:容器网络 第十一章:容器存储 第十二章:使用 Docker Compose 构建多容器应用程序 第十三章:Docker API 简介 第十四章:Docker 使用技巧

LFS253:容器基础知识

指数

第一章:什么是容器?

第二章:集装箱的历史

第三章:构建模块

第四章:容器运行时

第五章:适用于 Mac 和 Windows 的 Docker

第六章:访问远程 Docker 守护进程

第七章:容器操作

第八章:图像处理

第九章:使用 Dockerfile

第十章:容器网络

第十一章:集装箱存储

第十二章:使用 Docker Compose 构建多容器应用程序

第十三章:Docker API 简介

第十四章:Docker 使用技巧

指数


第一章:什么是容器?

什么是容器?

容器是一种以应用为中心的架构,可在您选择的基础架构中交付高性能、可扩展的应用。

开发人员操作依赖关系

依赖关系是什么?代码 代码 代码 代码 代码应用程序应用程序 สามารถทำงาได้库、配置操作系统 操作系统

开发人员开发应用程序并测试笔记本电脑生产กลับใช้งานไม่ได้

ทำไมใช้ไม่ได้ล่ะ🤬!@#@$!#%

อาจเป็นไปได้ทั้งใช้解释器คนละ版本กันมี库ไม่ครบหรือ版本开发人员开发Mac、生产和Linux

痛苦的屁股 ของทุกคนมาเป็นเวลาอันยาวนานมาก

linux 内核 特性 特性 虚拟环境 虚拟环境运行应用程序应用程序包依赖项包依赖项เข้าไปได้อีกด้วย

容器 容器 容器 容器和尚

集装箱?

1) 开发、部署应用程序ได้รวดเร็วทันต่อตลาดแ ละความต้องการของลูกค้า
2) 创新、开发、容器、运行生产环境
3) 补丁修复 bug 功能部署ไปแล้วมีปัญหาเราสามารถ回滚ไปใช้容器版本เก่าที่ใช้งานได้ได้เลย เพราะทุกอย่างอยู่ใน集装箱อยู่แล้ว
4)คุ้มค่า เพราะสามารถ运行ได้หลาย应用程序ใน 1เครื่อง依赖关系

และอื่นๆอีกมากมาย

容器和轻量级虚拟机

环境和资源เพื่อให้应用程序运行

จากภาพ

  • VM运行Guest OS并运行Hypervisor
  • 容器运行在容器引擎上运行在主机操作系统上

运行 Windows 应用程序 容器 运行 Linux 主机操作系统 虚拟机 运行容器

部署容器如何部署?

运行容器和裸机虚拟机

แต่运行ที่ไหนจะดีกว่าล่ะ?

  • 集装箱
  • ในมุมมองของIT部门🡆ขึ้นอยู่กับหลายปัจจัยเช่น稳定性、性能、 ค่าใช้จ่ายและทักษะของผู้ปฏิบัติงานเป็นต้น

容器 规模化容器编排软件Docker Swarm、Kubernetes、Mesos Marathon、Nomad、Amazon ECS 等


第二章:集装箱的历史

历史

  • 容器 ไม่ใช่ของใหม่ มันเริ่มมาจาก文件系统容器ที่เรียกว่าchroot Unix第七版Unix 7th Edition 1982
  • 2000 年开始,Free BSD 功能和 chroot 功能以及 chroot 和监狱功能
  • 2000、Solaris 区域和区域功能ในการแบ่ง OS ออกเป็นส่วนย่อยๆ(虚拟化操作系统服务)

chroot

chroot操作会改变当前运行进程及其
子进程的根目录。在这种修改后的环境中运行的程序无法访问
该环境目录树之外的文件和命令。这种修改后的环境被称为 chroot 监狱。

chroot เป็นการทำให้应用程序ที่เรา运行ไม่เห็น路径/ (root)จริงๆแต่เป็น/ (root)子进程和子进程ของมันเห็น

替代文字

  • / (root)进程安装 进程安装 进程安装/mnt
  • เราสามารถ演示chrootได้ด้วยdebootstrapซึ่งสามารถ安装ในDebianได้

进程chroot:
进程 进程 文件系统 共享 1 服务器
进程jail:
进程文件系统、用户、网络、子系统 และอื่นๆ

systemd-nspawn

systemd-nspawn 和 systemd 和 init 系统和用户空间和进程和进程

Systemd-nspawn 启动容器 启动容器 systemd-nspawn 启动容器chroot +虚拟化进程树、用户、主机、域名等


第三章:构建模块

容器的3个基本组成部分

1)命名空间

命名空间 มาพร้อมกับ Linux 内核版本 2.4.19 ในปี 2002 โดย ทำหน้าที่ในการ 虚拟化系统资源管理流程

  • 挂载点(mnt)เป็นการ virtualized mount point คล้ายๆ กับ chroot
  • 进程 ID (pid)เป็นการ virtualized pid โดยในแต่ละ namespace จะมี pid ซ้ำกันได้ โดย pid ในแต่ละ namespace จะถูก map เป็น pid ของ host อีกที
  • 网络(net)เป็นการ isolate /proc/net, IPs, interfaces, และ routes ตามแต่ละ namespaces
  • 用户 ID(用户)เป็นการ isolate User และ group IDs ตามแต่ละ namespaces
  • 进程间通信(IPC)เป็นการ isolate SystemV IPC และ POSIX Message Queues ตามแต่ละ namespaces
  • UTS(主机名)เป็นการ isolate the hostname และ NIS (Network Information Service) name ตามแต่ละ namespaces

2) 对照组 (cgroups)

cgroups 于 2007 年发布 Linux 内核系统资源 系统资源

  • CPU(CPU/CPU组)ควบคุม time period และ upper limit ในการใช้งาน cpu รวมทั้ง assign งานในแต่ละ group
  • 内存(存储器)ควบคุม maximum memory limit, memory swappiness, OOM, etc
  • 磁盘 I/O (blkio)assign value of block I/O รวมถึงกำหนดค่า hard limit ของ block I/O
  • 网络(net_cls/net_prio)tags network packets, prioritize และ weight traffic ขาออกของ network interface
  • 设备ควบคุมการ assign device ไปยัง cgroup
  • 巨型页面ควบคุม hugepages size usage และ จัดการ hugepages matrices ในแต่ละ cgroup

流程

cgroupFreezer暂停/恢复组中的任务

3) UnionFS

UnionFS 文件系统 文件系统 文件系统 文件系统 文件系统 文件系统文件系统、文件系统、分支、设置优先级และ只读模式只读

UnionFS


第四章:容器运行时

容器运行时的历史

  • Docker 和lxc和 Linux 容器libcontainer
  • 2014 年,CoreOS 容器运行时Rocket (rkt)
  • 2015 年,OCI(开放容器倡议)会议Linux 基金会供应商锁定运行时和图像规范
  • หลังจากนันrunCถือกำเนิดขึ้นตามมาตรฐานของ OCI โดย代码和libcontainer和libcontainer

RunC

  • 容器运行时 容器运行时 规范 OCI
  • 命令行 命令行 容器 容器
  • 嵌入式软件和嵌入式软件
  • 兼容 Docker
  • 创建守护进程
  • Systemd 系统管理工具

Docker

  • Docker 容器运行时容器运行时应用程序运行应用程序
  • Core docker docker Engine Docker Engine容器化เพื่อจัดการrunCที่运行容器
Docker
来源:docker.com
  • Docker 框架 客户端-服务器 框架 Restful API
  • Docker 产品
    • 社区版 (CE) - 免费
      • edge: 发布 ทุกเดือน
      • stable: 发布第 3 版
    • 企业版 (EE) - 付费版
      • 集成的、支持的、经过认证的容器平台
      • 发布 ทุก 3 เดือน / แต่ละ 发布 จะ 支持 เป็นเวลา 1 ปี
      • มี 3 层 ได้แก่ 基本/标准/高级
  • Docker版本
    • 2017 年更新,主要.次要.Semantic Versioning补丁
    • หลังจากนั้น、จะนับแบบCalendar Versioningคือ YY.MM-ce และ YY.MM-ee

API 版本 Docker 版本 Docker 版本 Docker 1.13

火箭(rkt)

  • 2014年,CoreOS推出App Container(appc)
  • 2016年,推出rkt并实现appc
  • 与 OCI 兼容,并OCI 兼容
  • rktทำงานรวมกันได้ดีกับsystemd
  • rkt镜像格式 镜像应用程序容器镜像 镜像2 ส่วนสำคัญคือ
    • rootfs: เป็นที่เก็บ文件ต่างๆที่ต้องใช้งาน
    • Image Manifest:配置配置执行参数资源限制资源限制
  • rkt建筑事务所
rkt-flow
来源:CoreOS.com
  • stage0:发现、获取应用程序映像
  • stage1: 执行引擎和启动容器
  • stage2: 虚拟环境和应用程序


第五章:适用于 Mac 和 Windows 的 Docker

历史

  • 本地支持 docker docker windows Mac Docker 工具箱ซึ่งก็คือการลง Virtualbox运行Linux VM 1 ตัว จากนั้นคำสั่งต่างๆที่เราส่งไป 《Dcoker 工具箱》 มีดังนี้
    • 虚拟化环境
    • boot2docker VM
    • 风筝
    • Docker 引擎
    • Docker Compose
    • Docker Machine
  • 2016 Docker 本地支持 Windows และMac
    • Mac : 硬件虚拟化 操作系统 操作系统 Unikernel 技术 获取 มา
      • 轻量级管理程序 运行 Linux 实例 Docker 引擎
      • 地图网络、磁盘、容器、Linux 实例
      • linux实例、地图资源、主机
    • Windows : 2 种技术
      • Windows 服务器容器-> 共享内核、主机、主机、内核、Windows、命名空间、cgroup Linux 下的
      • Hyper-V 容器-> 运行“Windows 服务器容器”和优化的 VM 以及 Hyper-V 和虚拟机管理程序

Windows 的先决条件:Hyper-V、虚拟化、启用、Windows 10 pro、企业、教育、64 位

单内核

Unikernel จะทำให้เราสามารถสร้าง图像เฉพาะทางได้程序库 程序库 程序应用程序 编译程序 编译程序构建机器镜像并运行管理程序、裸机、裸机、应用程序ของเราต้องการติดต่อกับโลกภายนอกก็ เลือกเฉพาะ网络库ไป构建รวมกับ应用程序ของเรา


第六章:访问远程 Docker 守护进程

Docker客户端和Docker主机通信

替代文字
来源:Linux 基金会

Docker Client เป็น 命令ที่เรา run เพื่อไปสั่ง Docker Daemon ที่ run อยู่ที่ Host ต่างๆ Docker 客户端 1、Docker 守护进程、Docker 守护进程、Docker 守护进程

默认情况下,Docker 守护进程监听 Unix Socket เท่านั้น (เครื่องอื่นไม่สามารถ connect ได้)การที่จะให้ Docker 守护进程เปิดรับ连接จากภายนอกได้ต้อง启动选项-H选项-H 0.0.0.0:2375

连接 Docker 守护-H <IP>:<PORT>进程docker -H tcp://1.x.x.x info(默认端口为 2375(未加密) 2376(加密))

环境变量 环境变量环境DOCKER_HOST变量环境变量主持人export DOCKER_HOST=1.x.x.xdocker info

Docker Machine

docker-machine工具和配置 Docker 和 Docker 和云提供商AWS、GCP、Digital Ocean 等

访问 docker daemon ที่สร้างขึ้นมาได้อย่างปลอดภัย

docker-machine สามารถ 下载 ได้จากGithub


第七章:容器操作

创建容器时发生了什么?

  1. 进程主机
  2. 进程、命名空间、资源、pid、net、uts
  3. 控制组配置、应用、进程、限制资源
  4. 安全上下文和应用进程

运行C

运行命令 运行C 运行命令

命令 จุดประสงค์
runc run busybox 运行容器 ชื่อ busybox
runc list 列出容器 ที่ run ด้วย runc
runc ps busybox 列出进程、运行、容器、busybox
runc pause busybox หยุดการทำงานของ容器ชื่อ busyboxชั่วขณะ
runc resume busybox 容器 ชื่อ busybox ชั่วขณะ 容器 ชื่อ busybox
runc state busybox 容器 ชื่อ busybox
runc delete -f busybox หยุดการทำงานและลบ容器ชื่อ busybox

Docker

docker命令 docker命令

命令 จุดประสงค์
docker container create -it alpine sh 容器 容器 alpine 运行 sh 命令 交互式终端
docker container start <container_id> 启动容器
docker container ls (-a) 列出容器运行命令 -a 列出容器命令
docker container run -it alpine sh 运行容器 运行容器 运行 alpine 运行 sh 交互终端 (运行命令 1) และ 2 รวมกัน)
docker container inspect <container name/id> 集装箱
docker container stop 集装箱
docker container exec -it <container name/id> 集装箱
docker container rm (-f) <container name/id> ลบ 容器 ถ้าใส่ -f จะ 强制停止容器 ให้ด้วย

笔记

  • ctrl-p+q交互终端
  • Docker 1.13 Docker 1.13 语法和命令配置子命令“image” และ“container” ขึ้นมาเพื่อแยก命令ในการจัดการ图像集装箱ให้ชัดเจนมากขึ้น

rkt

ตัวอย่าง 命令ที่ใช้กับ rkt มีดังนี้

命令 จุดประสงค์
rkt run --interactive (--insecure-options=image) quay.io/coreos/alpine-sh 运行容器 ชื่อ alpine-sh แบบ 交互式 โดยถ้า 图像 ไหนไม่ได้ 签名 GPG ให้ใส่ 选项--insecure-options=imageด้วย
rkt --insecure-options=image run docker://nginx 运行容器 dockerhub
rkt list 列出容器并运行 rkt
rkt stop <UUID_of_Container> 集装箱
rkt rm <UUID_of_Container> ลบ 容器
rkt status <UUID_of_Container> 容器
systemd-run --slice=machine rkt run docker://nginx 运行容器、守护进程模式、systemd、管理、管理

笔记

  • 原生镜像 rkt 和 GPG 签名


第八章:图像处理

处理图像

Image คือ ส่วนที่สำคัญที่สุดของ 容器生态系统 เพราะทุก 容器ต้อง运行จาก图像

容器 容器 图像 图像 图像转换容器 转换容器 图像 转换集装箱UnionFS层

Docker Hub

Docker Hub、存储库、镜像、版本控制、标签นอกจากนั้นยังมี商店สำหรับขาย企业级图像ที่ผ่านการทำ安全มาเรียบร้อย帮助支持

Docker镜像操作

docker 命令命令和 docker 镜像命令

命令 จุดประสงค์
docker 搜索 nginx 搜索镜像 nginx 和 Docker Hub
docker 镜像 ls 列表图像 ในเครื่องของเรา
docker image pull alpine 下载镜像 ชื่อ alpine จาก Docker Hub
docker image inspect alpine:lates แสดงรายละเอียดของ图像ชื่อ阿尔卑斯山ที่标签ว่าเป็น版本ล่าสุด
docker container run -itd alpine sh 启动容器 alpine 并运行 sh 命令并进入守护进程模式(-d:守护进程模式)
Docker 容器差异 myalpine 运行容器、运行镜像、运行镜像
docker container commit myalpine <user>/<image_name>:<tag> 图像和容器 myalpine
docker container export > /path/to/file.tar 导出容器和 tar 文件
cat /path/to/file.tar | docker image import - <user>/<image_name>:<tag> 导入 tar 文件和 docker 镜像

笔记

  • 默认标签 คือlatest
  • 图像 ID ที่เป็นเลขฐาน 16(十六进制)ได้มาจาการเข้ารหัสSHA256
  • 容器 容器 图像 图像

Docker 镜像推送

ตัวอย่าง命令ที่ใช้推送docker镜像เข้า存储库มีดังนี้

命令 จุดประสงค์
docker login 身份验证、登录、镜像存储库
docker info แสดงข้อมูลของ docker 引擎ที่ติดต่อด้วย
docker image push <user>/<image_name>:<tag> 推送图像 ในเครื่องของเราไปยัง存储库
docker image prune 图片内容是:图片
docker image rm (-f) nginx:alpine ลบ image nginxที่มี tagว่า alpineบนเครื่องเราถ้าใส่选项-fจะ强制停止容器ที่ใช้图像 นี้ ก่อน 删除图像

rkt图像

ตัวอย่าง 命令ที่ใช้ทำงานกับ rkt 图像มีดังนี้

命令 จุดประสงค์
rkt image list 列出 rkt 图片 บนเครื่องเรา
rkt fetch coreos.com/etcd:v2.0.0 下载图像 etcd ที่มี tag v2.0.0 จาก coreos.com
rkt fetch --insecure-options=image docker://nginx 下载镜像 nginx 并标记最新的 Docker Hub


第九章:使用 Dockerfile

Dockerfiles

Dockerfiles、文件、文件、图像、镜像เพื่อให้มันสามารถ创建图像ซ้ำได้ และทำได้อย่างอัตโนมัติ

分享文件分享分享เก็บเป็นส่วนหนึ่งใน源代码树ใ​​น源代码存储库อย่างเช่นgithub, gitlabหรือbitbucketได้自动化流程 自动化 CI/CD 工具 自动化流程

命令ที่ใช้ในการ构建docker镜像จากdockerfilesคือdocker build -t <tag>

docker 镜像层 层 层 层 层指令RUN、Dockerfiles、构建、构建、缓存、缓存、层亲爱的# 缓存 # 缓存 # 构建镜像เร็วขึ้น(เราสามารถ禁用การ缓存และการใช้cahceระหว่างการ构建ได้ด้วย选项--no-cache

Dockerfiles 说明

  • 说明清单

    • FROM:设置、下载基础镜像、构建镜像
    • RUN:执行命令ตามที่配置ไว้โดยจะมีการ创建图层ใหม่
    • CMD:命令默认执行容器1 บรรทัด ถ้ามีหลายบรรทัด บรรทัดสุดท้ายเท่านั้นที่จะมีผล
    • LABEL:元数据、图像、键值对
    • EXPOSE:ให้容器监听端口อะไร
    • ENV:设置环境变量和图像
    • ADD:复制文件、目录、目录、URL、URL、tar 文件、图像
    • COPY:复制文件 หรือ 目录 จากภายนอกไปยัง图像
    • ENTRYPOINT:→命令→容器→运行→启动
    • VOLUME: 创建卷并挂载 1 个挂载点和镜像
    • USER:设置用户id、组id 、运行指令RUNCMDENTRYPOINT
    • WORKDIR: 设置工作目录สำหรับการ运行指令RUN,,,, และCMDENTRYPOINTCOPYADD
    • ARG: 构建参数和 docker build 命令
    • ONBUILD:บอกให้คนที่เอา图像นี้ไปทำ基础图像运行命令พวกนี้ด้วย
    • STOPSIGNAL:设置系统调用信号ที่จะทำให้容器หยุดการทำงาน
    • HEALTHCHECK:活性、就绪性探针、健康、容器
    • SHELL: 默认 shell 指令 默认SHELLshell Linux 操作系统["/bin/sh", "-c"]Windows 操作系统["cmd", "/S", "/C"]
  • 说明格式

    • 壳状<Instruction> <command>
    • 执行表单<Instruction> ["executable", "param1", "param2", ...]
  • 教学类型

    • 构建时间RUN,,,,,,,等等ADDCOPYUSERWORKDIRONBUILDSHELL
    • 运行时间CMDENTRYPOINT

CMD 与 ENTRYPOINT

  • CMD:ENTRYPOINT执行命令 执行容器运行 执行覆盖 执行参数 执行启动容器
  • ENTRYPOINT:“命令”“容器运行”“容器运行”“覆盖” CMD“覆盖”争论的CMD CMD焦点ENTRYPOINT


第十章:容器网络

Docker 网络命令

  • 网络连接 网络连接 网络连接 容器
  • 默认网络ของdockerคือ桥
  • 模式桥接泊坞窗 界面 界面docker0界面 界面集装箱 集装箱eth0集装箱veth ขึ้นมาเพื่อคุยกันภายใน命名空间 名称空间
  • สามารถดูสถานะของ桥ได้จาก主机โดยใช้命令bectl show

Docker 网络驱动程序

  • Docker 网络驱动程序

    • bridge:默认网络驱动程序、默认网络驱动程序、桥接器、独立模式
    • host: 驱动程序 共享网络命名空间 主机操作系统 独立模式 独立模式 设置Swarm 和 Docker 17.06 版本
    • overlay: ใช้ 连接 docker daemon หลายๆ ตัวเข้าด้วยกันเป็น swarm หรือ docker 守护进程司机 司机路由选择 操作系统เพื่อให้มันคุยกันได้
    • macvlan: 为容器分配 MAC 地址和容器地址分配物理网络、容器、旧应用程序物理接口
    • none:分配接口容器容器(禁用容器网络)容器容器本地主机接口
  • 容器网络命令和容器网络

命令 จุดประสงค์
docker network ls 列出网络 ทั้งหมด
docker network inspect <network_id> 网络
docker container run -it --network=none alpine sh 运行容器、驱动程序、容器、无、启用容器网络
docker container run -it --network=container:web alpine sh 运行容器 ให้มี 网络 เดียวกับ 容器 ชื่อ web โดย ทั้ง 2 个容器 จะมี IP เดียวกันเลย
docker network create mynet 创建网络 ชื่อ mynet แต่เราไม่ได้ ระบุ 驱动程序 ดังนั้น จะเป็นbridge

容器网络标准规范

Docker 2 规格说明

  • 容器网络模型(CNM)
    • Docker
    • ใช้libnetwork
    • 内置网络驱动程序
    • 支持第 3驱动程序 เช่น Cisco、Calico、Kuryr、Weave 等
CNM
来源:thenewstack.io
  • 容器网络接口(CNI)
    • 核心操作系统
    • 容器运行时环境
    • 容器编排器 Kubernetes、Mesos 和 Cloud Foundry
    • 支持第 3驱动程序 เช่น Weave、Calico 等
    • 容器运行时创建命名空间驱动程序分配IP容器运行时อีกที
中央核工业
来源:thenewstack.io

rkt 网络

rkt 支持 3 种模式

  • none:分配接口、容器、容器、本地主机接口
没有任何
来源:CoreOS.com
  • host:容器→共享命名空间→主机
主持人
来源:CoreOS.com
  • container(默认):
    • ใช้ PTP Plugin ซึ่งจะสร้าง veth 对 ระหว่าง host และ pod
    • 技术NAT路由路由 外部网络
    • 内置网络 ประกอบด้วย
    • ptp: veth 对 pod 主机接口
    • bridge: veth 对 pod 桥接口
    • macvlan: 虚拟接口 物理主接口 分配随机 MAC 地址
    • ipvlan:เป็นการสร้าง虚拟接口ขึ้นมาบน物理主接口แต่ไม่分配随机MAC地址เข้าไป แต่สามารถมี IPที่ต่างไปจาก物理主接口
容器
来源:CoreOS.com
  • 容器网络命令和容器网络
命令 จุดประสงค์
rkt run --interactive --net=host quay.io/coreos/alpine-sh:latest 运行 rkt 容器和接口驱动程序和主机
rkt run --port=80-tcp:8000 --insecure-options=image docker://nginx 运行rkt容器→映射端口8000→主机→端口80→容器
  • เราสามารถ创建用户定义的桥接网络ได้ดังนี้
# cat /etc/rkt/net.d/10-containers.conf
{
  "name": "containers",
    "type": "bridge",
    "bridge": "rkt1",
    "ipam": {
      "type": "host-local",
      "subnet": "10.1.0.0/16"
    }
}
Enter fullscreen mode Exit fullscreen mode


第十一章:集装箱存储

UnionFS 具备写时复制功能

UnionFS 文件系统 文件系统 文件系统 文件系统 文件系统 文件系统ให้จิตนาการเหมือนจานแก้วที่วางซ้อนกันเมื่อ เรามองจากด้านบนจะเห็นเหมือนเป็นจานจานเดียว

UnionFS
来源:Linux 基金会

运行容器、临时存储、临时存储、unionFS临时存储 容器 容器 文件 f1-f5

  • file f1临时存储 临时存储 容器 容器 文件 f1 文件夹
  • file f4标记“white-out”容器和文件f4基础镜像层
  • file f5临时存储层效果เท่านั้น(写入时复制)

使用 Docker 管理存储

  • 临时存储、Docker UnionFS with CoW 存储驱动程序
    • Linux : aufs, btrfs, zfs, overlay, overlay2, devicemapperและvfs
    • Windowsfilter driver
  • 持久存储、Dockervolume功能

    • Volumes创建 docker 卷并挂载
    • Bind mounts挂载目录 主机操作系统 容器
    • tmpfs mounts挂载非持久存储
    • named pipes运行第 3插件 Flocker、GlusterFS、REX-Ray、gce-docker、HPE 3Par Volume
  • 容器存储命令和容器存储

命令 จุดประสงค์
docker volume create my-vol 容器体积 ขึ้นมา (默认เป็น local)
docker volume ls 列出卷 ในระบบ
docker volume inspect my-vol 体积
docker volume rm my-vol 容器容积
docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest 运行容器并安装--mount卷“myvol2”路径/app和容器
docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html:ro nginx:latest 运行容器并-v挂载卷“nginx-vol”并路径 /usr/share/nginx/html 并以只读模式运行容器

笔记

  • 容器 体积 体积
  • 容器、卷、卷、选项-vdocker conatiner rm命令

rkt 卷

  • rkt 支持卷 2 ชนิดคือ

    • 主机卷( host):挂载目录 主机操作系统 容器 ( --volume NAME,kind=host,source=SOURCE_PATH,readOnly=BOOL)
    • 空卷( empty): 装载本地存储 装载本地存储 装载本地存储 容器 容器 ( --volume NAME,kind=empty,mode=MODE,uid=UID,gid=GID)
  • 容器存储命令和容器存储

命令 จุดประสงค์
rkt run --volume data,kind=host,source=/srv/data,readOnly=false example.com/app1 运行容器→挂载主机卷路径/srv/data→容器路径/var/data→读写
rkt run --volume data,kind=empty,readOnly=false example.com/app1 运行容器→挂载空卷→容器路径/var/data→读写


第十二章:使用 Docker Compose 构建多容器应用程序

姓名破解技巧

  • 第一技术:选项、选项、--link容器、Docker 守护进程、注入别名记录容器/etc/hosts
  • 第二代技术:类似 dns 的功能、Docker引擎

Docker Compose

docker-composeเป็น命令、编写文件、YAML格式、启动容器编写文件 编写文件

运行 Compose 文件 自定义网络docker-compose容器ที่ระบุไว้ใน 编写文件

  • 编写文件
version: "3.7"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:
Enter fullscreen mode Exit fullscreen mode
  • 容器存储命令和容器存储
命令 จุดประสงค์
docker-compose up 启动容器、配置、编写文件、前台模式
docker-compose up -d 启动容器、配置、编写文件、后台模式
docker-compose ps 列出容器 ที่ 创建 ไป
docker-compose stop 停止容器 ที่ 创建 ไป
docker-compose rm 容器、创建、创建


第十三章:Docker API 简介

Docker远程API

docker return 缩小的 json 和命令ที่สำคัญต้องลงเพิ่มเพื่อทำให้เป็漂亮jsonคือjq

默认 Docker 守护进程绑定 UNIX 套接字 UNIX 套接字curlUNIX套接字

  • curl --unix-socket /var/run/docker.sock http:/info | jq
  • curl --unix-socket /var/run/docker.sock http:/images/json | jq
  • curl --unix-socket /var/run/docker.sock http:/containers/json | jq

Docker 客户端库

  • 官方 SDK จะมี 2 ภาษาคือGoและPythonแต่ก็ยังมี 非官方 SDK ภาษาอื่ๆ อีกอ่านเพิ่มเติม
  • Python SDK
    • 安装库:pip install docker
    • 编码
# import library
import docker
# connect to docker daemon 
client = docker.DockerClient(base_url='unix://var/run/docker.sock') 
# run containers
client.containers.run("ubuntu:latest", "echo hello world")
# list containers
client.containers.list()
# list image
client.images.list()
Enter fullscreen mode Exit fullscreen mode


第十四章:Docker 使用技巧

技巧和窍门

  • Docker 自动完成功能
  • GO模板 GO模板 输出 docker检查 docker检查
# docker container inspect --format '{{.NetworkSettings.IPAddress}}' <container_id/name>
172.17.0.6
Enter fullscreen mode Exit fullscreen mode
  • 使用 Docker 子命令的过滤器
# docker container ls -a --filter 'exited=0'
CONTAINER ID IMAGE        COMMAND                CREATED         STATUS                     PORTS       NAMES
bd0936a70412 nginx:alpine "nginx -g 'daemon off" 7 minutes ago   Exited (0) 47 seconds ago              determined_dijkstra
3397ab1b421b alpine       "sh"                   8 minutes ago   Exited (0) 7 minutes ago               awesome_galileo
Enter fullscreen mode Exit fullscreen mode
  • 磁盘空间和容器
# docker system df -v
Images space usage:

REPOSITORY      TAG             IMAGE ID        CREATED
SIZE            SHARED SIZE     UNIQUE SIZE     CONTAINERS
nginx           latest          cc1b61406712    13 days ago
181.8 MB        0 B             181.8 MB        1
alpine          latest          88e169ea8f46    5 weeks ago
3.984 MB        0 B             3.984 MB        2

Containers space usage:
CONTAINER ID    IMAGE           COMMAND                 LOCAL VOLUMES
SIZE            CREATED         STATUS                  NAMES
f3686500c54c    alpine          "sh"                    1
86 B            6 minutes ago   Up 6 minutes            cmyvol
3bb26bfde13d    alpine          "sh"                    1
22 B            20 minutes ago  Up 20 minutes           cvol
d35e448942a7    nginx           "nginx -g 'daemon ..."  0
0 B             54 minutes ago  Created                 web1

Local Volumes space usage:
VOLUME NAME                                                         LINKS   SIZE
c2842864d4fe791d8a9615a3724f684503d554b61fbbfc58b4c91a45f1afa03f    1       0 B
myvol                                                               1       37 B
Enter fullscreen mode Exit fullscreen mode
  • docker image ที่ไม่ได้ใช้เพื่อ清理主机磁盘使用情况
docker system prune -a
Enter fullscreen mode Exit fullscreen mode
文章来源:https://dev.to/peepeepopapapeepeepo/lfs253-containers-fundamentals-1595