Docker容器操作命令汇总笔记
1.Docker容器
Docker 是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后在任何支持Docker的系统上运行。容器类似于虚拟机,但它们更轻量、启动更快,并且占用更少的系统资源。
Docker容器的关键优势包括:
-
环境一致性:容器打包了应用及其运行环境,确保应用在不同环境间无缝迁移,解决了“在我机器上可以运行”的问题。
-
敏捷开发:容器化的应用可以快速启动和停止,加速开发和测试流程。
-
隔离性:每个容器都是相互隔离的,运行在自己的环境中,互不干扰。
-
可移植性:容器可以在多种环境中运行,包括物理机、虚拟机、数据中心和云平台。
-
微服务架构:Docker容器非常适合微服务架构,每个微服务都可以独立打包和扩展。
-
资源利用:容器共享宿主机的内核,不需要虚拟机那样的额外资源开销,提高了系统资源的利用率。
-
持续集成/持续部署(CI/CD):容器的快速启动特性,使得它们成为实现CI/CD流程的理想选择。
Docker容器通过Docker Engine进行管理,包括创建、运行、停止、删除等操作。用户可以通过Docker客户端命令行工具与Docker Engine交互,或者使用Docker Compose来定义和运行多容器应用。
总的来说,Docker容器为应用开发和部署提供了一种灵活、高效、可扩展的解决方案。
2.创建和启动容器
2.1 docker create
功能:用于创建一个新的容器,但它不会启动容器。这个命令允许你预先设置容器的配置,例如网络设置、数据卷、环境变量等,而不需要在容器启动时指定这些配置
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
参数说明:
- OPTIONS:创建容器时的各种选项,例如网络设置、数据卷、环境变量等。
- IMAGE:指定要创建容器的基础镜像。
- COMMAND:在容器启动时运行的命令。
- ARG:传递给命令的参数。
OPTIONS说明:
--name="CONTAINER_NAME":为容器指定一个名称。
-d, --detach:后台运行容器。
--interactive,-i:保持容器的标准输入(STDIN)打开,即使不附加到容器终端。
--tty,-t:分配一个伪终端。
--env,-e:设置环境变量。
--volume,-v:绑定挂载一个卷。
--network:设置容器的网络连接。
--cpu-shares:设置容器的CPU共享权重。
--memory:设置容器可以使用的内存量。
示例:
# 创建一个名为 myubuntu 的容器,基于ubuntu镜像,但不启动它
docker create --name myubuntu ubuntu
# 创建一个后台运行的容器,名为 mynginx,使用 nginx 镜像,并暴露端口 80
docker create --name mynginx -d -p 80:80 nginx
# 创建一个具有环境变量的容器
docker create --name my_mysql -e "ENV_VAR=value" mysql
# 创建一个容器并挂载一个卷
docker create --name my_mysql -v /path/data:/container/data mysql
使用 docker create 创建的容器不会自动启动,需要使用 docker start 命令来启动它。这个命令通常用于脚本或自动化工具中,其中容器的创建和启动需要分开处理
2.2 docker run
功能:用于创建一个新的容器并启动它。这个命令非常灵活,支持多种参数来定制容器的运行环境。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数说明:
- OPTIONS:创建容器时的各种选项,例如网络设置、数据卷、环境变量等。
- IMAGE:指定要创建容器的基础镜像。
- COMMAND:在容器启动时运行的命令(如果镜像预设了默认命令,则可以覆盖它)。
- ARG:传递给命令的参数。
OPTIONS说明:
-d, --detach:后台运行容器,并打印容器ID。
--name:为容器指定一个名称。
-e, --env:设置环境变量。
--env-file:从文件中读取环境变量。
-P, --publish-all:将容器内部暴露的所有端口映射到宿主机的随机端口上。
-p, --publish:将容器的端口映射到宿主机的指定端口。
-v, --volume:绑定挂载一个卷。
--network:设置容器的网络连接。
--cpu-shares:设置容器的CPU共享权重。
--memory:设置容器可以使用的内存量。
--rm:容器退出时自动清理容器文件系统。
-it 或 -i:分配一个伪终端并保持 STDIN 打开,通常与 --detach 一起使用。
示例:
# 运行一个名为 my_ubuntu 的容器,使用 ubuntu 镜像,并执行 /bin/bash 命令
docker run --name my_ubuntu -it ubuntu /bin/bash
# 后台运行一个名为 my_nginx 的容器,使用 nginx 镜像,并映射端口 80:
docker run --name my_nginx -d -p 80:80 nginx
# 运行一个容器并设置环境变量
docker run -e "ENV_VAR=value" mysql
# 运行一个容器并挂载一个卷
docker run -v /path/data:/container/data mysql
# 运行一个容器并自动清理容器文件系统
docker run --rm redis
docker run 命令结合了 docker create 和 docker start 的功能,它首先创建一个新的容器,然后立即启动它。这个命令非常适合快速启动和管理容器。
3.运行中的容器
3.1 docker start
功能:用于启动一个或多个已经创建但处于停止状态的容器。如果已经使用 docker run
命令创建了一个容器,并且它已经停止,可以使用这个命令来重新启动它。
docker start CONTAINER [CONTAINER...]
参数说明:
CONTAINER
:指定要启动的容器的名称或ID。
示例:
# 启动一个名为 my_redis 的容器
docker start my_redis
# 同时启动多个容器
docker start my_redis my_mysql my_nginx
# 使用容器ID来启动容器
docker start 容器ID
# 启动所有当前处于停止状态的容器
docker start $(docker ps -aq)
容器必须已经存在且处于停止状态才能被启动。
如果容器正在运行,docker start 命令将不会对它产生任何效果。
容器在启动时不会重新初始化,它将从之前停止的点继续执行。
如果容器在停止之前正在监听某些端口,那么在容器启动后这些端口将再次被监听。
容器的网络设置在启动时不会改变,即使在停止期间对网络进行了更改。
3.2 docker stop
功能:用于停止一个或多个正在运行的容器。该命令通过发送 SIGTERM
信号给容器,请求容器主进程优雅地停止。如果容器在一定时间内没有停止(默认是 10 秒),Docker 会发送 SIGKILL
信号来强制停止容器。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
参数说明:
CONTAINER
:指定要停止的容器的名称或ID
OPTIONS说明:
-t, --timeout:指定在发送 SIGKILL 信号之前等待容器停止的时间(单位为秒)。
示例:
# 停止一个名为 my_redis 的容器
docker stop my_redis
# 同时停止多个容器
docker stop my_redis my_mysql
# 使用容器ID来停止容器
docker stop 容器ID
# 停止所有当前正在运行的容器
docker stop $(docker ps -q)
容器在停止后,仍然存在于 Docker 主机上,并且可以被重新启动或删除。停止容器不会影响容器的持久化数据,如绑定挂载的卷。如果容器内有进程无法响应 SIGTERM 信号,容器可能需要更长时间来停止。在容器停止后,你可以使用 docker start 命令来重新启动它。如果需要强制停止容器,可以不指定超时时间或将超时时间设置为 0。
3.3 docker restart
功能:命令用于重启一个或多个正在运行的容器。这个命令首先会停止容器,然后重新启动它。重启容器时,Docker 会发送 SIGTERM 信号给容器的主进程,请求其优雅地关闭,随后容器会重新启动。如果容器在指定的超时时间内没有停止,Docker 会发送 SIGKILL 信号来强制停止容器。
docker restart [OPTIONS] CONTAINER [CONTAINER...]
参数说明:
- CONTAINER:指定要重启的容器的名称或ID
OPTIONS说明
-t, --timeout:指定在发送 SIGKILL 信号之前等待容器停止的时间(单位为秒)。
示例:
# 重启一个名为 my_redis的容器
docker restart my_redis
# 同时重启多个容器
docker restart my_redis my_mysql
# 使用容器ID来重启容器
docker restart 容器ID
# 重启所有当前正在运行的容器
docker restart $(docker ps -q)
# 设置超时时间为10秒来重启容器
docker restart --timeout=10 my_redis
容器在重启后,其内部状态可能会根据容器的设计而有所不同。一些容器可能会恢复到之前的状态,而另一些则可能需要从头开始初始化。重启容器不会影响容器的持久化数据,如绑定挂载的卷。如果容器内有进程无法响应 SIGTERM 信号,容器可能需要更长时间来停止,此时可以指定更长的超时时间。在容器重启过程中,如果需要查看容器的日志,可以使用 docker logs 命令。
docker restart 命令不会删除容器,容器的ID保持不变。
4.查看容器
4.1 docker ps
功能:列出当前所有正在运行的容器。
docker ps [OPTIONS]
OPTIONS说明:
-a, --all:显示所有容器(默认仅显示正在运行的容器)。
-q, --quiet:仅显示容器的数字ID。
-n=INTEGER:仅显示最新创建的容器(默认为所有容器)。
--since=CONTAINER:仅显示创建时间在指定容器之后的容器。
--tail=ALL:显示容器的日志的完整输出(默认显示最后的几条日志)。
--no-trunc:显示完整的容器信息(默认信息会被截断)。
-l, --latest:仅显示最近创建的容器(仅在没有指定 -a 或 --all 时有效)。
示例:
# 列出所有正在运行的容器
docker ps
# 列出所有容器,包括未运行的
docker ps -a
# 仅显示容器的数字ID
docker ps -q
# 显示最近创建的容器的完整信息
docker ps -l --no-trunc
# 显示最近创建的容器的日志的最后几条输出
docker ps -l --tail=5
# 显示创建时间在特定容器之后的容器
docker ps --since=container_id_or_name
5.进入容器
5.1 docker exec
功能:在运行中的容器内执行命令,通常是用于交互式 shell 访问。方便我们进入容器内部进行故障排查、管理或任何需要直接访问容器环境的操作
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参数说明:
OPTIONS
:可选参数,用于配置执行命令的环境。CONTAINER
:要在其内部执行命令的容器的名称或ID。COMMAND
:要在容器内执行的命令。ARG...
:传递给命令的参数。
OPTIONS说明:
-it:分配一个伪终端,并保持 STDIN 打开,即使不附加到容器终端。
-d:在后台运行命令。
--user 或 -u:以指定的用户身份执行命令。
--env 或 -e:设置环境变量。
--workdir 或 -w:设置容器内命令的工作目录。
示例:
# 在名为 my_redis 的容器内执行 /bin/bash 并分配一个交互式终端
docker exec -it my_redis /bin/bash
# 在容器内执行 ls -l 命令,列出当前目录的内容
docker exec my_redis ls -l
# 在容器内执行 top 命令,实时查看容器内部的进程信息
docker exec -it my_redis top
# 以特定用户身份在容器内执行命令,例如以 root 用户身份
docker exec -u root -it my_redis /bin/bash
# 设置环境变量 MY_ENV_VAR 为 value 后执行命令
docker exec -e MY_ENV_VAR=value my_redis echo $MY_ENV_VAR
# 在容器的特定工作目录下执行命令,例如 /usr/src/local
docker exec -w /usr/src/local my_redis ls
5.2 docker attach
功能:附加到一个正在运行的容器的标准输入、输出和标准错误上
docker attach [OPTIONS] CONTAINER
参数说明:
OPTIONS
:可选参数。CONTAINER
:要附加的容器的名称或ID。
OPTIONS说明:
--no-stdin:不挂载 STDIN,可以与 --detach-keys 选项一起使用来分离容器。
--detach-keys:定义容器分离的键,格式为 ctrl-a,ctrl-w,默认是 ctrl-p,ctrl-q。
示例:
# 附加到名为 my_redis 的容器
docker attach my_redis
# 使用自定义的分离键 ctrl-a,ctrl-w 附加到容器
docker attach --detach-keys="ctrl-a,ctrl-w" my_redis
# 附加到容器但不允许输入
docker attach --no-stdin my_redis
- 如果容器是通过 docker run -d 在后台运行的,那么 docker attach 将允许你连接到容器的 STDIN,并且可以与其交互。
- 如果容器没有运行前台进程(例如,没有运行 shell 或者前台进程已经退出),docker attach 将不会工作,因为没有什么可以交互的。
- 当你使用 docker attach 连接到容器时,容器的 STDOUT 和 STDERR 将会被你的终端所接收。
- 你可以通过在容器内按 ctrl-p,ctrl-q(默认的分离键)来从容器中断开连接,而不会停止容器。
- docker attach 只能附加到一个正在运行的容器。如果容器停止或不存在,docker attach 命令将失败。
6.查看容器日志与端口
6.1 docker logs
功能:Docker info 命令在 Docker 中用于显示有关当前 Docker 宿主机的环境和配置的信息。这个命令提供了大量的细节,包括 Docker 版本、操作系统、内核版本、驱动程序、容器、镜像和存储卷的数量,以及更多关于 Docker 守护进程状态的信息。docker info 是一个非常有用的命令,可以提供关于 Docker 宿主机的全面信息,有助于日常管理和故障排查。
docker logs [OPTIONS] CONTAINER
参数说明:
- CONTAINER:容器的 ID 或名称。
OPTIONS说明
:
-f, --follow:跟踪日志输出,类似于 tail -f。
-t, --timestamps:在日志中显示时间戳。
--tail:仅显示最新的 N 条日志(例如 --tail="all" 显示所有日志)。
示例:
# 查看容器日志
docker logs container_id
# 查看带有时间戳的容器日志
docker logs -t container_id
# 实时跟踪容器日志
docker logs -f container_id
# 查看容器的最后几条日志
docker logs --tail=5 container_id
# 查看从特定时间点开始的日志
docker logs --since="2021-03-15T12:00:00" container_id
6.2 docker port
功能:列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
docker port CONTAINER
参数说明:
CONTAINER
:要查看端口映射的容器的名称或ID
示例:
# 查看名为 my_redis 的容器的端口映射
docker port my_redis
# 指定协议和端口号
docker port my_redis 80/tcp
- 端口映射是在 docker run 命令中通过 -p 参数指定的。
- 如果容器没有映射任何端口,docker port 命令将不会显示任何输出。
- 宿主机上的端口号是由 Docker 在容器启动时自动分配的,除非在 docker run 命令中明确指定了端口号。
- 可以通过 docker ps 命令查看所有容器的端口映射情况,但 docker port 命令可以针对特定容器进行查询。
6.3 docker top
功能:查看容器中运行的进程信息,支持 ps 命令参数
docker top CONTAINER [CONTAINER...]
参数说明:
CONTAINER
:要查看进程的容器的名称或ID
OPTIONS说明:
-n=INTEGER:显示最近启动的 N 个进程。
--no-trunc:不截断输出。
示例:
# 查看名为 my_redis 的容器内运行的进程
docker top my_redis
# 查看多个容器内运行的进程
docker top my_redis my_mysql
# 查看容器内最近启动的 3 个进程
docker top -n=3 my_mysql
# 查看容器内所有进程的完整命令行
docker top --no-trunc my_mysql
容器必须处于运行状态才能使用 docker top
命令
7.删除容器
7.1 docker rm
功能:删除一个或多个已经停止的容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
参数说明:
- CONTAINER:要删除的容器的名称或ID。
OPTIONS说明:
-f, --force:强制删除一个正在运行的容器。容器将被停止,然后删除。
-v, --volumes:在删除容器时,也删除其关联的卷。
--link:移除链接的容器。
示例:
# 删除名为 my_redis 的容器
docker rm my_redis
# 强制删除名为 my_redis 的正在运行的容器
docker rm -f my_redis
# 删除容器时,同时删除其关联的卷
docker rm -v my_redis
# 删除多个容器
docker rm my_redis my_redis1 my_redis2
- 只有当容器停止后,才能使用 docker rm 删除它们。如果容器正在运行,你需要先使用 docker stop 命令停止容器。
- 使用 -f 或 --force 选项可以强制删除正在运行的容器,但请谨慎使用,因为这可能导致数据丢失或其他问题。
- 删除容器时,默认情况下不会删除与容器关联的卷。如果你希望删除容器及其关联的卷,可以使用 -v 或 --volumes 选项。
- 如果容器与其他容器有链接关系,使用 --link 选项可以移除这些链接。
7.2 docker kill
功能:用于发送信号到一个或多个容器以强制停止它们的主进程。默认情况下,这个命令会发送 SIGKILL
信号,这相当于在不通知进程的情况下立即终止它。你也可以选择发送其他信号,比如 SIGTERM
,它会给进程一个清理和正常退出的机会。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
参数说明:
- CONTAINER:要发送信号的容器的名称或ID。
OPTIONS说明:
-s, --signal="SIGKILL":设置要发送的信号的名称或数字(例如 SIGKILL、SIGTERM、15、9`)。
示例:
# 强制停止名为 my_redis 的容器
docker kill my_redis
# 向名为 my_container 的容器发送 SIGTERM 信号
docker kill -s SIGTERM my_redis
# 向多个容器发送 SIGKILL 信号
docker kill my_redis my_redis1 my_redis2
- 容器必须处于运行状态才能接收到 SIGKILL 或其他信号。
- SIGTERM 信号允许容器内的进程进行清理操作并优雅地退出,而 SIGKILL 信号则立即终止进程,不给它任何清理的机会。
- 如果你希望容器内的进程有机会正常关闭,应该发送 SIGTERM 信号而不是 SIGKILL。
- 在某些情况下,如果容器内的主进程捕获了 SIGTERM 信号并进行了处理,你可能需要发送 SIGKILL 信号来强制停止容器。
8.容器状态和统计信息
8.1 docker stats
功能:用于实时显示 Docker 容器的资源使用情况,包括 CPU、内存、网络 I/O 等。这个命令提供了一个动态的界面,可以帮你监控容器的资源使用情况,对于性能调优和资源管理非常有用
docker stats [OPTIONS]
OPTIONS说明:
--all,-a:显示所有容器的资源使用情况,包括未运行的容器。
--no-stream,--no-streaming:禁用实时流输出,只显示一次当前的资源使用情况。
--no-trunc:不截断输出(例如,显示完整的容器 ID 而不是简短的 ID)。
--format:自定义输出格式,使用 Go 模板语法。
--latest:仅显示最近创建的容器的资源使用情况。
示例:
# 实时显示所有容器的资源使用情况
docker stats
# 显示所有容器的资源使用情况,不进行实时流输出
docker stats --no-stream
# 显示未运行容器的资源使用情况
docker stats --all
# 自定义输出格式,仅显示容器的名称和 CPU 使用情况
docker stats --format "table {{.Name}}\t{{.CPUPerc}}"
# 显示最近创建的容器的资源使用情况
docker stats --latest
8.2 docker inspect
功能:显示一个容器或镜像的元数据,该命令用于获取有关 Docker 对象(容器、镜像、网络或卷)的详细信息。这个命令对于调试和获取对象的配置非常有用。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
参数说明:
- NAME|ID: 要检查的容器、镜像、网络或卷的名称或ID。
OPTIONS说明:
-f, --format:格式化输出,使用Go模板格式化。
-s, --size:显示总大小。
--type:返回给定类型的信息("container"或"image")
示例:
# 获取容器的详细信息
docker inspect mycontainer
# 以 JSON 格式获取镜像的详细信息
docker inspect myimage:latest
# 格式化输出容器的 IP 地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mycontainer
# 获取容器的总大小
docker inspect -s mycontainer
输出默认为 JSON 格式,除非使用 --format 选项进行格式化,可以使用 --format 选项来定制输出,例如提取特定的字段或属性,如果需要检查多个对象,可以一次性传递多个名称或ID。
9.容器与主机的数据拷贝
9.1 docker cp
功能:容器与主机之间的数据拷贝,用于在 Docker 容器和 Docker 主机之间复制文件或目录。这个命令对于从容器中提取日志文件、配置文件或部署应用程序非常有用。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
参数说明:
- CONTAINER:容器的名称或ID。
- SRC_PATH:源文件或目录的路径。
- DEST_PATH:目标文件或目录的路径。
OPTIONS说明:
-a, --archive:以归档模式复制,等同于 --no-preserve 选项的反义词,适用于备份容器文件系统。
L, --follow-link:复制时跟随符号链接。
--no-preserve:不保留文件的所有权和修改时间。
示例:
# 从名为 my_redis 的容器中复制文件 /etc/hosts 到宿主机的当前目录
docker cp my_redis :/etc/redis .
# 将宿主机的当前目录下的文件复制到名为 my_redis 的容器的 /etc/ 目录
docker cp a.text my_container:/etc/
# 以归档模式将容器的整个 /etc 目录复制到宿主机的 backup 目录
docker cp my_redis :/etc/ backup/
- 使用 docker cp 命令时,容器必须处于运行状态。
- 如果目标路径不存在,Docker 会自动创建它。
- 如果目标路径已经存在一个同名文件,docker cp 命令会覆盖它。
- docker cp 命令不会保留文件的所有权和修改时间,除非你使用 -a 或 --archive 选项。
10.暂停和恢复容器中的所有进程
10.1 docker pause
功能:命令会暂停容器内所有正在运行的进程。这并不是完全停止容器,容器依旧会运行,但是其内部的进程会被冻结,不会继续执行
docker pause CONTAINER [CONTAINER...]
参数说明:
CONTAINER
:要暂停的容器的名称或ID。
示例:
# 暂停名为 my_redis 的容器
docker pause my_redis
# 暂停多个容器
docker pause my_redis1 my_redis2 my_redis3
- 只有当容器处于运行状态时,才能被暂停。
- 暂停容器不会影响容器的网络连接,容器依旧可以接收和发送网络数据包。
- 暂停容器不会释放容器占用的资源,如内存和CPU。
- 某些类型的进程可能无法被 docker pause 命令正确暂停,例如那些不响应 SIGSTOP 信号的进程。
- 暂停容器后,可以使用 docker unpause 命令来恢复容器内所有进程的执行。
10.2 docker unpause
功能:命令用于恢复之前被 docker pause 暂停的容器中的所有进程
docker unpause CONTAINER [CONTAINER...]
参数说明:
- CONTAINER:要恢复的容器的名称或ID。
示例:
# 恢复名为 my_redis 的容器
docker unpause my_redis
# 恢复多个容器
docker unpause my_redis1 my_redis2 my_redis3
11.最后
感谢大家,请大家多多支持!
原文地址:https://blog.csdn.net/ddf128/article/details/142825675
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!