docker容器是docker的运行实例,在镜像文件上带有可写的文件层。docker容器是一个轻量级应用,能够随时创建和部署、启动、停止
1.使用docker creat 创建新的容器
1 | docker create -it centos 创建以个新的Centos容器 |
使用docker ps -a 查看容器信息
STATUS 为容器运行状态,UP为正常运行,Exited为停止,Created为尚未启动
creat 命令和后续的run命令支持的选项都十分复杂,主要包括几大类:与容器运行模式相关,与容器和环境配置相关,与容器资源限制和安全保护相关
2.使用docker start 启动容器
1 | docker start 10f |
可以看到容器状态为UP 代表已经启动。
3. 使用 docker run 新建并启动容器
1 | docker run centos /bin/echo "this is new centos " |
当利用docker run 来创建并启动容器时,docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从共有仓库下载
- 利用镜像创建一个容器,并启动该容器
- 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器
- 从网桥的地址池配置一个ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被自动终止
使用ps命令,可以看到只运行了bash应用,并无其他进程,用户可以输入exit 命令来退出容器
对于所创建的bash容器,当使用exit命令退出后,容器就自动处于退出(Exited)状态,对于docker 容器来说, 当运行的应用退出后容器也就没有继续运行的必要了
有时执行docker run会出错,因为命令无法正常执行容器会退出,可以查看默认返回的错误码
常见的有以下几个
- 125 Docker daemon 执行出错,例如指定不支持的参数
- 126 指定命令无法执行 例如权限出错
- 127 容器内命令无法找到
4. 守护状态运行
使docker容器在后台以守护状态运行(Daemonized) 使用-d 参数
1 | docker run -d centos /bin/bash -c "while ture ; do echo hello world ; sleep 2;done" |
5. 终止容器
docker stop 会终止一个运行中的容器,命令格式为 docker stop [-t | –time=[10]] [container]
首先向容器发送SIGTERM 信号,等待一段超时时间后(默认10秒 ) 在发送信号来终止容器
docker kill 会 直接发送 SIGKILL 信号来终止容器
当Docker容器中指定的应用终结时,容器也会自动终止
1 | docker ps -qa 查看所有容器的id |
处于终止状态的容器可以通过 docker start命令重新启动,docker restart 会将一个运行态容器先终止再重新启动
6.进入容器
在使用-d参数后,容器会进入后台,用户无法操作,如果需要进入可以使用官方的attach、exec,和第三方的nsenter
1 | docker attach [--detach-keys[ = [ ] ] ] [--no-stdin] [--sig-proxy[=ture]] container |
多个窗口同时使用attach模式连接到同一容器时,所有窗口都会同步显示
1 | docker exec [-d|--detach] [--detach-keys[=[ ] ] ] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER] container COMMAND [ARG..] |
通过指定-it 参数来保持标准输入打开,并且分配一个为终端,推荐使用exec命令对容器进行操作
1 | docker nsenter 第三方工具 |
7.删除容器
1 | docker rm [-f|--force] [-l | --link] [-v|--volumes] container [container……] |
使用该命令来删除处于终止或退出状态的容器
-f ,–force=false :是否强制终止并删除一个运行中的容器
-l,–link=false :删除容器的连接,但是保留容器
-v,–volumes=false : 删除容器挂载的数据卷
8. 导入导出容器
用于容器的系统迁移
1 | docker export [-o|--output[=" " ] ] container |
可以通过-o 来指定导出的tar文件名,也可以直接重定向实现
导出的文件可以使用docker import 命令导入变成镜像
1 | docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]] |
docker save :将一个镜像导出为文件,再使用docker
load –input 命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker
export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。docker export :将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。