LFS253:容器基础知识
指数
第一章:什么是容器?
第二章:集装箱的历史
第三章:构建模块
第四章:容器运行时
第五章:适用于 Mac 和 Windows 的 Docker
第六章:访问远程 Docker 守护进程
第七章:容器操作
第八章:图像处理
第九章:使用 Dockerfile
第十章:容器网络
第十一章:集装箱存储
第十二章:使用 Docker Compose 构建多容器应用程序
第十三章:Docker API 简介
第十四章:Docker 使用技巧
指数
- 什么是容器?
- 容器的历史
- 积木
- 容器运行时
- 适用于 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
流程
cgroup
Freezer暂停/恢复组中的任务
3) 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 框架 客户端-服务器 框架 Restful API
- Docker 产品
- 社区版 (CE) - 免费
edge: 发布 ทุกเดือนstable: 发布第 3 版
- 企业版 (EE) - 付费版
- 集成的、支持的、经过认证的容器平台
- 发布 ทุก 3 เดือน / แต่ละ 发布 จะ 支持 เป็นเวลา 1 ปี
- มี 3 层 ได้แก่ 基本/标准/高级
- 社区版 (CE) - 免费
- Docker版本
- 2017 年更新,主要.次要.
Semantic Versioning补丁 - หลังจากนั้น、จะนับแบบ
Calendar Versioningคือ YY.MM-ce และ YY.MM-ee
- 2017 年更新,主要.次要.
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建筑事务所
![]() |
|---|
|
|
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 和虚拟机管理程序
- Mac : 硬件虚拟化 操作系统 操作系统 Unikernel 技术 获取 มา
Windows 的先决条件:Hyper-V、虚拟化、启用、Windows 10 pro、企业、教育、64 位
单内核
Unikernel จะทำให้เราสามารถสร้าง图像เฉพาะทางได้程序库 程序库 程序应用程序 编译程序 编译程序构建机器镜像并运行管理程序、裸机、裸机、应用程序ของเราต้องการติดต่อกับโลกภายนอกก็ เลือกเฉพาะ网络库ไป构建รวมกับ应用程序ของเรา
第六章:访问远程 Docker 守护进程
Docker客户端和Docker主机通信
![]() |
|---|
|
|
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
第七章:容器操作
创建容器时发生了什么?
- 进程主机
- 进程、命名空间、资源、pid、net、uts
- 控制组配置、应用、进程、限制资源
- 安全上下文和应用进程
运行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 、运行指令RUN、CMDENTRYPOINTWORKDIR: 设置工作目录สำหรับการ运行指令RUN,,,, และCMDENTRYPOINTCOPYADDARG: 构建参数和 docker build 命令ONBUILD:บอกให้คนที่เอา图像นี้ไปทำ基础图像运行命令พวกนี้ด้วยSTOPSIGNAL:设置系统调用信号ที่จะทำให้容器หยุดการทำงานHEALTHCHECK:活性、就绪性探针、健康、容器SHELL: 默认 shell 指令 默认SHELLshell Linux 操作系统["/bin/sh", "-c"]Windows 操作系统["cmd", "/S", "/C"]
-
说明格式
- 壳状:
<Instruction> <command> - 执行表单:
<Instruction> ["executable", "param1", "param2", ...]
- 壳状:
-
教学类型
- 构建时间:
RUN,,,,,,,等等ADDCOPYUSERWORKDIRONBUILDSHELL - 运行时间:
CMD,ENTRYPOINT
- 构建时间:
CMD 与 ENTRYPOINT
CMD:ENTRYPOINT执行命令 执行容器运行 执行覆盖 执行参数 执行启动容器ENTRYPOINT:“命令”“容器运行”“容器运行”“覆盖”CMD“覆盖”争论的CMDCMD焦点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 等
- 容器网络接口(CNI):
- 核心操作系统
- 容器运行时环境
- 容器编排器 Kubernetes、Mesos 和 Cloud Foundry
- 支持第 3方驱动程序 เช่น Weave、Calico 等
- 容器运行时创建命名空间驱动程序分配IP容器运行时อีกที
rkt 网络
rkt 支持 3 种模式
none:分配接口、容器、容器、本地主机接口
![]() |
|---|
|
|
host:容器→共享命名空间→主机
![]() |
|---|
|
|
container(默认):- ใช้ PTP Plugin ซึ่งจะสร้าง veth 对 ระหว่าง host และ pod
- 技术NAT路由路由 外部网络
- 内置网络 ประกอบด้วย
ptp: veth 对 pod 主机接口bridge: veth 对 pod 桥接口macvlan: 虚拟接口 物理主接口 分配随机 MAC 地址ipvlan:เป็นการสร้าง虚拟接口ขึ้นมาบน物理主接口แต่ไม่分配随机MAC地址เข้าไป แต่สามารถมี IPที่ต่างไปจาก物理主接口
![]() |
|---|
|
|
- 容器网络命令和容器网络
| 命令 | จุดประสงค์ |
|---|---|
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"
}
}
第十一章:集装箱存储
UnionFS 具备写时复制功能
UnionFS 文件系统 文件系统 文件系统 文件系统 文件系统 文件系统ให้จิตนาการเหมือนจานแก้วที่วางซ้อนกันเมื่อ เรามองจากด้านบนจะเห็นเหมือนเป็นจานจานเดียว
![]() |
|---|
|
|
运行容器、临时存储、临时存储、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 - Windows:
filter driver
- Linux :
-
持久存储、Docker
volume功能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 并以只读模式运行容器 |
笔记
- 容器 体积 体积
- 容器、卷、卷、选项
-v、docker 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:
- 容器存储命令和容器存储
| 命令 | จุดประสงค์ |
|---|---|
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 | jqcurl --unix-socket /var/run/docker.sock http:/images/json | jqcurl --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()
第十四章:Docker 使用技巧
技巧和窍门
- Docker 自动完成功能
- GO模板 GO模板 输出 docker检查 docker检查
# docker container inspect --format '{{.NetworkSettings.IPAddress}}' <container_id/name>
172.17.0.6
- 使用 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
- 磁盘空间和容器
# 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
- docker image ที่ไม่ได้ใช้เพื่อ清理主机磁盘使用情况
docker system prune -a













