• Docker专题(二)之 操作Docker容器


    一、创建容器

    1.1 新建容器

    使用dockers [container] create创建一个容器
    在这里插入图片描述
    新建的容器处于停止状态的时候可以使用docker [container] start命令来启动它。
    由于容器是整个Docker技术栈的核心,create命令和后续的run命令支持的选项都十分复杂。选项主要包括以下几个大类:与容器运行模式相关与容器环境配置相关与容器资源限制和安全保护相关

    1. create命令与容器运行模式相关的选项
    选项说明
    -a, --attach=[]是否绑定到标准输入、输出和错误
    -d, --detach=true|false是否在后台运行容器,默认为false
    -detach-keys=“”从attach模式推出的快捷键
    --entrypoint=“”镜像存在入口命令时,覆盖为新的命令
    --expose=[]指定镜像会暴露出来的端口或端口范围
    --group-add=[]运行容器的用户组
    -i, --interactive=true|false保持标准输入打开,默认为false
    --ipc=“”容器IPC命名空间,可以为其他容器或主机
    --isolation=“default”容器使用的隔离机制
    --log-drive=“json-file”指定容器的日志驱动类型,可以为json-file、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs或none
    --log-opt=[]传递给日志驱动的选项
    --net=“bridge”指定容器网络模式,包括bridge、none、其他容器内网络、host的网络或某个现有的网络等
    --net-alias=[]容器在网络中的别名
    -P, --published-all=true|false通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口
    -p, -publish=[]指定如何映射到本地主机端口,例如:-p 11234 - 12234:1234-2234
    --pid=host容器的UTS命名空间
    --restart=“no”容器的重启策略,包括no、on-failure[:max-retry]、always、unless-stopped等
    --rm=true|false容器推出后是否自动删除,不能跟-d同时使用
    -t, --tty=true|false是否分配一个伪终端,默认为false
    –tmpfs=[]挂载临时文件系统到容器
    -v, --volume[=[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]挂载主机上的文件卷到容器内
    --volume-driver=“”挂载文件卷的驱动类型
    --volumes-from=[]从其他容器挂载卷
    -w, --workdir=“”容器内的默认工作目录
    1. create命令与容器环境和配置相关的选项
    选项说明
    --add-host=[]在容器内添加一个主机名到IP地址的映射关系(通过/etc/hosts文件)
    --device=[]映射物理机上的设备到容器内
    --dns-research=[]DNS搜索域
    --dns-opt=[]自定义的dns选项
    -e, --env=[]指定容器内环境变量
    --env-file=[]从文件中读取环境变量到容器内
    -h, --hostname=“”指定容器内的主机名
    --ip=“”指定容器内的IPv4地址
    --ip6=“”指定容器内的IPv6地址
    --link=[:alias]链接到其他容器
    --link-local-ip=[]:容器本地链接地址列表
    --mac-address=“”指定容器的Mac地址
    --name=“”指定容器的别名
    1. create命令与容器资源限制和安全保护相关的选项
    选项说明
    --blkio-weight=10~1000容器读写块设备的I/O性能权重,默认为10
    --blkio-weight-device=[DEVICE_NAME:WEIGHT]指定各个块设备的I/O性能权重
    --cpu-shares=0允许容器使用CPU资源的相对权重,默认一个容器能用满一个核的CPU
    --cap-add=[]增加容器Linux指定安全能力
    --cap-drop=[]移除容器的Linux指定安全能力
    --cgroup-parent=“”容器cgroups限制的创建路径
    --cidfile=“”指定容器的进程ID号写到文件
    --cpu-period=0限制容器在CFS调度器下的CPU占用时间片
    --cpuset-cpus=“”限制容器能使用哪些CPU核心
    --cpuset-mems=“”NUMA架构下使用哪些核心的内存
    --cpu-quota=0限制容器在CFS调度器下的CPU配额
    --device-read-bps=[]挂载设备的读吞吐率(以bps为单位)限制
    --device-write-bps=[]挂载设备的写吞吐率(以bps为单位)限制
    --device-read-iops=[]挂载设备的读速率(以每秒i/o次数为单位)限制
    --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
    --no-healthcheck=true|false是否禁用健康检查
    --init在容器中执行一个init进程,来负责响应信号和处理僵尸状态子进程
    --kernal-memory=“”限制容器使用内核的内存大小,单位可以是k、b、m或g
    -m, --memory=“”限制容器内应用使用的容器内存,单位可以是k、b、m或g
    --memory-reservation=“”当系统中内存过低时,容器会被强制限制内存到给定值,默认情况下等于内存限制值
    --memory-swap=“LIMIT”限制容器内使用内存和交换区的总大小
    --oom-kill-disable=true|false内存耗尽时是否杀死容器
    --oom-score-adj=“”调整容器内存耗尽参数
    --pids-limit=“”限制容器的pid个数
    --priviledged=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=“”指定在容器内执行命令的用户信息
    --userns=“”指定用户命名空间
    --ulimit=[]通过ulimit来限制最大文件数、最大进程数等

    其他选项还包括:
    -l, --lable=[]:以键值对的方式指定容器的标签信息
    –lable-file=[]:从文件中读取标签信息

    1.2 启动容器

    使用docker [container] start来启动一个已经创建的容器
    在这里插入图片描述

    1.3 新建并启动容器

    使用docker [container] run等价于先执行create命令再执行start命令
    这个测试在上面那个图中自己看啦~~~~~~~~~~

    Dockers在后台运行的标准操作包括:

    1. 检查本地是否存在指定的镜像,如果不存在,那么从公有仓库下载
    2. 利用镜像创建一个容器,并启动该容器
    3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
    4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    5. 从网桥的地址池配置一个IP地址给容器
    6. 执行用户指定的应用程序
    7. 执行完毕后容器被自动终止

    对于所创建的bash容器,在执行exit命令退出进程后容器也就退出了。
    可以使用docker container wait CONTAINER[CONTAINER...]子命令来等待容器退出,并打印退出返回结果。

    某些时候,执行docker [container] run时因为命令无法正常执行,可能会出现错误而直接推出,常见的错误代码:

    • 125:Docker deamon执行出错,例如指定了不支持的Docker命令参数
    • 126:所指定命令无法执行,例如权限出错
    • 127:容器内命令无法找到
    1.4 守护态运行

    很多时候需要让Docker容器在后台以守护态(Deamonized)形式运行,通过-d参数来实现。
    在这里插入图片描述

    1.5 查看容器输出

    获取容器的输出信息,可以通过docker [container] logs命令

    支持的选项包括:

    • -details:打印详细信息
    • -f, -follow:持续保持输出
    • -since string: 输出从某个时间开始的日志
    • -tail string:输出最近的若干日志
    • -t,-timestamps:显示时间戳信息
    • -until string:输出某个日志之前的信息
      在这里插入图片描述

    二、停止容器

    2.1 暂停容器

    可以使用docker [container] pause CONTAINER[CONTAINER...]暂停一个在运行中的容器
    在这里插入图片描述

    2.2 终止容器

    可以使用docker [container] stop停止一个在运行中的容器
    语法为

    docker [container] stop [[-t] --time[=10]] [CONTAINER...]
    
    • 1

    执行docker container prune会自动清除掉所有处于停止状态的容器。
    还可以通过docker [container] kill直接发送SIGKILL信号来强行终止容器。

    处于终止状态的容器,可以通过docker [container] start命令来重新启动
    docker [container] restart会将一个运行态的容器先终止,然后再重新启动

    三、进入容器

    3.1 attach命令
    docker [container] attach [--detach-keys[=]] [no-stdin] [--sig-proxy[=true]] CONTAINER
    
    • 1
    3.2 exec命令
    docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--priviledged] [-t|--tty] [-u|--user=[USER]] CONTAINER COMMAND [ARG...]
    
    • 1

    在这里插入图片描述

    四、删除容器

    可以使用docker [container] rm命令来删除处于终止或退出状态的容器,命令格式为

    docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER[CONTAINER...]
    
    • 1

    在这里插入图片描述
    注意:docker rm命令只能删除已经处于终止或者退出状态的容器,并不能删除处于运行态的容器,如果要删除处于运行态的容器,可以添加-f参数强制删除或者先stop停止后再删除。

    五、导入和导出容器

    5.1 导出容器

    导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker [container] export命令,该命令的格式为:

    docker [container] export [-o|--output[=""]] CONTAINER
    
    • 1

    -o可以用来指定导出的tar文件名,也可以直接通过重定向来实现。
    在这里插入图片描述

    5.2 导入容器

    导出的容器可以通过docker [container] import命令导入变成镜像,命令的格式为

    docker import [-c|--change[=[]]] [-m|-message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]
    
    • 1

    在这里插入图片描述

    六、查看容器

    6.1 查看容器详情

    查看容器详情可以使用docker container inspect [OPTIONS] CONTAINER[CONTAINER...]子命令
    在这里插入图片描述
    包含的信息比较多,这里只截取部分图,以json格式返回

    6.2 查看容器内进程

    查看容器内进程可以使用docker [container] top [OPTIONS] CONTAINER[CONTAINER...] 子命令
    在这里插入图片描述

    6.3 查看统计信息

    查看统计信息可以使用docker [container] states [OPTIONS] [CONTAINER...]子命令,会显示CPU、内存、存储、网络等使用情况的统计信息。

    支持的选项包括:

    • -a, -all:输出全所有容器统计信息,默认仅在运行中;
    • -format string:格式化输出信息;
    • -no-stream:不持续输出,默认会自动更新持续实时结果;
    • -no-trunc:不断输出信息。
      在这里插入图片描述

    七、其他容器命令

    7.1 复制文件

    container cp支持在容器和主机之间复制文件。命令格式为docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -

    支持的选项包括:

    • -a, -archive:打包模式,复制文件会带有原始的uid/gid信息;
    • -L, --follow-link:跟随软连接。当原始路径为软连接时,默认只复制链接信息,使用该选项会复制链接的目标内容。
      在这里插入图片描述
    7.2 查看变更

    container diff查看容器内文件系统的变更。命令格式为docker [container] diff CONTAINER
    在这里插入图片描述

    7.3 查看端口映射

    container port命令可以查看容器的端口映射情况。命令格式为docker [container] port CONTAINER [PRIVATE_PORT[/PROTO]]
    在这里插入图片描述

    7.4 更新配置

    container update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。命令的格式为docker [container] update [OPTIONS] CONTAINER[CONTAINER...]
    支持的选项包括:
    -blkio-weight uint16:更新块IO限制,10~1000,默认值为0,代表着无限制;
    -cpu-period int:限制CPU的调度器CFS (Completely Fair Schedular) 使用时间,单位为微秒,最小1000;
    -cpu-quota int:限制CPU调度器的CFS配额,单位为微秒,最小1000;
    -cpu-rt-period int:限制CPU调度器的实时周期,单位为微秒;
    -cpu-rt-runtime int:限制CPU调度器的运行时,单位为微秒;
    -c, -cpu-shares int:限制CPU的使用份额;
    -cpus decimal:限制CPU个数;
    -cpuset-cpus string:允许使用的CPU核,如0-3, 0,1;
    -cpuset-mems string:允许使用的内存块,如0-3, 0,1;
    -kernal memory bytes:限制使用的内存内核;
    -m, -memory bytes:限制使用的内存内核;
    -memory-reservation bytes:内存软限制;
    -memory-swap bytes:内存加上缓存区的限制,-1表示对缓冲区无限制;
    -restart string:容器退出后的重启策略。

  • 相关阅读:
    基于微服务SDK框架与JavaAgent技术,低成本助力应用高效发布
    k8s-9 ingress-nginx 特性
    蓝牙核心规范(V5.4)11.3-LE Audio 笔记之缩写词
    5、Kafka海量日志收集系统架构设计
    Yapi浏览器插件
    2024 年如何复用 ChatGPT 从头开始​​快速学习 Python
    Hi Generator
    selenium_定位输入框并输入值_id
    Cloudflare CDN(泛播)支持转发的网络端口
    JWT的创建
  • 原文地址:https://blog.csdn.net/Annie_0321/article/details/127564960