Docker Container(容器)
概念
通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别。
容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本。

为什么需要容器?
镜像是静态的文件,并不能提供服务,就像我拿了个
Linux
或者
Windows
的光盘一样,只有安装到主机里面运行起来才能对外提供服务,我们才能使用。
Docker 容器化带来了许多好处,以下是一些主要的方面:
- 环境一致性:Docker 容器可以确保应用程序在开发、测试和生产环境中运行的环境完全一致。通过 Dockerfile 定义应用程序的运行环境,包括操作系统、依赖库、配置文件等,从而避免了“在我的机器上可以运行”的问题。
- 快速部署与启动:Docker 容器可以将应用程序及其依赖打包成一个独立的镜像,通过简单的命令即可部署到任何支持 Docker 的环境中。Docker 容器的启动速度非常快,通常只需要几秒钟。
- 资源隔离与利用率:Docker 容器通过命名空间和 cgroups 技术,实现了对 CPU、内存、磁盘等资源的隔离。每个容器都有自己独立的资源视图,互不干扰。并且Docker 容器不需要完整的操作系统,多个容器可以共享宿主机的操作系统内核,从而显著提高资源利用率。
- 可扩展性与弹性:Docker 容器可以轻松地实现水平扩展。通过 Docker Compose 或 Kubernetes 等工具,可以快速启动多个容器实例,以应对不同的负载。并且可以根据实际负载自动扩缩容,确保应用程序在高并发场景下的稳定运行。
- 版本控制与可重复性:Docker 镜像支持版本控制,可以通过标签(Tag)来区分不同版本的镜像。这使得应用程序的部署和回滚变得非常简单。
- 微服务架构支持:每个微服务可以打包成一个独立的容器,通过容器编排工具(如 Kubernetes)进行管理和通信。微服务可以独立部署和更新,不会相互影响。Docker 容器化使得微服务架构的实现更加简单和高效。
容器的生命周期
容器的生命周期是容器可能处于的状态。
- created:初建状态
- running:运行状态
- stopped:停止状态
- paused: 暂停状态
- deleted:删除状态
各生命周期之间的转换关系如图所示:

- docker create : 创建容器后,不立即启动运行,容器进入初建状态;
- docker run : 创建容器,并立即启动运行,进入运行状态;
- docker start : 容器转为运行状态;
- docker stop : 容器将转入停止状态;
- docker kill : 容器在故障(死机)时,执行 kill(断电),容器转入停止状态,这种操作容易丢失数据,除非必要,否则不建议使用;
- docker restart : 重启容器,容器转入运行状态;
- docker pause : 容器进入暂停状态;
- docker unpause : 取消暂停状态,容器进入运行状态;
- docker rm : 删除容器,容器转入删除状态;
- killed by out-of-memory(因内存不足被终止):宿主机内存被耗尽,也被称为 OOM,非计划终止,这时需要杀死最吃内存的容器;
容器命令清单
命令 | 别名 | 功能 |
docker create
|
docker container create
|
创建容器
|
docker run
|
docker container run
| 运行容器 |
docker attach
|
docker container attach
|
连接到正在运行中的容器
|
docker commit
|
docker container commit
|
将镜像提交为容器
|
docker cp
| docker container cp | 在容器和宿主机之间拷贝 |
docker diff |
docker container diff
|
检查容器里文件结构的更改
|
docker exec
|
docker container exec
|
在运行的容器中执行命令
|
docker export
|
docker container export
|
将容器导出为
tar
|
docker container inspect
|
查看容器详细信息
| |
docker container kill
|
杀死容器
| |
docker logs
|
docker container logs
|
查看日志
|
docker ps
|
docker container ls,
docker container list,
docker container ps
| 查看正在运行的进程 |
docker pause
|
docker container pause
| 暂停进程 |
docker port | docker container port | 查看容器的端口映射 |
docker container prune |
删除停止的容器
| |
docker rename
|
docker container rename
| 重命名容器 |
docker restart
| docker container restart | 重启容器 |
docker rm
|
docker container rm,
docker container remove
|
删除容器
|
docker start |
docker container start
|
启动容器
|
docker stats
| docker container stats |
查看资源占用信息
|
docker stop
|
docker container stop
| 停止容器 |
docker top
| docker container top |
查看某个容器的资源占用
|
docker unpause
|
docker container unpause
|
继续运行容器
|
docker update
| docker container update | 更新容器配置 |
docker wait | docker container wait | 阻止一个或多个容器停止,然后打印退出代码 |
容器命令详解
docker create
功能:创建一个新的容器但不启动它
语法:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
关键参数:
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口;
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name: 为容器指定一个名称;
- -h: 指定容器的 hostname;
- -e : 设置环境变量;
- --cpuset-cpus: 绑定容器到指定 CPU 运行;
- -m :设置容器使用内存最大值;
- --network: 指定容器的网络连接类型;
- --link=[ ]: 添加链接到另一个容器;
- --volume , -v: 绑定一个卷
- --rm :shell 退出的时候自动删除容器
- --restart:自动重启
样例:
docker create --name mynginx nginx:1.27.5

docker run
功能:创建一个新的容器并运行一个命令
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
关键参数:
- -d: 后台运行容器,并返回容器 ID;比 create 多了这个参数,其他均一致
样例:
docker run -p 8000:80 -d nginx:1.27.5
docker ps
功能:列出容器。
语法:
docker ps [OPTIONS]
关键参数:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。如 json 或者 table
- -l :显示 latest 的容器。
- -n :列出最近创建的 n 个容器。
- --no-trunc :不截断输出。
-
-q : 静默模式,只显示容器编号。
-
-s : 显示总的文件大小。
样例:
docker ps -a
docker logs
功能:查看容器日志
语法:
docker logs [OPTIONS] CONTAINER
关键参数:
- -f ,--follow: 跟踪日志输出
- --since :显示某个开始时间的所有日志
- -t,--timestamps : 显示时间戳
- -n,--tail :仅列出最新 N 条容器日志
样例:跟踪查看容器 mynginx 的日志输出。
docker logs -f mynginx
docker attach
功能:连接到正在运行中的容器。
语法:
docker attach [OPTIONS] CONTAINER
关键参数:
- --sig-proxy:是否将所有信号代理,默认是 true,如果设置为 false,退出的话不会影响容器,否则退出会导致容器退出。
样例:连接容器后按了
ctrl+c
后会把容器杀死

