05. 操作Docker容器
2025-02-17
简介
容器是 Docker 的核心概念,它是一个轻量级的、独立运行的应用单元,包含应用程序及其运行环境。与虚拟机相比,容器共享主机操作系统内核,仅打包必要的运行环境,因此更加轻量和高效。
本文将介绍如何管理 Docker 容器的完整生命周期,包括创建、启动、停止和删除等操作。
1. 容器的基本操作
1.1 创建和启动容器
Docker 提供了两种启动容器的方式:
- 基于镜像新建并启动容器
- 重新启动已终止的容器
使用 docker run 命令创建并启动容器:
# 运行容器并输出信息
docker run centos:7 /bin/echo "Hello wang"下面来启动一个bash终端,允许用户进行交互
# 启动交互式终端
docker run -it centos:7 /bin/bash参数说明:
-i: 保持标准输入打开-t: 分配伪终端(pseudo-tty)
在交互模式下,用户可以通过创建的终端来输入命令。例如:
[root@29bd2b63c1af /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@29bd2b63c1af /]# pwd
/
[root@29bd2b63c1af /]# touch /mnt/a.txt
[root@29bd2b63c1af /]# exit #退出容器
docker container ls -a #列出所有容器
docker diff 容器名或sha256值 #列出某个容器的历史操作
docker stop 容器名或sha256值 #关闭容器
docker hostory 镜像名:标签 #列出镜像的历史操作当利用docker run来创建容器时,Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
- 从地址池配置一个IP地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
1.2 容器管理命令
# 查看容器
docker container ls -a # 列出所有容器
docker ps # 查看运行中的容器
# 启动/停止容器
docker container start <容器ID> # 启动已终止的容器
docker container stop <容器ID> # 停止运行中的容器
docker container restart <容器ID> # 重启容器
# 容器状态
docker diff <容器ID> # 查看容器文件变更
docker top <容器ID> # 查看容器进程2. 容器运行模式
2.1 后台运行
使用 -d 参数可以让容器在后台运行:
# 前台运行
docker run centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 后台运行
docker run -d centos:7 /bin/sh -c "while true;do echo hello world;sleep 1;done"
# 查看容器日志
docker logs <容器ID>注意:容器是否持续运行取决于启动命令,而不是
-d参数
终止容器
可以使用docker container stop来终止一个运行中的容器
此外,当Docker容器中指定的应用终结时,容器也自动终止
如上面启动了一个终端的容器,用户通过exit命令或ctrl+d来退出终端时,所创建的容器立刻终止。
终止状态的容器可以用docker container ls -a来查看。
docker container ls -a处于终止状态的容器,可以通过 docker container start命令重新启动
还有 docker container restart命令会将一个运行状态的容器终止,然后在重新启动它。
进入容器
使用 -d参数时,容器启动后会进入后台运行
当需要进入容器进行操作,可以使用docker attach或者docker exec,建议使用 docker exec命令。
attach命令
使用attach命令
docker run -d -it centos:7
docker container ls
docker attach 容器ID号
## 说明:如果从这个stdin中exit,会导致容器的停止使用exec命令
-i -t参数
docker exec后边可以跟多个参数,这里主要是-i -t参数
只有-i参数时,由于没有分配伪终端,界面没有我们熟悉的Linux命令提示符。但命令执行结果仍然可以返回。-i -t参数一起使用,就是熟悉的linux命令提示符
docker run -d -it centos:7
docker container ls
docker exec -i 容器ID bash
docker exec -it 容器ID bash
# 说明:从这个stdin中exit,不会导致容器的停止。导出和导入容器
导出容器 docker export
如果要导出本地某个容器,可以使用docker export命令
docker container ls -a
docker export 容器ID > filename.tar
## 这样将导出容器快照到本地文件导入容器快照 docker inport
可以使用docker import从容器快照文件中再导入为镜像
cat filename.tar | docker import - test/centos:v2.0
docker image ls此外,也可以通过制定URL或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo说明:
用户既可以使用docker load来导入镜像存储文件到本地镜像库,也可以使用docker import来导入一个容器快照到本地镜像库。两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。从容器快照文件导入时可以重新制定标签等元数据信息。
删除容器
可以使用docker container rm来删除一个处于中止状态的容器。
docker container rm 容器ID或容器名 #删除容器如果要删除一个运行中的容器,可以添加-f参数,Docker会发送SIGKILL信号给容器
清理所有处于终止状态的容器
用docker container ls -a命令可以查看所有已经创建的包括终止状态的容器,当数量过多,可以用下面的命令清理掉所有处于终止状态的容器
docker container prune #删除所有处于终止状态的容器