📖15-阅读清单

type
status
date
slug
summary
tags
category
icon
password
阅读清单...
名称
标签
字数统计
URL
创建日期
作者
收藏
2501
https://mp.weixin.qq.com/s/CSP2INRAsItU6iD1Yyb_ww
Mar 1, 2022 03:24 AM
 
 
盖洛普 Q12 员工敬业度调查 - 盖洛普
如何使用 Q12 衡量员工敬业度 - 盖洛普
学习从 CEO 视角看问题|Linmi Weekly #1 - Linmi
助力思考决策的 20 种思维方式 | Linmi Weekly #2 - Linmi
blogs----如何搭建自己的博客 | Final233
 
TCP——Linux 上的性能调优
# docker----1 基础命令 Docker Docker 发布时间 : 2022-01-12 19:06 字数: 6.5k 阅读 :4 1. [docker](#docker) 1. [docker 简介](#docker-%E7%AE%80%E4%BB%8B) 2. [docker 的组成](#docker-%E7%9A%84%E7%BB%84%E6%88%90) 3. [Docker 的优势](#Docker-%E7%9A%84%E4%BC%98%E5%8A%BF) 4. [Docker 的缺点](#Docker-%E7%9A%84%E7%BC%BA%E7%82%B9) 5. [docker(容器) 的核心技术](#docker-%E5%AE%B9%E5%99%A8-%E7%9A%84%E6%A0%B8%E5%BF%83%E6%8A%80%E6%9C%AF) 1. [容器规范](#%E5%AE%B9%E5%99%A8%E8%A7%84%E8%8C%83) 2. [容器 runtime](#%E5%AE%B9%E5%99%A8-runtime) 3. [容器管理工具](#%E5%AE%B9%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7) 4. [容器定义工具](#%E5%AE%B9%E5%99%A8%E5%AE%9A%E4%B9%89%E5%B7%A5%E5%85%B7) 5. [Registry](#Registry) 6. [编排工具](#%E7%BC%96%E6%8E%92%E5%B7%A5%E5%85%B7) 6. [docker(容器) 的依赖技术](#docker-%E5%AE%B9%E5%99%A8-%E7%9A%84%E4%BE%9D%E8%B5%96%E6%8A%80%E6%9C%AF) 1. [容器网络](#%E5%AE%B9%E5%99%A8%E7%BD%91%E7%BB%9C) 2. [服务发现](#%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0) 3. [容器监控](#%E5%AE%B9%E5%99%A8%E7%9B%91%E6%8E%A7) 4. [数据管理](#%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86) 5. [日志收集](#%E6%97%A5%E5%BF%97%E6%94%B6%E9%9B%86) 7. [Docker 安装及基础命令介绍](#Docker-%E5%AE%89%E8%A3%85%E5%8F%8A%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4%E4%BB%8B%E7%BB%8D) 1. [通过修改 yum 源安装](#%E9%80%9A%E8%BF%87%E4%BF%AE%E6%94%B9-yum-%E6%BA%90%E5%AE%89%E8%A3%85) 2. [启动并验证 docker 服务](#%E5%90%AF%E5%8A%A8%E5%B9%B6%E9%AA%8C%E8%AF%81-docker-%E6%9C%8D%E5%8A%A1) 3. [验证 docker 版本](#%E9%AA%8C%E8%AF%81-docker-%E7%89%88%E6%9C%AC) 4. [验证 docker0 网卡](#%E9%AA%8C%E8%AF%81-docker0-%E7%BD%91%E5%8D%A1) 5. [验证 docker 信息](#%E9%AA%8C%E8%AF%81-docker-%E4%BF%A1%E6%81%AF) 6. [docker 存储引擎](#docker-%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E) 7. [docker 镜像加速配置](#docker%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E9%85%8D%E7%BD%AE) 8. [Docker 镜像基础命令](#Docker-%E9%95%9C%E5%83%8F%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4) 1. [搜索镜像](#%E6%90%9C%E7%B4%A2%E9%95%9C%E5%83%8F) 2. [下载镜像](#%E4%B8%8B%E8%BD%BD%E9%95%9C%E5%83%8F) 3. [查看本地镜像](#%E6%9F%A5%E7%9C%8B%E6%9C%AC%E5%9C%B0%E9%95%9C%E5%83%8F) 4. [镜像导出](#%E9%95%9C%E5%83%8F%E5%AF%BC%E5%87%BA) 5. [查看镜像内容](#%E6%9F%A5%E7%9C%8B%E9%95%9C%E5%83%8F%E5%86%85%E5%AE%B9) 6. [镜像导入](#%E9%95%9C%E5%83%8F%E5%AF%BC%E5%85%A5) 7. [删除镜像](#%E5%88%A0%E9%99%A4%E9%95%9C%E5%83%8F) 8. [容器操作基础命令](#%E5%AE%B9%E5%99%A8%E6%93%8D%E4%BD%9C%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4) 1. [从镜像启动一个容器](#%E4%BB%8E%E9%95%9C%E5%83%8F%E5%90%AF%E5%8A%A8%E4%B8%80%E4%B8%AA%E5%AE%B9%E5%99%A8) 2. [显示正在运行的容器](#%E6%98%BE%E7%A4%BA%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%AE%B9%E5%99%A8) 3. [显示所有容器](#%E6%98%BE%E7%A4%BA%E6%89%80%E6%9C%89%E5%AE%B9%E5%99%A8) 4. [删除运行中的容器](#%E5%88%A0%E9%99%A4%E8%BF%90%E8%A1%8C%E4%B8%AD%E7%9A%84%E5%AE%B9%E5%99%A8) 5. [端口映射](#%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84) 1. [随机映射端口](#%E9%9A%8F%E6%9C%BA%E6%98%A0%E5%B0%84%E7%AB%AF%E5%8F%A3) 2. [指定端口映射](#%E6%8C%87%E5%AE%9A%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84) 6. [查看容器访问日志](#%E6%9F%A5%E7%9C%8B%E5%AE%B9%E5%99%A8%E8%AE%BF%E9%97%AE%E6%97%A5%E5%BF%97) 7. [查看容器端口映射](#%E6%9F%A5%E7%9C%8B%E5%AE%B9%E5%99%A8%E7%AB%AF%E5%8F%A3%E6%98%A0%E5%B0%84) 8. [自定义容器名称](#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%B9%E5%99%A8%E5%90%8D%E7%A7%B0) 9. [后台启动容器](#%E5%90%8E%E5%8F%B0%E5%90%AF%E5%8A%A8%E5%AE%B9%E5%99%A8) 10. [创建并进入容器](#%E5%88%9B%E5%BB%BA%E5%B9%B6%E8%BF%9B%E5%85%A5%E5%AE%B9%E5%99%A8) 11. [单次运行](#%E5%8D%95%E6%AC%A1%E8%BF%90%E8%A1%8C) 12. [传递运行命令](#%E4%BC%A0%E9%80%92%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4) 13. [容器的启动和关闭](#%E5%AE%B9%E5%99%A8%E7%9A%84%E5%90%AF%E5%8A%A8%E5%92%8C%E5%85%B3%E9%97%AD) 14. [进入到正在运行的容器](#%E8%BF%9B%E5%85%A5%E5%88%B0%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%AE%B9%E5%99%A8) 1. [使用 attach 命令 此命令用不多,使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,此模式是共享终端模式和 screen 类似](#%E4%BD%BF%E7%94%A8-attach-%E5%91%BD%E4%BB%A4-%E6%AD%A4%E5%91%BD%E4%BB%A4%E7%94%A8%E4%B8%8D%E5%A4%9A%EF%BC%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F%E4%B8%BA-docker-attach-%E5%AE%B9%E5%99%A8%E5%90%8D%EF%BC%8Cattach-%E7%B1%BB%E4%BC%BC%E4%BA%8E-vnc%EF%BC%8C%E6%93%8D%E4%BD%9C%E4%BC%9A%E5%9C%A8%E5%90%84%E4%B8%AA%E5%AE%B9%E5%99%A8%E7%95%8C%E9%9D%A2%E6%98%BE%E7%A4%BA%EF%BC%8C%E6%89%80%E6%9C%89%E4%BD%BF%E7%94%A8%E6%AD%A4%E6%96%B9%E5%BC%8F%E8%BF%9B%E5%85%A5%E5%AE%B9%E5%99%A8%E7%9A%84%E6%93%8D%E4%BD%9C%E9%83%BD%E6%98%AF%E5%90%8C%E6%AD%A5%E6%98%BE%E7%A4%BA%E7%9A%84%E4%B8%94-exit-%E5%90%8E%E5%AE%B9%E5%99%A8%E5%B0%86%E8%A2%AB%E5%85%B3%E9%97%AD%EF%BC%8C%E4%B8%94%E4%BD%BF%E7%94%A8-exit-%E9%80%80%E5%87%BA%E5%90%8E%E5%AE%B9%E5%99%A8%E5%85%B3%E9%97%AD%EF%BC%8C%E4%B8%8D%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8%EF%BC%8C%E6%AD%A4%E6%A8%A1%E5%BC%8F%E6%98%AF%E5%85%B1%E4%BA%AB%E7%BB%88%E7%AB%AF%E6%A8%A1%E5%BC%8F%E5%92%8Cscreen%E7%B1%BB%E4%BC%BC) 2. [使用 exec 命令](#%E4%BD%BF%E7%94%A8-exec-%E5%91%BD%E4%BB%A4) 3. [使用 nsenter 命令](#%E4%BD%BF%E7%94%A8-nsenter-%E5%91%BD%E4%BB%A4) 4. [脚本方式](#%E8%84%9A%E6%9C%AC%E6%96%B9%E5%BC%8F) 15. [查看容器内部的 hosts 文件](#%E6%9F%A5%E7%9C%8B%E5%AE%B9%E5%99%A8%E5%86%85%E9%83%A8%E7%9A%84-hosts-%E6%96%87%E4%BB%B6) 16. [关闭删除容器](#%E5%85%B3%E9%97%AD%E5%88%A0%E9%99%A4%E5%AE%B9%E5%99%A8) 1. [批量关闭正在运行的容器](#%E6%89%B9%E9%87%8F%E5%85%B3%E9%97%AD%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%AE%B9%E5%99%A8) 2. [批量强制关闭正在运行的容器](#%E6%89%B9%E9%87%8F%E5%BC%BA%E5%88%B6%E5%85%B3%E9%97%AD%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%AE%B9%E5%99%A8) 3. [批量删除已退出容器](#%E6%89%B9%E9%87%8F%E5%88%A0%E9%99%A4%E5%B7%B2%E9%80%80%E5%87%BA%E5%AE%B9%E5%99%A8) 4. [批量删除所有容器](#%E6%89%B9%E9%87%8F%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E5%AE%B9%E5%99%A8) 17. [指定容器 DNS](#%E6%8C%87%E5%AE%9A%E5%AE%B9%E5%99%A8-DNS) 9. [小结](#%E5%B0%8F%E7%BB%93) .left-col .switch-btn, .left-col .switch-area {display: none;} .toc-level-3 i, .toc-level-3 ol { display: none !important; } # [](#docker "docker")docker ## [](#docker-简介 "docker 简介")docker 简介 首先 Docker 是一个在 2013 年开源的应用程序并且是一个基于 go 语言编写是一个开源的 pass 服务 (Platform as a Service,平台即服务的缩写),go 语言是由 google 开发,docker 公司最早叫 dotCloud 后由于 Docker 开源后大受欢迎就将公司改名为 Docker Inc,总部位于美国加州的旧金山,Docker 是基于 linux 内核实现,Docker 最早采用 LXC 技术 (LinuX Container 的简写,LXC 是 Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术 KVM(Kernel-based Virtual Machine) 基于模块实现,Docker 后改为自己研发并开源的 runc 技术运行容器 Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端 / 服务端架构,使用远程 API 来管理和创建 Docker 容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,docker 的三大理念是 build(构建)、ship(运输)、 run(运行),Docker 遵从 aoache 2.0 协议,并通过(namespace 及 cgroup 等)来提供容器的资源隔离与安全保障等,所以 Docke 容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机 6-8% 性能)的额外资源开销,因此可以大幅提高资源利用率, 总而言之 Docker 是一种用了新颖方式实现的轻量级虚拟机. 类似于 VM 但是在原理和应用上和 VM 的差别还是很大的,并且 docker 的专业叫法是应用容器 (Application Container) | 管理区域 | IDC(全都是自己管理) | IAAS(infrastructure as a service 操作系统之上的服务) | PAAS(platform as a services web 应用) | SAAS(software as a service 办公应用等,大部分通过 web 接入使用) | | ---------- | ------------ | ------------------------------------------- | ----------------------------------- | ------------------------------------------------ | | 用户数据 | 是 | 是 | 是 | 是 | | 应用程序 | 是 | 是 | 是 | 否 | | 运行环境 | 是 | 是 | 否 | 否 | | 中间件 | 是 | 是 | 否 | 否 | | 操作系统 | 是 | 是 | 否 | 否 | | hypervisor | 是 | 否 | 否 | 否 | | 服务器 | 是 | 否 | 否 | 否 | | 存储层 | 是 | 否 | 否 | 否 | | 网络层 | 是 | 否 | 否 | 否 | ## [](#docker-的组成 "docker 的组成")docker 的组成 Docker 客户端 (Client):客户端使用 docker 命令或其他工具调用 docker API Docker 服务端 (Server):Docker 守护进程,运行 docker 容器 Docker 镜像 (Images):镜像可以理解为创建实例使用的模板 Docker 容器 (Container): 容器是从镜像生成对外提供服务的一个或一组服务 Docker 仓库 (Registry): 保存镜像的仓库,类似于 git 或 svn 这样的版本控制系统,官方仓库: [https://hub.docker.com/](https://hub.docker.com/) Docker 主机 (Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器 Docker 对比虚拟机 资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机 开销更小:不需要启动单独的虚拟机占用硬件资源 启动速度更快:可以在数秒内完成启动 ![](https://final233.gitee.io/images/1613625052839.png) 使用虚拟机是为了更好的实现服务运行环境隔离,但是一个虚拟机只运行一个服务,很明显资源利用率比较低 ## [](#Docker-的优势 "Docker 的优势")Docker 的优势 快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。 高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。 节省开支:提高服务器利用率,降低 IT 支出。 简化配置:将运行环境打包保存至容器,使用时直接启动即可。 快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从 A 宿主机迁移到 B 宿主机,甚至是 A 平台迁移到 B 平台 ## [](#Docker-的缺点 "Docker 的缺点")Docker 的缺点 隔离性:各应用之间的隔离不如虚拟机 ## [](#docker-容器-的核心技术 "docker(容器) 的核心技术")docker(容器) 的核心技术 ### [](#容器规范 "容器规范")容器规范 除了 docker 之外的 docker 技术,还有 coreOS 的 rkt,还有阿里的 Pouch,为了保证容器生态的标志性和健康可持续发展,包括 Google、Docker 等公司共同成立了一个叫 open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前 OCI 一共发布了两个规范,分别是 runtime spec 和 image format spec,有了这两个规范,不通的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性 ### [](#容器-runtime "容器 runtime")容器 runtime runtime 是真正运行容器的地方,因此为了运行不同的容器 runtime 需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。 目前主流的三种 runtime: Lxc:linux 上早期的 runtime,Docker 早期就是采用 lxc 作为 runtime。 runc:目前 Docker 默认的 runtime,runc 遵守 OCI 规范,因此可以兼容 lxc。 rkt:是 CoreOS 开发的容器 runtime,也符合 OCI 规范,所以使用 rktruntime 也可以运行 Docker 容器 ### [](#容器管理工具 "容器管理工具")容器管理工具 管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行。 Lxd 是 lxc 的管理工具。 Runc 的管理工具是 docker engine,docker engine 包含后台 deamon 和 cli 两部分,大家经常提到的 Docker 就是指的 docker engine。 Rkt 的管理工具是 rkt cli ### [](#容器定义工具 "容器定义工具")容器定义工具 容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建 Docker image:是 docker 容器的模板,runtime 依据 docker image 创建容器。 Dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image。 ACI(App container image):与 docker image 类似,是 CoreOS 开发的 rkt 容器的镜像格式 ### [](#Registry "Registry")Registry 统一保存共享镜像的地方,叫做镜像仓库。 Image registry:docker 官方提供的私有仓库部署工具。 Docker hub:docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。 Harbor:vmware 提供的自带 web 的镜像仓库,目前有很多公司使用 ### [](#编排工具 "编排工具")编排工具 当多个容器在多个主机运行的时候,单独管理每个容器是相当负载而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、 动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。 容器编排通常包括容器管理、调度、集群定义和服务发现等功能。 Docker swarm:docker 开发的容器编排引擎。 Kubernetes:google 领导开发的容器编排引擎,内部项目为 Borg,且其同时支持 docker 和 CoreOS。 Mesos+Marathon:通用的集群组员调度平台,mesos 与 marathon 一起提供容器编排引擎功能 ## [](#docker-容器-的依赖技术 "docker(容器) 的依赖技术")docker(容器) 的依赖技术 ### [](#容器网络 "容器网络")容器网络 docker 自带的网络 docker network 仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如 calico、flannel 等 ### [](#服务发现 "服务发现")服务发现 容器的动态扩容特性决定了容器 IP 也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名 ### [](#容器监控 "容器监控")容器监控 可以通过原生命令 docker ps/top/stats 查看容器运行状态,另外也可以使 heapster/ Prometheus 等第三方监控工具监控容器的运行状态 ### [](#数据管理 "数据管理")数据管理 容器的动态迁移会导致其在不通的 Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷 / 存储挂载等方式解决 ### [](#日志收集 "日志收集")日志收集 docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过 ELK 等专门的日志收集分析和展示工具进行处理 ## [](#Docker-安装及基础命令介绍 "Docker 安装及基础命令介绍")Docker 安装及基础命令介绍 官方网址:[https://www.docker.com/](https://www.docker.com/) 系统版本选择: Docker 目前已经支持多种操作系统的安装运行,比如 Ubuntu、CentOS、Redhat、Debian、Fedora,甚至是还支持了 Mac 和 Windows,在 linux 系统上需要内核版本在 3.10 或以上,docker 版本号之前一直是 0.X 版本或 1.X 版本,但是从 2017 年 3 月 1 号开始改为每个季度发布一次稳版,其版本号规则也统一变更为 YY.MM,例如 17.09 表示是 2017 年 9 月份发布的,本次演示的操作系统使用 Centos 7.5 为例 Docker 版本选择 ocker 之前没有区分版本,但是 2017 年推出 (将 docker 更名为) 新的项目 Moby,github 地址:[https://github.com/moby/moby,Moby](https://github.com/moby/moby%EF%BC%8CMoby) 项目属于 Docker 项目的全新上游,Docker 将是一个隶属于的 Moby 的子产品,而且之后的版本之后开始区分为 CE 版本(社区版本)和 EE(企业收费版),CE 社区版本和 EE 企业版本都是每个季度发布一个新版本,但是 EE 版本提供后期安全维护 1 年,而 CE 版本是 4 个月,本次演示的 Docker 版本为 18.03,以下为官方原文 [https://www.docker.com/blog/docker-enterprise-edition/](https://www.docker.com/blog/docker-enterprise-edition/) Docker CE and EE are released quarterly, and CE also has a monthly “Edge” option.Each Docker EE release is supported and maintained for one year and receivessecurity and critical bugfixes during that period. We are also improving Docker CEmaintainability by maintaining each quarterly CE release for 4 months. That getsDocker CE users a new 1-month window to update from one version to the next Docker CE 和 EE 每季度发布一次,CE 还具有每月 “Edge” 选项。每个 Docker EE 版本均受支持和维护一年,并在此期间获得安全性和重要的错误修正。我们还将每个季度的 CE 版本维持 4 个月,从而提高 Docker CE 的可维护性。这为 Docker CE 用户提供了一个新的 1 个月窗口,可以从一个版本更新到另一个版本 官方 rpm 包下载地址 [https://download.docker.com/linux/centos/7/x86_64/stable/Packages/](https://download.docker.com/linux/centos/7/x86_64/stable/Packages/) 阿里镜像下载地址 [https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages](https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages) ### [](#通过修改-yum-源安装 "通过修改 yum 源安装")通过修改 yum 源安装 ```null yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum makecache fast yum -y install docker-ce ``` 通过 rpm 安装 ```null [root@localhost docker]# rpm -ivh docker-ce-20.10.3-3.el7.x86_64.rpm warning: docker-ce-20.10.3-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY error: Failed dependencies: container-selinux >= 2:2.74 is needed by docker-ce-3:20.10.3-3.el7.x86_64 containerd.io >= 1.4.1 is needed by docker-ce-3:20.10.3-3.el7.x86_64 docker-ce-cli is needed by docker-ce-3:20.10.3-3.el7.x86_64 docker-ce-rootless-extras is needed by docker-ce-3:20.10.3-3.el7.x86_64 rpm -ivh container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm rpm -ivh containerd.io-1.4.3-3.1.el7.x86_64.rpm rpm -ivh docker-ce-cli-20.10.3-3.el7.x86_64.rpm rpm -ivh slirp4netns-0.4.3-4.el7_8.x86_64.rpm rpm -ivh fuse3-libs-3.6.1-4.el7.x86_64.rpm rpm -ivh fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm rpm -ivh docker-ce-rootless-extras-20.10.3-3.el7.x86_64.rpm --force --nodeps rpm -ivh docker-ce-20.10.3-3.el7.x86_64.rpm --force --nodeps ``` ### [](#启动并验证-docker-服务 "启动并验证 docker 服务")启动并验证 docker 服务 ```null systemctl start docker sysemctl enable docker ``` ### [](#验证-docker-版本 "验证 docker 版本")验证 docker 版本 ```null [root@localhost docker]# docker version Client: Docker Engine - Community Version: 20.10.3 API version: 1.41 Go version: go1.13.15 Git commit: 48d30b5 Built: Fri Jan 29 14:34:14 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.3 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 46229ca Built: Fri Jan 29 14:32:37 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad0 ``` ### [](#验证-docker0-网卡 "验证 docker0 网卡")验证 docker0 网卡 在 docker 安装启动之后,默认会生成一个名称为 docker0 的网卡并且默认 IP 地址为 172.17.0.1 的网卡 ```null [root@docker ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:a3:d7:fa brd ff:ff:ff:ff:ff:ff inet 192.168.10.2/24 brd 192.168.10.255 scope global eth0 valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 00:0c:29:a3:d7:04 brd ff:ff:ff:ff:ff:ff 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:22:3b:21:e2 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever ``` ### [](#验证-docker-信息 "验证 docker 信息")验证 docker 信息 ```null [root@docker ~]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.1-docker) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.3 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux Default Runtime: runc Init Binary: docker-init containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff init version: de40ad0 Security Options: seccomp Profile: default Kernel Version: 3.10.0-957.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 3.839GiB Name: docker ID: PQ75:MGOL:UY3S:42PU:XGJI:ZLJ3:DDCX:S3K4:L4XY:TJ3Q:JWJM:2XTN Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled ``` ### [](#docker-存储引擎 "docker 存储引擎")docker 存储引擎 目前 docker 的默认存储引擎为 overlay2,需要磁盘分区支持 d-type 文件分层功能,因此需要系统磁盘的额外支持 官方文档关于存储引擎的选择文档:[https://docs.docker.com/storage/storagedriver/select-storage-driver/](https://docs.docker.com/storage/storagedriver/select-storage-driver/) Docker 官方推荐首选存储引擎为 overlay2 其次为 devicemapper,但是 devicemapper 存在使用空间方面的一些限制,虽然可以通过后期配置解决,但是官方依然推荐使用 overlay2,以下是网上查到的部分资料:[https://www.cnblogs.com/youruncloud/p/5736718.html](https://www.cnblogs.com/youruncloud/p/5736718.html) ```null [root@docker ~]# xfs_info / meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=6343680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=25374720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 #早期centos版本ftype=0会影响docker存储引擎,旧版本只能共享100G log =internal bsize=4096 blocks=12390, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 ``` 如果 docker 数据目录是一块单独的磁盘分区而且是 xfs 格式的,那么需要在格式化的时候加上参数 - n ftype=1,否则后期在启动容器的时候会报错不支持 d-type ```null WARNING: overLay: the backing xfs filesystem is formatted **without d_type support,** which Leads to incorrect behavior Reformat the filesystem with ftype=1 to enable dtype support. Running without d type support will not be supported in future releases ``` ### [](#docker镜像加速配置 "docker 镜像加速配置")docker 镜像加速配置 国内下载国外的镜像有时候会很慢,因此可以更改 docker 配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的 获取加速地址 浏览器打开 [http://cr.console.aliyun.com](http://cr.console.aliyun.com/) 注册或登录阿里云账号,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明 镜像服务中心 –> 镜像中心 –> 镜像加速器 [https://t487r8sk.mirror.aliyuncs.com](https://t487r8sk.mirror.aliyuncs.com/) ![](https://final233.gitee.io/images/1613643409649.png) ```null tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://t487r8sk.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker ``` ### [](#Docker-镜像基础命令 "Docker 镜像基础命令")Docker 镜像基础命令 docker 命令是最常使用的命令,其后面可以加不同的参数以实现响应的功能 #### [](#搜索镜像 "搜索镜像")搜索镜像 在官方的 docker 仓库中搜索指定名称的 docker 镜像,也会有很多三方镜像 ```null docker search centos:7.2.1511 #指定版本号 docker search centos 不带版本号默认latest ``` #### [](#下载镜像 "下载镜像")下载镜像 ```null docker pull nginx docker pull hello-world docker pull centos docker pull centos:7.6.1810 ``` #### [](#查看本地镜像 "查看本地镜像")查看本地镜像 下载完成的镜像比下载的大,因为下载完成后会解压 ```null REPOSITORY #镜像所属的仓库名称 TAG #镜像版本号(标识符),默认为 latest IMAGE ID #镜像唯一 ID 标示 CREATED #镜像创建时间 VIRTUAL SIZE #镜像的大小 [root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest f6d0b4767a6c 5 weeks ago 133MB centos latest 300e315adb2f 2 months ago 209MB hello-world latest bf756fb1ae65 13 months ago 13.3kB centos 7.6.1810 f1cb7c7d58b7 23 months ago 202MB ``` #### [](#镜像导出 "镜像导出")镜像导出 可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用 以下两种方法都可以 docker save -o /tmp/centos.tar.gz centos docker save centos > /tmp/centos.tar.gz #### [](#查看镜像内容 "查看镜像内容")查看镜像内容 ```null mkdir /tmp/centos tar xf /tmp/centos.tar.gz -C /tmp/centos [root@docker centos]# cat manifest.json #此配置文件包含了镜像的相关配置,配置文件、分层 [{"Config":"f1cb7c7d58b73eac859c395882eec49d50651244e342cd6c68a5c7809785f427.json","RepoTags":["centos:7.6.1810"],"Layers":["b381a91ac032488a645b132ff8fe54935b42802ef1066668e5e15971aa509a0c/layer.tar"]},{"Config":"300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55.json","RepoTags":["centos:latest"],"Layers":["f1037aee492bd55e63970da6da22c5c974c84e5ce4cb967104f2666c6abf7f98/layer.tar"]}] #分层为了方便文件的共用,即相同的文件可以共用 [{"Config":" 配 置 文 件 .json","RepoTags":["docker.io/nginx:latest"],"Layers":[" 分 层1/layer.tar","分层 2 /layer.tar","分层 3 /layer.tar"]}] ``` #### [](#镜像导入 "镜像导入")镜像导入 以下两种方法都支持 ```null docker load < /centos/centos.tar.gz docker load -i /tmp/centos.tar.gz ``` #### [](#删除镜像 "删除镜像")删除镜像 ```null docker rmi centos ``` ## [](#容器操作基础命令 "容器操作基础命令")容器操作基础命令 ```null docker run [选项] [镜像名] [shell 命令] [参数] docker run [参数选项] [镜像名称,必须在所有选项的后面] [/bin/echo 'hellowold'] #单次执行,没有自定义容器名称 docker run centos /bin/echo 'hello wold' #启动的容器在执行完 shel 命令就退出了 ``` ### [](#从镜像启动一个容器 "从镜像启动一个容器")从镜像启动一个容器 会直接进入到容器,并随机生成容器 ID 和名称 ```null [root@docker centos]# docker run -it centos bash [root@dfca5b6037df /]# ``` **退出容器不注销** ctrl+p+q ### [](#显示正在运行的容器 "显示正在运行的容器")显示正在运行的容器 ```null [root@docker centos]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfca5b6037df centos "bash" 2 minutes ago Up 2 minutes dazzling_bose ``` ### [](#显示所有容器 "显示所有容器")显示所有容器 包括当前正在运行以及已经关闭的所有容器 ```null [root@docker centos]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c9251b358b6 centos "echo 'hello word'" Less than a second ago Exited (0) Less than a second ago pensive_leavitt dfca5b6037df centos "bash" 3 minutes ago Up 3 minutes dazzling_bose ``` ### [](#删除运行中的容器 "删除运行中的容器")删除运行中的容器 即使容正在运行当中,也会被强制删除掉 ```null [root@docker centos]# docker ps #删除前 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfca5b6037df centos "bash" 3 minutes ago Up 3 minutes dazzling_bose [root@docker centos]# docker rm -f dfca5b6037df dfca5b6037df [root@docker centos]# docker ps #删除后 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ``` ### [](#端口映射 "端口映射")端口映射 #### [](#随机映射端口 "随机映射端口")随机映射端口 ```null 前台启动并随机映射本地端口到容器的 80,前台启动的会话窗口无法进行其他操作,除非退出,但是退出后容器也会退出 docker run -P nginx #随机端口映射,其实是默认从 32768 开始 ``` #### [](#指定端口映射 "指定端口映射")指定端口映射 本地端口 81 映射到容器 80 端口 ```null docker run -p 81:80 --name nginx1 nginx ``` 本地 IP: 本地端口: 容器端口 ```null docker run -p 192.168.10.2:82:80 --name nginx2 nginx ``` 本地 IP: 本地随机端口: 容器端口 ```null docker run -p 192.168.10.2::80 --name nginx3 nginx ``` 本机 ip: 本地端口: 容器端口 / 协议,默认为 tcp 协议 ```null docker run -p 192.168.10.2:80:80/tcp --name nginx4 nginx ``` 一次性映射多个端口 + 协议 ```null docker run -p 80:80/tcp -p 443:443/tcp -p 53:53/udp --name nginx5 nginx ``` ### [](#查看容器访问日志 "查看容器访问日志")查看容器访问日志 ```null docker logs nginx4 docker logs nginx4 -f #实时查看 ``` ### [](#查看容器端口映射 "查看容器端口映射")查看容器端口映射 ```null [root@docker ~]# docker port nginx5 443/tcp -> 0.0.0.0:443 53/udp -> 0.0.0.0:53 80/tcp -> 0.0.0.0:80 docker ps 也可以查看容器的端口映射 ``` ### [](#自定义容器名称 "自定义容器名称")自定义容器名称 ```null docker run -it --name nginx6 nginx ``` ### [](#后台启动容器 "后台启动容器")后台启动容器 ```null [root@docker ~]# docker run -d -P --name nginx7 nginx 8ebb02534e53de4ecb0dffb01a5e6f46f33d79f2529c28fb6cfe3f4ba852df37 ``` ### [](#创建并进入容器 "创建并进入容器")创建并进入容器 ```null [root@docker ~]# docker run -d --name centos1 centos f85a346748b86913b32de0b43c000f7936691e3b321d48b284eda5d1e06255a0 ``` ### [](#单次运行 "单次运行")单次运行 容器退出后自动删除 ```null docker run -it --rm --name nginx1 nginx ``` ### [](#传递运行命令 "传递运行命令")传递运行命令 容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令 ```null docker run -d centos /usr/bin/tail -f /etc/hosts ``` ### [](#容器的启动和关闭 "容器的启动和关闭")容器的启动和关闭 ```null docker stop 5c9fc1ee8fdd docker start 5c9fc1ee8fdd ``` ### [](#进入到正在运行的容器 "进入到正在运行的容器")进入到正在运行的容器 #### [](#使用-attach-命令-此命令用不多,使用方式为-docker-attach-容器名,attach-类似于-vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且-exit-后容器将被关闭,且使用-exit-退出后容器关闭,不推荐使用,此模式是共享终端模式和screen类似 "使用 attach 命令 此命令用不多,使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,此模式是共享终端模式和 screen 类似")使用 attach 命令 此命令用不多,使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,**不推荐使用**,此模式是共享终端模式和 screen 类似 ```null docker attach 5c9fc1ee8fdd ``` #### [](#使用-exec-命令 "使用 exec 命令")使用 exec 命令 执行单次命令与进入容器,**不是很推荐此方式,虽然 exit 退出容器还在运行** ```null [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5c9fc1ee8fdd centos "/usr/bin/tail -f /e…" 7 minutes ago Up 6 minutes determined_almeida [root@docker ~]# docker exec -it 5c9fc1ee8fdd bash ``` #### [](#使用-nsenter-命令 "使用 nsenter 命令")使用 nsenter 命令 **推荐使用此方式**,nsenter 命令需要通过 PID 进入到容器内部,不过可以使用 ```null yum install util-linux #安装 nsenter 命令 docker inspect -f "." 容器ID/容器名称 docker inspect 5c9fc1ee8fdd [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5c9fc1ee8fdd centos "/usr/bin/tail -f /e…" 10 minutes ago Up 9 minutes determined_almeida [root@docker ~]# docker inspect -f "{{.NetworkSettings.IPAddress}}" 5c9fc1ee8fdd #获取容器的IP 172.17.0.2 获取到某个docker 容器的 PID,可以通过 PID 进入到容器内 [root@docker ~]# docker inspect -f "{{.State.Pid}}" 5c9fc1ee8fdd 15298 使用PID时入容器 [root@docker ~]# nsenter -t 15298 -m -u -i -n -p [root@5c9fc1ee8fdd /]# ``` #### [](#脚本方式 "脚本方式")脚本方式 ```null #!/bin/bash _docker_in(){ NAME_ID=$1 PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID}) nsenter -t ${PID} -m -u -i -n -p } _docker_in $1 ``` ### [](#查看容器内部的-hosts-文件 "查看容器内部的 hosts 文件")查看容器内部的 hosts 文件 ```null [root@5c9fc1ee8fdd /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 5c9fc1ee8fdd #默认会将实例的 ID 添加到自己的 hosts 文件 ping 5c9fc1ee8fdd ``` ### [](#关闭删除容器 "关闭删除容器")关闭删除容器 #### [](#批量关闭正在运行的容器 "批量关闭正在运行的容器")批量关闭正在运行的容器 ```null docker stop $(docker ps -a -q) 正常关闭所有运行中的容器 ``` #### [](#批量强制关闭正在运行的容器 "批量强制关闭正在运行的容器")批量强制关闭正在运行的容器 ```null docker kill $(docker ps -a -q) 强制关闭所有运行中的容器 ``` #### [](#批量删除已退出容器 "批量删除已退出容器")批量删除已退出容器 ```null docker rm -f `docker ps -aq -f status=exited` ``` #### [](#批量删除所有容器 "批量删除所有容器")批量删除所有容器 ```null docker rm -f $(docker ps -a -q) ``` ### [](#指定容器-DNS "指定容器 DNS")**指定容器 DNS** dns 服务,默认采用宿主机的 dns 地址 一是将 dns 地址配置在宿主机 二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1 `docker run -it --rm --dns 223.6.6.6 centos bash` ## [](#小结 "小结")小结 1、新装 docker,检查硬盘内容和分区 目前 docker 的默认存储引擎为 overlay2,需要磁盘分区支持 d-type 文件分层功能,因此需要系统磁盘的额外支持 xfs_info / ftype=1 如果 ftype=0 时,那么需要在格式化的时候加上参数 - n ftype=1 **修改存储引擎会丢失数据,建议使用 docker 挂载一个大的硬盘,重新挂载也会丢失数据** 2、使用国内 aliyun 加速器 [http://cr.console.aliyun.com/](http://cr.console.aliyun.com/) 下载完镜像可以上专到公司内的 Hub 上 3、删除镜像 先删除容器 docker ps -a 查看 docker rmi 容器 ID / 容器名称 先删除 ID 才可以删除镜像 docker image rm 镜像名 4、启动一个容器 标准输入进入到窗口 it interactive tty docker run -i -t centos bash #bash 是命令 **容器退出,里面的数据是不会保留的,退出容器不退出 ctrl+p+q 后面启动,一般很少这样启动** 5、docker exec -it 容器 ID / 容器名称 bash 进入后台容器 6、端口映射 ```null docker -it -d -p 192.168.10.2:80:80 -p 443:443/tcp -p 53:53/udp nginx --name web1 命令可省略 docker -it -p -d 本地端口:容器端口 镜像名称 命令,可省略 ``` 7、**docker 里面不支持 systemctl 启动服务,只能运行二进制文件执行** 8、docker 查看端口映射 docker port 容器名称 / ID 9、docker run -d –it –name nginx-web -p 80:80 -p 1.1.1.1:443:443 nginx 10、删除容器 -v 存储盘也删除了,不保存记录 docker rm -fv `docker ps -a -q` 11、测试启动,只启动一次,验证镜像是否正常,单次运行 docker run -it –rm -P –name nginx1 nginx 12、传递命令给后台某一个容器 容器停止和启动,一般不会,主要针对 Hub 镜像服务重启,数据库也可以这样使用 13、建议使用 exec 或者 nsenter,attach 是共享的 有 bash 环境才可以进的去 ```null docker inspect -f 容器ID docker inspect -f "{{.State.Pid}}" 容器名称 nsenter -t 容器PID -m -u -i -n -p ``` 14、kill 掉窗口也能使用 docker start 容器 ID / 容器名称 启动 15、**容器默认的 DNS 是宿主主机,或者启动时加参数指定 DNS** `docker run -it --rm --dns 1.1.1.1 centos bash` 常用操作:搜索、下载、导出、导入、删除 ```null docker load -i centos-latest.tar.xz #导入本地镜像 docker save -o /tmp/centos.tar centos #导出镜像 docker rmi 镜像 ID/镜像名称 #删除指定 ID 的镜像,通过镜像启动容器的时候镜像不能被删除,除非将容器全部关闭 docker rm 容器 ID/容器名称 #删除容器 docker rm 容器 ID/容器名-f #强制删除正在运行的容器 ``` * * * 转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 438803792@qq.com [https://final233.gitee.io/2022/01/12/docker----1%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/](https://final233.gitee.io/2022/01/12/docker----1%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/)
如何度过人生的至暗时刻? - 「ONE · 一个」
16-GithubAlist
Loading...
目录