设为首页 收藏本站
查看: 1234|回复: 0

[经验分享] 容器技术Docker 容器操作大总结

[复制链接]

尚未签到

发表于 2018-5-27 06:09:53 | 显示全部楼层 |阅读模式
  Docker实战之容器操作:
  新建容器:
  docker create创建的容器处于停止状态,可以使用docker start命令启动Docker容器。
  使用docker run命令,可以创建一个运行中的容器。
  create命令与容器运行模式相关的选项:
  -a,--attach=[]                                      是否绑定到标准输出、输入和错误
  -a,--detach=true|false                              是否在后台运行容器,默认是否
  --detach-keys=""                                    从attach模式退出的快捷键
  --entrypoint=""                                     镜像存在入口指令时,覆盖为新的命令
  --pxpose=[]                                         指定容器会暴露出来的端口或端口范围
  --group-add=[]                                      运行容器的用户组
  -i,--interactive=true|false                         保持标准输入打开,默认为false
  --ipc=""                                            容器IPC命名空间,可以为其他容器或主机
  --isolation="default"                               容器使用的隔离机制
  --log-driver="json-file"                            指定容器的日志驱动类型,取值范围是:json-file/syslog/journald/gelf/fluentd/awslogs/splunk/etwlogs/gcplogs/none
  --log-opt=[]                                        传递给日志驱动的选项
  --net="bridge"                                      指定容器的网络模式,包括bridge/none/其他容器内网络/host的网络或某个现有的网络
  --net-alias=[]                                      容器在网络中的别名
  -P,--publish-all=true|false                         通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口
  -p,--public=[]                                      指定如何映射到本地主机端口
  --pid=host                                          容器的PID命名空间
  --userns=""                                         启用userns-remap时配置用户命名空间的模式
  --uts=host                                          容器的UTS命名空间
  --restart="no"                                      容器的重启策略,取值no/no-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=""                                  挂载文件卷的驱动类型
  --volume-from=[]                                    从其他容器挂在卷
  -w,--workdir=""                                     容器内的默认工作目录
  create命令与容器环境和配置相关的选项:
  --add-host=[]                                       在容器内添加一个主机名到IP地址的映射关系
  --device=[]                                         映射物理机上的设备到容器
  --dns-search=[]                                     DNS搜索域
  --dns-opt=[]                                        自定义的DNS选项
  --dns=[]                                            自定义的DNS服务器
  -e,--env=[]                                         指定容器内环境变量
  --env-file=[]                                       从文件中读取环境变量到容器中
  -h,--hostname=""                                    指定容器内的主机名
  --ip=""                                             指定容器的IPV4地址
  --ipv6=""                                           指定容器的IPV6地址
  --link=[<name or id>:alias]                         连接到其他容器
  --mac-address=&quot;&quot;                                    指定容器的MAC地址
  --name=&quot;&quot;                                           指定容器的别名
  create命令与容器资源限制和安全保护相关的选项:
  --blkio-weight=10~1000                              容器读写块设备的I/O性能权重,默认是0
  --blkio-weight-device=[DEVICE_NAME_WEIGHT]          指定各个块设备的I/O性能权重
  --cpu-shares=0                                      允许容器使用CPU资源的相对权重,默认一个容器能用满一个核心的CPU
  --cap-add=[]                                        增加容器的Linux指定安全能力
  --cap-drop=[]                                       移除容器的Linux指定安全性能
  --cgroup-parnet=&quot;&quot;                                  指定容器CGroups限制的创建路径
  --cidfile=&quot;&quot;                                        指定容器的进程ID号写到文件
  --cpu-period=0                                      限制容器在CFS调度器下的CPU占用时间片
  --cpuset-cpus=&quot;&quot;                                    限制容器能使用哪些CPU核心
  --cpuset-mems=&quot;&quot;                                    NUMA架构下使用哪些核心的内存
  --cpu-quota=0                                       限制容器在CFS调度器下的CPU额配
  --device-read-bps=[]                                挂载设备的读吞吐率(以bps为单位)限制
  --device-write-bps=[]                               挂载设备的写吞吐率(以bps为单位)限制
  --device-read-iops=[]                               挂载设备的读速率(以每秒I/O次数为单位)限制
  --device-write-iops=[]                              挂载设备的写速率(以每秒I/O次数为单位)限制
  --kernel-memory=&quot;&quot;                                  限制容器内使用内核的内存大小,单位可以是b/k/m/g
  -m,--memory=&quot;&quot;                                      限制容器内应用使用的内存,单位可以是b/k/m/g
  --memory-reservation=&quot;&quot;                             当系统中内存过低的时候,容器会被限制内存到给定的值,默认情况下等于内存限制值
  --memory-swap=&quot;LIMIT&quot;                               限制容器使用内存和交换分区的总大小
  --oom-kill-disable=true|false                       内存耗尽的时候是否杀死容器
  --oom-score-adj=&quot;&quot;                                  调整容器的内存耗尽参数
  --pids-limit=&quot;&quot;                                     限制容器的PID个数
  --privileged=true|false                             是否给容器以高权限,这个意味着容器内应用将不受权限下限制,一般不推荐使用
  --read-only=true|false                              是否让容器内的文件系统只读
  --security-opt=[]                                   指定一些安全参数,包括权限、安全能力、apparmor
  --stop-signal-SIGTERM                               指定停止容器的系统信号
  --shm-size=&quot;&quot;                                       /dev/shm的大小
  --sig-proxy=true|false                              是否代理收到的信号给应用,默认是true,不能代理SIGCHLD
  --memory-swappiness=&quot;0~100&quot;                         调整容器内存交换区参数
  -u,--user=&quot;&quot;                                        指定在容器内执行命令的用户信息
  --ulimit=[]                                         通过ulimit来限制最大文件数,最大进程数
  其他常用参数:
  -l,--label=[]                                       以键值对的方式指定容器的标签信息
  --label-file=[]                                     从文件中读取标签信息
  docker run来启动容器的时候Docker在后台运行的标准操作包括:
  1。检查本地是否存在指定的镜像,不存在就从公有仓库下载。
  2.利用镜像创建一个容器,并启动该容器。
  3.分配一个文件系统给容器,并在只读的镜像层外边挂载一层可读写层。
  4.从宿主机配置的网桥接口中桥接一个虚拟接口到容器中。
  5.从网桥的地址池配置一个IP地址给容器
  6.执行用户指定的应用程序
  对于创建的容器,当使用exit命令退出之后,容器就会自动处于退出状态。
  默认情况下,常见的错误代码:
  125:Docker daemon执行出错,指定了不支持的Docker命令参数
  126:所指定命令无法运行,例如权限不足
  127:容器内命令无法找到
  命令执行出错,会默认返回错误码。
  Docker守护态运行:通过-d参数来实现。
  终止容器:
  docker stop [-t|--time[=10]] [CONTAINER...]
  首先向容器发送SIGTERM信号,等待一段时间(默认10秒)后,在发送SIGKILL信号终止容器。
  docker kill命令会直接发送SIGKILL信号来强行终止容器。
  进入Docker容器:
  docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
  支持子选项的作用:
  --detach-keys[=[]]:退出attach模式的快捷键序列,默认是CTRL+P,CTRL+Q或CTRL+P+Q
  --no-stdin=true|false:是否关闭标准输入,默认是保持打开的
  --sig-proxy=true|false:是否代理收到的系统信号给应用程序,默认为true
  40d5d3816472175538f48f506eb7aa74019ef643c50a1351cc830f96a1a66217
  root@doc-vm:~# docker ps
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  40d5d3816472        centos              &quot;/bin/bash&quot;         6 seconds ago       Up 4 seconds                            vigilant_noether
  root@doc-vm:~# docker attach vigilant_noether
  [root@40d5d3816472 /]# ls
  anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  当多个窗口同时用attach命令连接同一个容器的时候,所有窗口都会同步显示。当某个窗口因为命令阻塞时,其他窗口也是无法执行操作的。
  docker exec [-d|detach] [--detach-keys[=[]]] [-i|interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
  支持子选项的作用:
  -i,--interactive=true|false:打开标准输入接受用户输入的命令,默认是false
  --privileged=true|false:是否执行命令以高权限,默认是false
  -t,--tty=true|false:分配伪终端,默认是false
  -u,--user=&quot;&quot;:执行命令的用户名或ID
  nsenter工具:
  root@doc-vm:~# apt-get install util-linux
  nsenter --target $PID --mount --uts --ipc --net --pid
  删除容器:
  docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
  -f,--force=false:是否强行终止并删除一个运行中的容器
  -l,--link=false:删除容器的连接,但是保留容器
  -v,--volumes=false:删除容器挂载的数据卷
  当添加-f参数的时候,Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。
  导出容器:
  导出容器指的是导出一个已经创建的文件,不管此时这个容器是否处于运行状态,可以使用docker export命令:
  docker export [-o|--output[=&quot;&quot;]] CONTAINER
  -o选项指定tar包的文件名或者使用>重定向。
  root@doc-vm:~# docker ps
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  40d5d3816472        centos              &quot;/bin/bash&quot;         27 minutes ago      Up 4 seconds                            vigilant_noether
  root@doc-vm:~# docker export >MyCentOS:6.0.tar 40d5d3816472
  root@doc-vm:~# ll
  drwxr-xr-x 16 doc  doc       4096 11月 29 22:00 ./
  drwxr-xr-x  3 root root      4096 11月 27 21:52 ../
  -rw-r--r--  1 root root 204790272 11月 29 22:00 MyCentOS:6.0.tar
  导入容器:
  docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|url - [REGISTRY[:TAG]]
  可以通过-c选项在导入的同时对容器执行Dockerfile指令。
  实际上,既可以使用docker load命令来导入镜像库存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。
  两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。此外从容器快照文件导入时,也可以重新指定标签等元数据。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481513-1-1.html 上篇帖子: Docker 镜像的推送(六) 下篇帖子: docker import与docker load的区别是什么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表