2025年Docker 随记 一(基础篇)

Docker 随记 一(基础篇)一 Docer 基本概念 1 什么是 Docker Docker 是一个基于 Go 语言开发的开源的应用容器引擎 可以让开发者打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的 Linux 机器或 Windows 机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何接口 2 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=true false 内存耗尽时是否杀死容器
–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=true false 是否禁用健康检查
–init 在容器中执行-一个init进程,来负责响应信号和处理僵尸状态子进程
–oom-score-adj="" 调整容器的内存耗尽参数
–pids-limit="" 限制容器的pid个数
–privileged-true false 是否给容器高权限,这意味着容器内应用将不受权限的限制,一般不推荐
–read-only=true false 是否让容器内的文件系统只读
–security-opt= [] 指定一些安全参数,包括权限、安全能力、apparmor等
–stop-signal=SIGTERM 指定停止容器的系统信号
– shm-size="" /dev/shm的大小
–sig-proxy=true false 是否代理收到的信号给应用,默认为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 从容器外部复制内容到镜像,只能是宿主机本地文件

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

小讯
上一篇 2025-03-14 09:11
下一篇 2025-01-27 09:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35436.html