Docker容器操-容器创建、启动、导入、导出等操作
-
- 重新进入容器
- 6.1. docker attach 命令
- 6.2. docker exec命令
- 重新进入容器
-
- 其他容器命令
- 12.1. 容器中文件与宿主机相互交换 docker cp
- 12.2. 查看容器变更 docker diff
- 其他容器命令
Docker 容器创建与运行
容器的创建,启动,终止,及进入容器执行操作、删除容器等操作
1. 新建docker容器 – docker [container] create
create出来的容器时停止状态,并不是在执行中的容器。可以使用 docker [container] start 命令来启动它。
create 命令和run命令选项都十分复杂,需要慢慢熟悉。这些选项主要分级一下几大类:
- 与容器运行模式相关
- 与容器环境配置相关
- 与容器资源限制相关
- 安全保护
举例:
docker create -it centos:7 # 会返回id的编码,创建了一个交互式的容器 t 伪终端 i 持续打开标准输入
docker ps -a #可以看到创建的容器
# 如何启动这个容器?
docker start 容器编码
docker ps #可以查看启动的容器
# docker run 的完整命令
docker run -it centos:7 [/bin/bash]
docker run 相当于 docker create + docker start + 进入容器的命令。
–rm 容器退出后,自动删除容器
2. docker [container] run 的执行细节
1. 检查本地是否存在指定的镜像, 如果不存在,则从公共仓库下载
2. 使用惊险创建一个容器,开启该容器
3. 分配一个文件系统给容器,并在制度的镜像层外面挂载一层可读写层
4. 从宿主主机配置的网桥接口桥接一个虚拟接口到容器中
5. 从网桥地址池中配置一个ip地址给容器
6. 执行用户指定的应用
7. 执行完毕后容器被自动终止
Docker容器里的应用关闭后,容器也会跟着一块退出。
进入centos容器伪终端后:
- exit 退出终端,centos容器也会随着退出。
- ctrl + p + q: 不停止容器实力的运行,退出伪终端。
给容器起个名字
docker run -it --name "mycentos7" centos:7
守护进程启动形式:
-d 来实现
docker run -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"
3. 查看容器的输出信息 docker [container] logs
docker [container] logs常用选项包括:
-t, –timestamps: 显示时间错
-f, –follow: 持续保持输出
–tail string: 输出最近的若干日志
docker logs -t -f --tail 3 container_id
4. 停止容器
4.1. 暂时停止 docker pause|unpause
docker [container] pause container_id|container_name [other_container_id|other_container_name]
处于pause状态下的容器,可以通过:
docker [container] unpause container_id|container_name [container_id_other|container_name_other]
恢复容器运行状态
4.2. 终止容器 docker stop|kill
- docker stop
docker [container] stop container_id|container_name
两个步骤:
1) 首先向容器发送一个 SIGTERM信号
2) 等待一段时间后(默认为10秒),在发送 SIGKILL信号来终止容器 - docker kill
直接向容器发出SIGKILL信号
docker [container] kill container_id|container_name - 在容器内部停止应用运行
exit等#批量停止容器 docker stop $(docker ps -a -q)
5. 容器重启 docker restart
针对docker ps -a 列出来的容器,可以使用docker start重新启动的。
可以使用 docker restart 来重启容器。
6. 重新进入容器
6.1. docker attach 命令
docker attach container_id|container_name
存在问题:
当多个窗口同时 attach到一个容器时,所有窗口都会同步显示。
当某个窗口因命令阻塞时,其他窗口无法执行操作了。
6.2. docker exec命令
docker [container] exec [参数选项] container_id 子命令
参数选项:
-d –detach : 在容器后端执行,不开伪终端
-i 打开标准输入,接收用户输入命令, 默认为false
-t –tty=true 分配伪终端,默认为false
docker exec -it 366149762dc0 /bin/bash
# -it 交互式模式打开 执行/bin/bash应用
7. 删除容器 – 删除终止或者退出状态的容器 docker rm
docker [container] rm [-f | –force] [-l | –link] [-v | –volumes] container [other_container]
-f –force 是否轻质终止并删除一个运行中的容器
-l –link 删除容器的连接,保留容器
-v –volumes 删除容器挂载的数据卷
7.1. 批量删除容器方法: docker rm 命令
# 批量删除容器
docker rm $(docker ps -a -q)
8. 导入和导出容器 export/import
导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。
8.1. 导出容器 export
实际生成容器的一个快照。
docker commit 与docker exportde 区别:
- docker export 不管容器是否运行,都可以导出。 docker commit只能运行中的容器才可以使用
- docker export生成容器的快照文件会丢弃所有历史记录和元数据信息(仓库名字,tag信息)(仅保留容器当前的快照状态)
docker commit生成的镜像 存储文件将保存完成的记录, 体积比较大
export导出的快照文件时,会丢失很多元数据, 在使用导出镜像,(docker run)启动容器时, 不要省略后面的子命令
sudo docker export -o mycentos.tar container
8.2. 导入容器,变成本地的镜像 import
docker [container] import 快照文件
# 由于快照不包含元数据,在导入时,需要指定镜像名和tag
docker improt xxx.tar centos:7.1
# 启动时 要带着后面子命令
docker run -it centos:7.1 /bin/bash
9. 查看容器详情 inspect
docker [container] inspect container_id|container_name
10. 查看容器内部的进程 docker top
docker top container_id
11. 查看统计信息 docker stats
查看 CPU 内存 存储的基本信息
docker [container] stats [options] container
-a 所有容器的统计信息
–no-stream 不持续输出 默认会自动更新持续实时结果
–no-trunc 不截断输出信息
# 只显示一次结果后退出
docker stats --no-trunc --no-stream 286c5e4f5f2a
# 持续实时统计展示结果
docker stats --no-trunc 286c5e4f5f2a
12. 其他容器命令
12.1. 容器中文件与宿主机相互交换 docker cp
docker cp [options] container:src_path des_path
和
docker cp [options] src_path container:des_path
options支持的选项:
-a –archive: 打包模式,文件会带有原始的uit和git信息
-L –follow-link: 跟随软连接,如果当前路径为软连接,默认只会复制链接信息,不会复制目标内容,使用此参数,会复制连接的目标内容。
12.2. 查看容器变更 docker diff
查看容器内文件系统的变更
docker [container] diff container
docker diff 286c5e4f5f2a
执行结果:
docker diff 286c5e4f5f2a
C /tmp
A /tmp/test.txt
A /tmp/yum-container.log
D /tmp/yum.log