IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker 随记 一(基础篇) -> 正文阅读

[系统运维]Docker 随记 一(基础篇)

一、Docer基本概念

1. 什么是Docker?

Docker 是一个基于Go语言开发的开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

2. Docker的优势

  • 交互和部署快速。
  • 资源高效利用。对资源的消耗较低。
  • 易扩展、兼容性强。
  • 管理方便。
  • 启动迅速(秒级)

3. Docker相关组件

  • 客户端(dockerclient):一个用于交互/发送指令的接口。是命令行或遵循了docker api规则的客户端。
  • 服务端(dockerserver):一般在宿主机后台运行的,主要用于处理相关请求。
  • dockerd:主要作为服务端接受客户端的请求。
  • containerd:为dockerd的子进程,提供gORPC接口响应来自dockerd的请求,主要管理runC镜像和容器环境。
  • docker-proxy:是dockerd的子进程,主要负责容器端口映射时的网络映射配置。
  • containerd-shim:是containerd的子进程,为runC容器提供支持,也是容器内的进程的根进程。

4. Docker与虚拟机相比

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。Docker是在系统层面上实现虚拟化,传统方式是在硬件层面上实现虚拟化。

二、Docer基本命令

分类命令定义参考
镜像
images显示镜像-a:列出本地所有 -p:只显示镜像ID
search查找镜像docker search imagesName
pull下载镜像docker pull imagesName
commit保存镜像docker commit -m “提交的描述信息” -a “作者” 容器ID 要创建的目标镜像名称:[标签名]提交容器使之成为一个新的镜像
rmi删除镜像docker rmi imagesName
容器
diff列出容器内部的变化docker diff container
export导出容器作为一个tar包docker export -o container
port列出容器端口映射
update更新容器的配置docker update 需要更新的配置 container
run运行容器docker run [OPTIONS] IMAGE
ps/container ls列出容器-a:列出所有 -l:列出最近创建
start启动容器docker start containerID或containerIDName
restart重新启动容器docker restart containerID或containerIDName
stop停止容器docker stop containerID或containerIDName
kill强制停止容器docker kill containerID或containerIDName
rm删除容器docker rm containerID或containerIDName
logs查看容器日志-f : 查看实时日志 -t : 查看日志产生的日期 --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志 --tail=10 : 查看最后的10条日志
inspect查看容器内部信息docker inspect containerID或containerIDName
attach进到容器内docker attach containerID
exec进到容器内docker exec containerIDC 进入方式
cp从容器内拷贝文件到宿主机.docker cp 容器ID:容器内的文件路径 宿主机路径
网络Docker network
create创建网stats络
connect连接网络
ls列出网络
rm删除网络
inspect列出网络内部详细信息
disconnect断开网络
卷积Docker volume
create创建卷积
ls列出卷积
rm删除卷积
prune清理无用的卷积
inspect列出卷积内部详细信息

三、Docer部分命令详解

1.create下容器运行模式相关参数

参数说明样式
-d后台运行
-i,–interactive=true/false保持标准输入打开默认false
–net=指定网络模式
-P(大)随机映射临时端口
-p(小)指定映射端口
-t,–tty=是否分配伪终端
-v挂载文件卷到容器,实现文件共享
-w指定工作目录
–net=""网络模式host:与主机共享网络命名空间;container:与容器共享命名空间;none:独立命名空间,且未配置;bridge:桥接模式,创建一个名为docker0的虚拟网桥。(默认)
–expose=[]指定容器端口暴露或端口范围
–detach-keys=""从attach模式退出的快捷键
–entrypoint=“”镜像入口命令设置镜像命令如有。则覆盖
-i,–interactive=true/false保持标准输入打开,默认false
–ipc=""容器ipc命名空间
—isolation=“default”隔离机制
–log-driver=容器日志启动类型json-file:json, 默认的logdriver驱动;syslog:写入指定的syslog地址;journald:写入指定jounald;gelf:以gelf格式发送日志;fluentd:发送到指定的fluentd服务;awslogs:发送到指定的Amazon CloudWatch Logs;splunk:发送到指定的splunk服务;etwlogs:发送到Event Tracing for Windows, 仅支持windows平台;gcplogs:发送到Google Cloud日志系统;none:丢弃容器输出。
–log-opt=[]传递给日志选项
–pid=host容器pid命名空间
–userns=""启用userns-remap 时配置用户命名空间的模式
–ust=host容器uts命名空间策略
–restart=""容器重启策略always:自动;no:不重启;on-failure[:max-retry]:非正常退出时最多重启次数;unless-stopped:退出时总是重启容器。
–rm=true/false容器退出后是否自动删除,不能与-d连用
-t,–tty=false/true是否分配一个伪终端
–tmpfs=[]挂载临时文件到容器
–valume-driver=""挂载文件卷的驱动类型
–valume-from=[]从其他容器挂载卷

注:命名空间:隔离相关资源,保证容器间互不影响。

  • pid命名空间:进程编号。不同用户的进程就是通过 pid 命名空间隔离开的,且不同命名空间中可以有相同 pid。
  • ust命名空间:主机与域名。允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非主机上的一个进程。
  • ipc命名空间:信号量、消息队列和共享内存。容器的进程间交互实际上还是 host 上具有相同 pid 命名空间中的进程间交互。
  • network命名空间:网络设备、网络栈、端口等
  • mount命名空间:挂载点,文件系统。mnt 命名空间允许不同命名空间的进程看到的文件结构不同。
  • user命名空间:用户和用户组。

2.create下容器环境配置

