分享

Docker容器

 印度阿三17 2018-12-16

容器是镜像的一个运行实例。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

1  创建容器

create、start、run、wait和logs子命令

1.1  新建容器

docker [container] create命令新建的容器处于停止状态,可以使用docker [container] start命令启动

例:docker create –it ubuntu:latest    #ubuntu:latest为镜像

cretae命令的选项主要包括:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关

1)  与容器运行模式相关

-a,--attach=[]  是否绑定到标准输入、输出和错误

-d,--detach=true|false 是否在后台运行容器。默认为否

--group-add=[] 运行容器的用户组

-i,--interactive=true|false 保持标准输入打开,默认为false

-t,--tty=true|false 是否分配一个伪终端,默认为false

2)  与容器环境配置相关

--add-host=[] 在容器内添加一个主机名到IP地址的映射关系(通过/etc/hosts文件)

--device=[] 映射物理机上的设备到容器内

-e,--env=[] 指定容器内环境变量

--ip=”” 指定容器的IPv4地址

--link=[<name or id>:alias] 链接到其他容器

--link-locak-ip=[]:  容器的本地链接地址表

--name=””  指定容器的别名

3)  与容器资源限制和安全保护相关

--blkio-weight=10~1000  容器读写块设备的I/O性能权重,默认为0

--device-read-iops=[] 挂载设备的读速率(以每秒i/o次数为单位)限制

--device-write-opps=[]挂载设备的写速率(以每秒i/o次数为单位)限制

--kernel-memory=”” 限制容器使用内核的内存大小,单位可以是b、k、m或g

-m,--memory=”” 限制容器内应用使用的内存,单位可以是b、k、m或g

1.2  启动容器

docker [container] start命令来启动一个已经创建的容器

docker start pedantic_rubin

1.3  新建并启动容器

1)docker [container] run,等价于先执行doker create,在执行docker start命令

docker run ubuntu /bin/echo "hello world"

2)docker [container] run创建并启动容器时,Docker在后台运行的标准操作包括:

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

3)下面命令启动一个bash终端

docker run -it ubuntu:latest /bin/bash

-t 让Docker分配一个伪终端并绑定到容器的标准输入上

-i 让容器的标准输入保持打开

4)  执行docker run时因为命令无法正常执行容器会出错直接退出,常见错误代码:

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

1.4  守护态运行

-d参数来实现

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

1.5  查看容器输出信息

docker [container] logs

选项:

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

例:查看某个容器的输出

2   停止容器

2.1  暂停容器

docker [container] pause CONTAINER [CONTAINER…]

例:docker pause 28f646b7ba0a

处于pause状态的容器,可以使用docker [container] unpause CONTAINER [CONTAINER…]命令来恢复到运行状态

例:docker unpause 28f646b7ba0a

2.2  终止容器

docker [container] stop命令首先向容器发送SIGTERM信号,等待一段超时时间后(默认为10秒),再发送SIGKILL信号来终止容器

例:docker stop 28f646b7ba0a

 

docker container prune 自动清除所有处于停止状态的容器

docker [container] start 启动

docker [container] restart 停止后启动

3   进入容器

使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作

3.1  attach命令

命令格式:

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

选项

  •   --detach-key[=[]] 指定退出attach模式的快捷键序列,默认是CTRL-p、ctrl-q;
  •   --no-stdin=true|false 是否关闭标准输入,默认是保持打开
  •   --sig-proxy= true|false 是否代理收到的系统信号给应用进程,默认为true

例:docker attach unruffled_euclid

但多个窗口同时使用attach到同一个容器的时候,所有窗口都会同步显示,但默认窗口因命令阻塞时,其他窗口也无法执行操作了

3.2  exec命令

对容器执行操作最为推荐的方式

命令格式:

docker [container] exec [选项] CONTAINER COMMAND [ARG…]

选项:

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

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

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

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

--privileged=true|false:是否给执行命令以高权限,默认为false

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

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

例:docker exec -it 50c9d318fc51 /bin/bash

  

4  删除容器

docker [container] rm [选项] CONTAINER [CONTAINER…]

删除处于终止或退出状态的容器

选项:

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

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

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

例:docker rm 50c9d318fc51

5   导入和导出容器

5.1  导出容器

导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态

命令:docker [container] export [-o|--output[=””]] CONTAINER

-o指定导出的tar文件名,也可以直接通过重定向来实现

例:docker export -o ubuntu_run.tar b7a8d50eca7b

docker export b7a8d50eca7b > ubuntu_test.tar

5.2  导入容器

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

导入变成镜像

选项:

-c,--change=[]:在导入的同时执行对容器进行修改的Dockerfile指令

例:docker import ubuntu_run.tar run/ubuntu:v1.0

docker load命令导入镜像存储文件到本地镜像库

docker import命令导入一个容器快照到本地镜像库

区别:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新制定标签等元数据信息

6   查看容器

inspect、top、stats

6.1  查看容器详情

docker container inspect [OPTIONS] CONTAINER [CONTAINER…]

例:docker container inspect b7a8d50eca7b

6.2  查看容器内进程

docker [container] top [OPTIONS] CONTAINER [CONTAINER…]

例:docker top  b7a8d50eca7b

6.3  查看统计信息

docker [container] stats [OPTIONS] [CONTAINER…]

显示CPU、内存、存储、网络等使用情况的统计信息

选项:

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

-format string:格式化输出信息

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

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

例:docker stats b7a8d50eca7b

7   其他容器命令

cp、diff、port、update

7.1  复制文件

docker [container] cp [OPTINOS] CONTAINER:SRC_PATH_ DEST_PATH|-

支持在容器和主机之间复制文件

选项:

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

-L,-follw-link:跟随软链接。当原路径为软链接时,默认只复制链接信息,使用该选项会复制链接的目标内容

例:将本地的test1.txt文件复制到ID为b7a8d50eca7b容器的/tmp目录

docker cp test1.txt b7a8d50eca7b:/tmp

7.2  查看变更

docker [container] diff CONTAINER

查看容器内文件系统的变更

例:docker container diff b7a8d50eca7b

7.3  查看端口映射

docker container port CONTAINER [PRIVATE_PORT[/PROTO]]

例:docker container port b7a8d50eca7b

7.4  更新配置

docker [container] update [OPTINOS] CONTAINER [CONTAINER…]

更新容器运行时配置,主要是一些资源限制份额

选项:

-cpus decimal:限制CPU个数

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

--cpu-quota int:限制CPU调度器CFS(Completely Fair Scheduler)配额,单位为微秒,最小1000

-cpu-period int:限制CPU调度器CFS使用时间,单位为微秒,最小1000

例:docker update --cpu-quota 1000000 b7a8d50eca7b

 

来源:http://www./content-4-92901.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多