• docker入门(三)操作Docker容器


    1.1.创建容器

    主要介绍容器的create、start、run、wait和logs子命令

    1.1.1新建容器

    创建容器
    docker create -it ubuntu:latest
    查看容器
    docker ps -a
    

      create参数说名:

              -i:标准输入

              -t:分配一个伪终端

    1.2.1.启动容器

    假设一个容器的ID为af8f4f922daf,启动该容器

    docker start af
    

      或者把id写全

    1.3.1新建并启动容器

    docker run ubuntu /bin/echo 'hello world'
    

      hello world

    当利用docker run来创建并启动容器时,docker在后台运行的标准操作包括:

    • 检查本地是否存在指定镜像,不存在就从共有仓库下载
    • 利用镜像分配一个容器,并启动该容器
    • 分配一个文件系统给容器,并在只读的镜像外层挂载一层可读写层
    • 从速主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从网桥的地址池配置一个ip地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被自动终止

    对于容器来说,当应用退出后,容器的使命也就完成,也就没有继续运行的必要了。

    可以使用docker container wait CONTAINER [CONTAINER...]子命令来等待容器退出,并打赢退出返回的结果。

    某些时候,执行docker run时候因为命令无法正常执行容器会出错直接退出,此时可以查看退出的错误代码。

    默认情况下,常见错误代码包括

    • 125:docker daemon 执行出错,例如指定不了不支持的docker命令参数
    • 126:所指定命令无法执行,例如全选出错
    • 127:容器命令无法找到

    1.4.1.守护状态运行

     更多的时候,需要让容器在后台以守护状态(Daemonized)形式运行。此时,可以通过添加-d参数来实现

    docker run -d ubuntu /bin/sh -c "while true ;do echo hello world;sleep 1;done"
    

    1.5.1.查看容器输出

    docker logs命令

    支持选项包括:

    -details:打印详细信息

    -f , -follow:持续保持输出

    -since string:输出从某个时间开始的日志

    -tail string:输出最近的若干日志

    -t , -timestamps:显示时间戳信息

    -until string:输出某个时间之前的日志

    docker logs ce554267d7a4

    2.1.停止容器

    介绍容器的pause/unpause、stop和prune子命令

    2.1.1.暂停容器

    docker pause

    栗子:启动一个容器并暂停

    docker run --name test --rm -it ubuntu bash
    docker pause test
    docker ps
    ####--rm:容器退出后是否自动删除

    2.1.2恢复暂停容器

    docker unpause test
    

    2.2.1.终止容器

    docker stop

    docker stop ce5
    ###停止ce5 简写ID的容器

    此时执行docker container prune命令,会自动清楚所有处于停止状态的容器。

    此外,还可以通过docker kill ID直接发送sigkill信号来强制终止容器

    ####查看所有容器ID
    docker ps -qa
    ####处于终止的容器,用start来启动它
    docker start ce554267d7a4
    ####或者restart先停后启
    docker restart ce554267d7a4
    

    3.1.进入容器

    3.1.1.attach命令

    attach是docker自带的命令,格式为:

    docker [container] attach [--detach-keys[=[ ] ] ] [--no-stdin] [--sig-proxy[=true]] CONTAINER

    主要选项

    --detach-keys[=[ ] ]:指定退出attach模式的快捷键,默认是ctrl-p ctrl-q

    --no-stdin=true|false:是否关闭标准输入

    --sig-proxy=true|false:是否代理收到的系统信号给应用进程

    然而使用attach有时很不方便,当多个窗口同时attach到同一个容器,所有窗口都会同步显示,当某个窗口阻塞式,其他窗口也无法执行操作

    3.2.1.exec命令

    基本格式:

    docker [container] exec [-d|--detach] [--detach-keys[= [ ] ] ] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER] ] CONTAINER CPMMAND [ARG...]

    比较重要的参数有:

    -d , --detach:在容器中后台执行命令

    --detach-keys=" ":指定将容器切回后台的按键

    -e , --env=[ ]:指定环境变量列表

    -i , --interactive=true|false:打开标准输入接受用户输入的命令

    --privileged=true|false:是否给执行最高权限

    -t , --tty=true|false:分配伪终端

    -u , --user=" ":执行命令的用户名或ID

    docker exec -it 243c32535da7 /bin/bash
    

      这种方式在不影响容器内其他应用的情况下,用户可以与容器进行交互。

    4.1.删除容器

    docker rm来删除容器

    主要参数:

    -f , --force=false:强制终止并删除一个运行中的容器

    -l , --link=false:删除容器的连接,保留容器

    -v , --volumes=false:删除容器挂载的数据卷

    docker rm ce554264d7a4
    

    5.1.导入导出容器

    有时候我们需要对容器从一个系统迁移到另一个系统,这时候可以使用容器的导入导出功能

    5.1.1.导出容器

    ####导出id为ce5缩写的容器到test_for_run.tar文件
    docker export -o test_for_run.tar ce5
    

    5.2.1.导入入容器

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

    用户可以通过-c , --change= [ ] 选项在导入的时候同时执行对容器修改的Dockerfile指令

    docker import test_for_run.tar - test/ubuntu:v1.0
    

      在之前使用过docker load导入镜像,这跟docker import十分类似。实际上,既可以使用load来导入镜像存储文件到本地镜像库,也可以import导入容器快照到本地镜像库。区别在于:容器快照文件将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件则保存完整记录,体积更大。此外,从容器快照导入时可以重新指定标签等元数据信息。

    6.1.查看容器

    这里主要介绍inspect、top、stats子命令

    6.1.1.查看容器详情

    docker inspect CONTAINER

    查到的具体信息会以json的格式返回包括容器ID,创建时间,路径,状态,镜像,配置等各项信息

    6.2.1.查看容器内进程

    docker top CONTAINER

    这个类似于inux的top命令

    6.3.1.查看统计信息

    docker stats CONTAINER

    会显示cpu,内存,存储,网络等使用情况的统计信息

    支持选项包括:

    -a , -all:输出所有容器统计信息,默认仅在运行中

    -format string:格式化输出信息

    -no-stream:不持续输出,默认会自动持续更新实时结果

    -no-trunc:不截断输出信息

    7.1.其他容器命令

    这里主要介绍cp、diff、port和update子命令

    7.1.1.复制文件

    ####将date目录复制到test容器的tmp目录下
    docker [container] cp data test:/tmp/
    

      主要参数:

                -a , -archive:打包模式,复制文件会带有原始的uid/gid信息

                -L , -follow-link:跟随软连接。当路径为软连接时,使用该选项恢复至链接的目标内容

    7.2.1.查看变更

    ####查看test容器内的数据修改
    docker container diff test
    

    7.3.1.查看端口映射

    docker container port test
    9000/tcp -> 0.0.0.0:9000
    

    7.4.1.更新配置

    container update命令可以更新容器的一些运行时配置,主要是一些资源限制份额

    格式:

    docker [container] update [OPTIONS] CONTAINER [CONTAINER...]

    支持选项包括(主要参数):

    -c , -cpu-shares int:限制cpu个数

    -m , -memory bytes:限制使用的内存

    -restart string:容器退出后重启策略

    #####限制总配额为1秒,test所占用时间为10%
    docker update --cpu-quota 1000000 test
    docker update --cpu-period 100000 test
    

     8.1.本章小结

    容器是docker提供应用服务的组件,也是整个技术中最为核心的概念。docker提供了十分丰富的操作命令,允许我们用户搞笑的管理容器的整个生命周期。对于docker容器的操作,可以使用docker container help查看更多的容器操作的子命令。

    在生产环境中,为了提高容器的高可用性和安全性,一方面可以合理的使用资源限制参数来管理容器的资源消耗;另一方面也可以指定合适的容器重启策略,来自动重启退出的容器。此外,还可以用HAProxy等辅助工具来处理负载均衡,自动雀环故障的应用容器。

  • 相关阅读:
    笨办法学Python——学习笔记4
    意识、语言、文字和程序感想
    笨办法学Python——学习笔记3
    把vim作为shell ide
    HDUYuna's confusion 树状数组 Or Multiset
    POJ3252 Round Numbers 组合数学
    HDU3874 Necklace 树状数组+离线处理
    UVA10212 The Last Nonzero Digit. 分解质因子+容斥定理
    HDU1041 Computer Transformation 大数
    HDUFish买电脑 二分查找
  • 原文地址:https://www.cnblogs.com/xysr-tom/p/12491556.html
Copyright © 2020-2023  润新知