Docker 启动和停止的精准掌舵:操控指南

Docker 启动和停止的精准掌舵:操控指南

Docker是一个开源的应用容器引擎,基于Go语言开发,能够让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker容器相互之间不会有任何接口,容器的开销性能极低。本文将详细介绍Docker的启动和停止操作,帮助用户精准掌舵Docker容器的生命周期。

一、Docker安装与基础命令

在启动Docker之前,需要确保已经安装了Docker。可以通过以下命令检查Docker是否已经安装:

bash 复制代码
docker --version

如果已经安装了Docker,会返回Docker的版本号;如果没有安装,则需要先进行安装。在不同的操作系统上,安装Docker的方法可能略有不同。这里以在Ubuntu操作系统上安装Docker为例:

  1. 更新软件包:
bash 复制代码
sudo apt-get update
  1. 安装Docker:
bash 复制代码
sudo apt-get install docker-ce
  1. 验证Docker是否安装成功:
bash 复制代码
sudo docker run hello-world

如果能成功运行hello-world容器,则说明Docker安装成功。

Docker的基础命令包括:

  • docker --version:查看Docker版本信息。
  • docker info:查看Docker系统、镜像、容器数等信息。
  • docker --help:查看Docker帮助手册。
二、Docker镜像管理

Docker镜像是创建容器的基础。在使用Docker启动服务之前,首先需要有一个Docker镜像。

  1. 查看镜像
bash 复制代码
docker images

该命令会列出本地存储的所有Docker镜像,包括镜像名称、标签、镜像ID、创建日期和大小等信息。

  1. 搜索镜像
bash 复制代码
docker search <镜像名称>

例如,搜索tomcat镜像:

bash 复制代码
docker search tomcat

该命令会列出Docker Hub上所有相关的镜像,包括仓库名称、描述、用户评价、是否官方和是否自动构建等信息。

  1. 拉取镜像
bash 复制代码
docker pull <镜像名称>:<标签>

如果不指定标签,则默认拉取最新版本。例如,拉取tomcat镜像:

bash 复制代码
docker pull tomcat

拉取镜像后,可以通过docker images命令查看已下载的镜像。

  1. 删除镜像
bash 复制代码
docker rmi <镜像ID>

删除多个镜像时,可以使用空格分隔多个镜像ID。强制删除镜像时,可以添加-f参数。删除所有镜像时,可以使用以下命令:

bash 复制代码
docker rmi -f $(docker images -qa)
三、Docker容器管理

Docker容器是Docker镜像的运行实例。通过管理容器,可以启动、停止、删除和进入容器内部等操作。

  1. 查看容器
  • 查看正在运行的容器:
bash 复制代码
docker ps
  • 查看所有容器(包括停止的容器):
bash 复制代码
docker ps -a
  • 查看最后一次运行的容器:
bash 复制代码
docker ps -l
  • 查看停止的容器:
bash 复制代码
docker ps -f status=exited
  1. 创建和启动容器
bash 复制代码
docker run [OPTIONS] IMAGE [COMMAND] [ARGS...]

其中,OPTIONS是可选项,可以指定容器的一些属性,如端口映射、容器名称等;IMAGE是必选项,指定要启动的镜像;COMMAND是可选项,指定容器启动后要执行的命令;ARGS是可选项,指定COMMAND命令的参数。

常用的OPTIONS参数包括:

  • -i:表示运行容器。
  • -t:表示容器启动后会进入其命令行。
  • -d:表示在后台运行容器。
  • -p:表示端口映射。
  • --name:为容器指定一个名称。
  • -v:表示目录映射关系。

例如,启动一个nginx容器:

bash 复制代码
docker run -d -p 8080:80 --name mynginx nginx

该命令会在后台启动一个nginx容器,将主机的8080端口映射到容器的80端口,并将容器命名为mynginx。

  1. 进入容器
bash 复制代码
docker exec -it <容器名称或ID> <命令>

例如,进入mynginx容器并执行ls命令:

bash 复制代码
docker exec -it mynginx ls
  1. 停止容器
bash 复制代码
docker stop <容器名称或ID>

该命令会向容器发送一个SIGTERM信号,请求其优雅地停止。如果容器在指定的超时时间内(默认为10秒)仍未退出,Docker将发送SIGKILL信号强制终止容器。

  1. 启动容器
bash 复制代码
docker start <容器名称或ID>

该命令会启动一个已停止的Docker容器。

  1. 重启容器
bash 复制代码
docker restart <容器名称或ID>

该命令会先停止容器(如果正在运行),然后重新启动容器。

  1. 删除容器
bash 复制代码
docker rm <容器名称或ID>

删除多个容器时,可以使用空格分隔多个容器名称或ID。强制删除容器时,可以添加-f参数。删除所有容器(包括停止的容器)时,可以使用以下命令:

bash 复制代码
docker rm -f $(docker ps -aq)
四、Docker Compose管理

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过Docker Compose,可以使用YAML文件来配置应用程序所需的所有服务,并使用单个命令创建和启动所有服务。

  1. 停止所有Compose服务
bash 复制代码
docker-compose down

该命令会停止并删除由Compose管理的所有容器、网络和卷。

  1. 仅停止容器
bash 复制代码
docker-compose stop

该命令会停止服务容器,但不会删除它们或相关的网络和卷。

  1. 删除所有Compose容器、网络和卷
bash 复制代码
docker-compose down -v

-v标志会删除与服务关联的所有卷,释放更多的存储空间。

五、Docker资源清理

除了删除容器外,还可以使用Docker的清理命令来释放其他未使用的资源,如镜像、网络和卷。

  1. 删除未使用的镜像
bash 复制代码
docker image prune -a

-a标志会删除所有未使用的镜像,而不仅仅是dangling镜像。

  1. 删除未使用的网络
bash 复制代码
docker network prune
  1. 删除未使用的卷
bash 复制代码
docker volume prune
  1. 一次性清理所有未使用的资源
bash 复制代码
docker system prune -a --volumes

该命令会删除所有未使用的容器、网络、镜像和卷,--volumes选项会包括未使用的卷。

六、总结

Docker的启动和停止操作是Docker管理的核心部分。通过本文的介绍,读者可以了解Docker的安装、镜像管理、容器管理、Docker Compose管理和资源清理等方面的知识。在实际应用中,需要根据具体需求选择合适的命令和参数来管理Docker容器,确保容器的正常启动和停止,避免数据丢失或其他问题的发生。

Docker的灵活性和可移植性使其成为现代应用程序开发和部署的重要工具。掌握Docker的启动和停止操作,可以帮助开发者更加高效地管理和部署应用程序,提高开发效率和部署质量。

相关推荐
极客先躯6 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
ChaITSimpleLove9 小时前
SimpleIdServer 6.0.4 Docker Compose 实战部署指南
运维·docker·容器·身份认证·id-server·simpleidserver
程序喵大人11 小时前
【C++进阶】STL容器与迭代器 - 05 map 和 set 为什么按键保持有序
开发语言·c++·容器·迭代器·stl
风曦Kisaki12 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳12 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
毛驴赶鹿14 小时前
低配置服务器怎么搭建监控?Komari Docker部署与公网访问完整教程
运维·服务器·docker
Chengbei1114 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操16 小时前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操16 小时前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
张忠琳16 小时前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia