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 |
从容器外部复制内容到镜像,只能是宿主机本地文件。 |
|
如有问题,请回复区指正。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/35436.html