1. Docker容器技术基础认知
在开始深入Docker命令之前,我们需要先理解几个关键概念。Docker容器本质上是一个特殊的进程,它通过Linux内核的命名空间(Namespace)和控制组(Cgroup)技术实现了资源隔离。与传统的虚拟机相比,容器更加轻量级,因为它们共享宿主机的操作系统内核。
重要提示:容器内无法直接使用systemctl等系统管理命令,这是因为容器没有完整的init系统。如果你需要在容器内管理服务,可以考虑使用supervisord等进程管理工具。
容器与虚拟机的核心差异体现在以下几个方面:
- 资源占用:容器通常只需要几MB到几百MB的空间,而虚拟机需要完整的操作系统镜像
- 启动速度:容器可以在毫秒级启动,而虚拟机通常需要数秒到数十秒
- 性能损耗:容器几乎没有性能损耗,而虚拟机存在一定的性能开销
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker命令体系概览
Docker命令采用docker [command]的统一格式,主要分为以下几大类:
2.1 容器生命周期管理
docker run:创建并启动容器docker start/stop/restart:启动/停止/重启容器docker pause/unpause:暂停/恢复容器docker rm:删除容器
2.2 容器操作与监控
docker exec:在运行中的容器内执行命令docker logs:查看容器日志docker inspect:查看容器详细信息docker stats:监控容器资源使用情况
2.3 镜像管理
docker pull:从仓库拉取镜像docker build:构建镜像docker push:推送镜像到仓库docker rmi:删除镜像
3. 镜像基础操作详解
3.1 镜像拉取与搜索
拉取镜像的基本命令格式:
bash复制docker pull [OPTIONS] NAME[:TAG|@DIGEST]
实际示例:
bash复制docker pull centos
输出示例:
code复制Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
常用参数说明:
--all-tags:下载镜像的所有版本(慎用,会下载大量数据)--platform:指定平台架构(如linux/arm64)
镜像名称的完整格式为[仓库地址/][命名空间/]镜像名称[:标签]。例如:
nginx:Docker Hub官方镜像rancher/hello-world:Docker Hub上rancher命名空间的镜像docker-0.unsee.tech/rancher/hello-world:指定仓库地址的镜像
3.2 镜像搜索技巧
搜索镜像的命令格式:
bash复制docker search [OPTIONS] TERM
实用示例:
bash复制docker search --filter=is-official=true nginx
docker search --filter=stars=3000 hello-world
国内用户注意:docker search命令不受镜像加速器影响,会直接连接Docker Hub。如果遇到403错误,可以考虑:
- 使用国内镜像源前缀(如
docker search docker-0.unsee.tech/hello-world)- 直接访问Docker Hub官网进行搜索
3.3 镜像查看与管理
查看本地镜像:
bash复制docker images
输出示例:
code复制REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 14 months ago 231MB
常用参数:
--digests:显示镜像摘要--no-trunc:显示完整的镜像ID--filter:按条件过滤(如dangling=true查找悬空镜像)
删除镜像:
bash复制docker rmi IMAGE_ID
强制删除正在被容器使用的镜像:
bash复制docker rmi -f IMAGE_ID
4. 容器生命周期管理
4.1 容器创建与启动
基础运行命令:
bash复制docker run -it --name mycentos centos
参数说明:
-i:保持STDIN打开-t:分配伪终端--name:指定容器名称
经验分享:
-i和-t通常一起使用,单独使用可能导致终端无法正常交互。
4.2 守护进程模式
以后台方式运行容器:
bash复制docker run -d centos /bin/sh -c "while true; do echo running; sleep 10; done"
关键注意事项:
- 必须提供持久运行的命令,否则容器会立即退出
- 可以结合
-itd参数实现交互式后台运行
4.3 特权模式容器
创建特权容器:
bash复制docker run -d --privileged=true centos:7.8.2003 /usr/sbin/init
进入特权容器:
bash复制docker exec -it CONTAINER_ID /bin/bash
安全提示:特权容器拥有几乎所有的宿主机能力,仅应在必要时使用,且必须采用守护进程方式创建。
5. 容器日常操作
5.1 容器状态查看
查看运行中的容器:
bash复制docker ps
查看所有容器(包括停止的):
bash复制docker ps -a
实用参数:
-n 3:显示最近创建的3个容器-l:显示最新创建的容器--filter "status=exited":按状态过滤
5.2 容器启停与删除
停止容器:
bash复制docker stop CONTAINER_ID
强制停止:
bash复制docker kill CONTAINER_ID
启动已停止的容器:
bash复制docker start CONTAINER_ID
删除容器:
bash复制docker rm CONTAINER_ID
批量删除停止的容器:
bash复制docker rm $(docker ps -aq)
5.3 容器进入方式对比
安全方式(推荐):
bash复制docker exec -it CONTAINER_ID /bin/bash
风险方式(慎用):
bash复制docker attach CONTAINER_ID
关键区别:exec创建新的会话进程,退出不影响容器;attach附加到现有进程,退出可能导致容器停止。
6. 容器信息查看与监控
6.1 容器详细信息
查看容器元数据:
bash复制docker inspect CONTAINER_ID
获取特定信息(如IP地址):
bash复制docker inspect -f '{{.NetworkSettings.IPAddress}}' CONTAINER_ID
6.2 资源监控
实时监控:
bash复制docker stats CONTAINER_ID
单次查看:
bash复制docker stats --no-stream CONTAINER_ID
输出示例:
code复制CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
6b00d3f5b77c mycentos 0.00% 1.055MiB / 7.777GiB 0.01% 656B / 0B 0B / 0B 2
7. 高级容器操作
7.1 容器挂起与恢复
暂停容器:
bash复制docker pause CONTAINER_ID
恢复容器:
bash复制docker unpause CONTAINER_ID
7.2 日志查看
查看容器日志:
bash复制docker logs CONTAINER_ID
实时跟踪日志:
bash复制docker logs -f CONTAINER_ID
重要说明:docker logs只能捕获发送到stdout和stderr的输出,如果应用将日志写入文件,需要使用其他方式查看。
7.3 文件拷贝
宿主机到容器:
bash复制docker cp /host/path CONTAINER_ID:/container/path
容器到宿主机:
bash复制docker cp CONTAINER_ID:/container/path /host/path
8. 镜像导入导出
8.1 镜像导出
导出为tar包:
bash复制docker save -o centos.tar centos
多镜像打包:
bash复制docker save -o images.tar ubuntu:20.04 nginx:latest
压缩导出:
bash复制docker save centos | gzip > centos.tar.gz
8.2 镜像导入
从tar包导入:
bash复制docker load -i centos.tar
解压后导入:
bash复制gunzip -c centos.tar.gz | docker load
9. 系统清理与维护
9.1 资源清理
删除悬空镜像:
bash复制docker image prune
删除所有未使用镜像:
bash复制docker image prune -a
清理停止的容器:
bash复制docker container prune
全面清理:
bash复制docker system prune
9.2 登录与登出
登录Docker Hub:
bash复制docker login
登录私有仓库:
bash复制docker login registry.example.com
安全登录(避免密码出现在历史记录):
bash复制echo $PASSWORD | docker login --username $USERNAME --password-stdin
登出:
bash复制docker logout
10. 实战经验与避坑指南
-
容器自动退出问题:使用
-d参数时,确保提供持久运行的命令,否则容器会立即退出。可以通过docker logs查看退出原因。 -
终端无法交互问题:总是同时使用
-i和-t参数,单独使用可能导致终端无法正常响应。 -
特权容器注意事项:
- 必须使用守护进程模式运行
- 必须通过
exec方式进入 - 避免在生产环境滥用,存在安全风险
-
镜像拉取加速:国内用户可以通过配置镜像加速器提升下载速度,在
/etc/docker/daemon.json中添加:
json复制{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
- 资源限制建议:对于生产环境容器,建议设置合理的资源限制:
bash复制docker run -d --memory=1g --cpus=1.5 myapp
-
数据持久化方案:重要数据应使用volume或bind mount实现持久化,避免存储在容器可写层。
-
容器网络配置:默认的bridge网络适合开发环境,生产环境建议使用自定义网络或host网络(根据安全需求)。
-
镜像构建优化:
- 使用
.dockerignore文件减少构建上下文 - 多阶段构建减小镜像体积
- 合理安排指令顺序,利用缓存机制
- 使用
通过掌握这些Docker命令和实战技巧,你可以更高效地使用容器技术。记住,理解每个命令背后的原理比单纯记忆命令更重要,这能帮助你在遇到问题时快速找到解决方案。