参数说明样式
–name=" "容器别名
-h,-- hostname=" "指定容器主机名
–link= [:alias]容器间相互链接
-e,–env= []指定容器内环境变量
– add-host=[]主机和ip地址的映射关系
– device= []主机物理设备与容器的映射关系
–dns - search= []dns搜索域
–dns -opt= []自定义的DNS选项
–dns= []自定义的DNS服务器
–env-file= []从文件中读取环境变量到容器内
–ip=" "指定IPv4地址
–ip6=" "指定IPv6地址
–link-local-ip= [] :链接地址列表
–mac-address=" "容器Mac地址

3.create下容器资源限制和安全保护的相关配置

参数说明样式
–kernel-memory=" "限制容器使用内核的内存大小,单位可以是b、k、m或g
-m,–memory=" "限制容器内应用使用的内存,单位可以是b、k、m或g
–memory-reservation=""当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值
–memory-swap=“LIMIT”限制容器使用内存和交换区的总大小
–oom-kill-disable=truefalse内存耗尽时是否杀死容器
–cpu-shares=0允许容器使用CPU资源的相对权重,默认一个容器能用满个核的 CPU
–cap-add=[]增加容器的Linux指定安全能力
–cpu-quota=0限制容器在CFS调度器下的CPU配额
–device-read-bps=[]挂载设备的读吞吐率(以bps为单位)限制
–device-write-bps=[]挂载设备的写吞吐率(以bps为单位)限制
–device-read-iops=[]挂载设备的读速率(以每秒io次数为单位)限制
–device-write-iops=[]挂载设备的写速率(以每秒i/o次数为单位)限制
–health-cmd=" "指定检查容器健康状态的命令
–health-interval=0s执行健康检查的间隔时间,单位可以为ms、s、 m或h
–health-retries=int健康检查失败重试次数,超过则认为不健康
–health-start-period=0s容器启动后进行健康检查的等待时间,单位可以为ms、s、m或h
–health-timeout=0s健康检查的执行超时,单位可以为ms、s、m或h
–userns=""指定用户命名空间
–blkio-weight=10~1000容器读写块设备的1/0性能权重,默认为0
–blkio-weight-device=[DEVICE_ NAME : WEIGHT]指定各个块设备的I/O性能权重
–cap-drop=[]移除容器的Linux指定安全能力
–cgroup-parent=" "容器cgroups 限制的创建路径
–cidfile=""指定容器的进程ID号写到文件
–cpu-period=0限制容器在CFS调度器下的CPU占用时间片
–cpuset-cpus=" "限制容器能使用哪些CPU核心
–cpuset-mems=" "NUMA架构下使用哪些核心的内存
–no-healthcheck=truefalse是否禁用健康检查
–init在容器中执行-一个init进程,来负责响应信号和处理僵尸状态子进程
–oom-score-adj=""调整容器的内存耗尽参数
–pids-limit=""限制容器的pid个数
–privileged-truefalse是否给容器高权限,这意味着容器内应用将不受权限的限制,一般不推荐
–read-only=truefalse是否让容器内的文件系统只读
–security-opt= []指定一些安全参数,包括权限、安全能力、apparmor等
–stop-signal=SIGTERM指定停止容器的系统信号
– shm-size=""/dev/shm的大小
–sig-proxy=truefalse是否代理收到的信号给应用,默认为true,不能代理SIGCHLD、SIGSTOP和SIGKILL信号
–memory-swappiness=“0~100”调整容器的内存交换区参数
-U,–user=""指定在容器内执行命令的用户信息
–ulimit=[]通过ulimit来限制最大文件数、最大进程数

四、Docerfile命令详解

1. Dockerfile书写规范

  • 精简镜像用途,尽可能的使每个镜像的用途比较集中单一。
  • 选用合适的基础镜像。尽可能避免过大的父镜像。{应用镜像:slim;系统镜像:alpine、busybox或debian}
  • 提供注释和维护信息。方便后面的扩展和他人的使用。
  • 使用正确的版本号,尽可能的避免latest。避免环境不一致问题。
  • 减少镜像层数,即精简Run命令。
  • 使用(.dockertignore/cache),加快创建镜像速度。前者通过标记在执行docker build 时忽略的路径和文件,避免发送一些不必要文件;后者减少内容目录下的文件。
  • 及时删除临时文件和缓存文件
  • 调整合理的指令顺序。将可变和不可变的命令相互分离。
  • 减少外部源的干扰。当外部引用数据时,使用指定的持久地址并带有版本信息等。
    • 恰当使用多步骤创建。将编译和运行等过程分开。

2. Dockerfile基本命令说明

命令定义样式
arg用于存储创建镜像过程中引用的外部变量。可通过- build-arg来赋值。创建镜像时存在,创建结束销毁
env指定环境变量,在被后续run时使用,在镜像启动成的容器中也会存在。
from指定用于创建镜像所使用的基础镜像
label为生成的镜像添加元数据标签信息。相关信息可以辅助过滤特定镜像
expose指定镜像内服务监听的端口
entrypoint指定镜像的默认入口命令,该入口命令在容器启动时会作为根命令执行,所有传入值均为该命令参数。但只能有一个entrypoint ,重复则最后一个有效。
vulume创建一个数据卷挂载点。
workdir为后续的run,cmd,entrypoint指定工作目录。
user运行容器时的用户名或uid。
onbuild产生子镜像时,自动执行的操作命令。
stopsignal指定所创建镜像启动的容器接收退出的信号值。
healthcheck配置健康检查
shell指定其他命使用shell时的默认shell类型
run创建镜像的过程中运行。
cmd容器启动时默认执行的命令
add从容器外部复制内容到镜像,可以是本地文件、url和tar
copy从容器外部复制内容到镜像,只能是宿主机本地文件

如有问题,请回复区指正。谢谢

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:36:42  更:2021-08-25 12:37:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:53:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码