docker exec
功能:在容器中执行命令。
语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
关键参数:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持 STDIN 打开
- -t :分配一个伪终端
- -e :设置环境变量
- -u,--user :指定用户 "
[: ]" - -w,--workdir:指定工作目录
样例:
#在容器 mynginx 中以交互模式执行 echo:
docker exec -it mynginx echo "Hello bit"
#在容器 mynginx 中以交互模式打开 shell:
docker exec -it mynginx bash
docker start
功能:启动停止的容器。
语法:
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop
功能:停止运行的容器。
语法:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
关键参数:
- -s :发送的信号
样例:
docker stop mynginx
docker restart
功能:重启容器。
语法:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
关键参数:
- -s :发送信号
docker kill
功能:强制退出容器
语法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
关键参数:
- -s :发送的信号
docker stop
发送的是
SIGTERM
信号,
docker kill
发送的是
SIGKILL
信号
docker top
功能:查看容器中运行的进程信息,支持 ps
命令参数。
语法:
docker top CONTAINER [ps OPTIONS]
容器运行时不一定有
/bin/bash
终端来交互执行
top
命令,而且容器还不一定有 top 命令,可以使用
docker top
来实现查看
container
中正在运行的进程。
docker stats
功能:显示容器资源的使用情况,包括:CPU
、内存、网络
I/O
等。
语法:
docker stats [OPTIONS] [CONTAINER...]
关键参数:
- --all , -a :显示所有的容器,包括未运行的。
- --format :指定返回值的模板文件。如 table,json。
- --no-stream :展示当前状态就直接退出了,不再实时更新。
- --no-trunc :不截断输出。
样例:

- CONTAINER ID 与 NAME: 容器 ID 与名称。
- CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。
- MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
- NET I/O: 容器通过其网络接口发送和接收的数据量。
- BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
- PIDS: 容器创建的进程或线程数。
docker container inspect
功能:查看容器详细信息
语法:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
关键参数:
- -f :指定返回值的模板文件。如 table、json
- -s :显示总的文件大小。
如果直接使用 docker inspect ,则会自动检查是镜像还是容器然后显示相信信息。
docker port
功能:用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT
到面向公众的端口。
语法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
docker cp
功能:在容器和宿主机之间拷贝文件 语法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
样例:
#将主机/www/目录拷贝到容器 mynginx 的/www 目录下。
docker cp /www/ mynginx:/www/
#将容器/www/目录拷贝到主机的/wwwbak 目录下。
docker cp mynginx:/www/ /wwwbak/
docker diff
功能:检查容器里文件结构的更改。
语法:
docker diff CONTAINER
样例:
docker diff mynginx
docker commit
功能:从容器创建一个新的镜像。
语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
参数:
- -a :提交的镜像作者;
- -c :使用 Dockerfile 指令来创建镜像,可以修改启动指令;
- -m :提交时的说明文字;
- -p :在 commit 时,将容器暂停;
样例:
docker commit -a "abc" mynginx mynginx:v1.0

docker pause
功能:暂停容器中所有的进程。
语法:
docker pause CONTAINER [CONTAINER...]
docker unpause
功能:恢复容器中所有的进程。
语法:
docker unpause CONTAINER [CONTAINER...]
docker rm
功能:删除停止的容器
语法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
关键参数:
- -f :通过 SIGKILL 信号强制删除一个运行中的容器。
样例:
#删除 mynginx 容器
docker stop mynginx
docker rm mynginx
#删除所有停止的容器
docker rm $(docker ps -a -q)
docker export
功能:导出容器内容为 tar 文件,与 docker save 命令功能相似,不过 docker save 是将镜像文件导出为 tar 文件。
语法:
docker export [OPTIONS] CONTAINER
关键参数
- -o:写入到文件。
样例
#导出 mynginx 为 tar
docker export -o mynginx.tar mynginx
这样我们就可以得到了一个有关 mynginx 容器的 tar 文件,我们可以使用 docker import 将该 tar 文件解压出来生成一个镜像文件 mynginx。
docker import mynginx.tar mynginx
不过该镜像文件与其源镜像文件 nginx:1.27.5 的区别就是,该文件的配置均没有设置,如 Cmd,Env 均为空。
docker wait
功能:阻塞运行直到容器停止,然后打印出它的退出代码。
语法:
docker wait CONTAINER [CONTAINER...]
docker rename
功能:重命名容器
语法:
docker rename CONTAINER NEW_NAME
docker container prune
功能:删除所有停止的容器
语法:
docker container prune [OPTIONS]
关键参数
- -f, --force:不提示是否进行确认
docker update
功能:更新容器配置
语法:
docker update [OPTIONS] CONTAINER [CONTAINER...]
关键参数
- --cpus:cpu 数量
- --cpuset-cpus :使用哪些 cpu
- --memory :内存限制
- --memory-swap:交换内存
- --cpu-period :是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配
- --cpu-quota:是用来指定在这个周期内,最多可以有多少时间用来跑这个容器
样例
#更新内存
docker update -m 400m mynginx
本文地址:https://www.vps345.com/15718.html
上一篇:Linux入门:基础操作指令