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等辅助工具来处理负载均衡,自动雀环故障的应用容器。