第4章 操作Docker容器
容器是镜像的一个运行实例,不同的是,镜像是静态的文件,而容器是带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。
4.1 创建容器
1.新建容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
使用 docker create 命令创建的容器处于 停止状态,可以使用 docker start 命令来启动它。
2.启动容器
启动一个已经创建的容器。
docker start [OPTIONS] CONTAINER [CONTAINER...]
3.新建并启动容器
docker run 相当于 docker create 后再接 docker start。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
利用 docker run 来创建并启动容器时,docker 在后台运行的标准操作包括:
1.检查本地镜像是否存在,不存在就从公有仓库下载;
2.利用镜像创建一个容器,并启动该容器;
3.分配一个文件系统给容器,并在只读的镜像层外挂载一层可读写层;
4.从宿主主机配置的网桥接口桥接一个虚拟接口到容器中去;
5.从网桥的地址池配置一个IP地址给容器;
6.执行用户指定的应用程序;
7.执行完毕后容器被自动终止。
docker run -it ubuntu:18.04 /bin/bash
其中,-t 让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
如果某些时候 docker run 出错了,常见的错误码:
125:Docker Daemon 执行出错,例如指定了不支持的docker参数;
126:所指定命令无法执行,例如权限出错;
127:容器内命令无法找到。
4.守护态运行
-d,让容器在后台以守护态的形式运行,启动后会返回一个唯一的id。
5.查看容器输出
docker logs [OPTIONS] CONTAINER
4.2 停止容器
1.停止容器
docker pause CONTAINER [CONTAINER...]
docker run --name test --rm -it ubuntu:latest bash
docker pause test
docker ps -a
2.终止容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
该命令首先会向容器发送 SIGTERM 信号,等待一段超时时间后(默认为10s),再发送SIGKILL信号来终止容器。
docker prune 自动清除所有处于停止状态的容器。
docker kill 直接发送 SIGKILL 信号来强行终止容器。
docker restart //先停止,再启动
4.3 进入容器
在使用 -d 参数的时候,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。这时候如果需要进入操作,推荐使用 attach 或者 exec。
1.attach 命令
docker attach [OPTIONS] CONTAINER
然而使用 attach 命令有时候不方便,当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞的时,其他窗口也无法操作。
2.exec 命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
4.4 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
默认情况下,只能删除已经处于终止或者退出状态的容器。-f 可以强行删除。
4.5 导入和导出容器
某些时候,需要将容器从一个系统迁移到另外一个系统。
1.导出容器
docker export [OPTIONS] CONTAINER
2.导入容器(变成镜像)
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker images
实际上,既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 命令来导入一个容器快照到本地镜像库。这二者的区别在于:
容器快照文件将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照信息),而镜像存储文件将保存完整记录,体积更大,从容器快照文件导入时可以重新指定标签
信息。
4.6 查看容器
1.查看容器详情
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
2.查看容器内进程
docker top CONTAINER [ps OPTIONS]
3.查看统计信息
docker stats [OPTIONS] [CONTAINER...]
4.7 其他容器命令
1.复制文件
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
//将本地路径data复制到test容器的/tmp下。
docker cp data test:/tmp/
2.查看变更
//查看容器内文件系统的变更
docker diff CONTAINER
3.查看端口映射
//查看容器端口映射
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
4.更新配置
//更新容器运行时的一些配置,主要是一些限制份额
docker [OPTIONS] COMMAND