Docker Container(容器)

发布于:2025-05-01 ⋅ 阅读:(21) ⋅ 点赞:(0)

概念

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

为什么需要容器?

镜像是静态的文件,并不能提供服务,就像我拿了个 Linux 或者 Windows 的光盘一样,只有安装到主机里面运行起来才能对外提供服务,我们才能使用。

Docker 容器化带来了许多好处,以下是一些主要的方面:

  1. 环境一致性:Docker 容器可以确保应用程序在开发、测试和生产环境中运行的环境完全一致。通过 Dockerfile 定义应用程序的运行环境,包括操作系统、依赖库、配置文件等,从而避免了“在我的机器上可以运行”的问题。
  2. 快速部署与启动:Docker 容器可以将应用程序及其依赖打包成一个独立的镜像,通过简单的命令即可部署到任何支持 Docker 的环境中。Docker 容器的启动速度非常快,通常只需要几秒钟。
  3. 资源隔离与利用率:Docker 容器通过命名空间和 cgroups 技术,实现了对 CPU、内存、磁盘等资源的隔离。每个容器都有自己独立的资源视图,互不干扰。并且Docker 容器不需要完整的操作系统,多个容器可以共享宿主机的操作系统内核,从而显著提高资源利用率。
  4. 可扩展性与弹性:Docker 容器可以轻松地实现水平扩展。通过 Docker Compose 或 Kubernetes 等工具,可以快速启动多个容器实例,以应对不同的负载。并且可以根据实际负载自动扩缩容,确保应用程序在高并发场景下的稳定运行。
  5. 版本控制与可重复性:Docker 镜像支持版本控制,可以通过标签(Tag)来区分不同版本的镜像。这使得应用程序的部署和回滚变得非常简单。
  6. 微服务架构支持:每个微服务可以打包成一个独立的容器,通过容器编排工具(如 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 :指定用户 "<name|uid>[:<group|gid>]"
  • -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 :指定返回值的模板文件。如 tablejson
  • -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...]
关键参数
  • --cpuscpu 数量
  • --cpuset-cpus :使用哪些 cpu
  • --memory :内存限制
  • --memory-swap:交换内存
  • --cpu-period :是用来指定容器对 CPU 的使用要在多长时间内做一次重新分配
  • --cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器
样例
#更新内存
docker update -m 400m mynginx

网站公告

今日签到

点亮在社区的每一天
去签到