一、常用 Docker 命令解析

|
命令 |
释义 |
|
docker pull |
从远程仓库拉取镜像到本地 |
|
docker images |
查看所有本地镜像 |
|
docker build |
基于Dockerfile构建自定义镜像 |
|
docker run |
创建并运行容器 |
|
docker ps |
查看当前容器运行状态 |
|
docker stop |
停止容器 |
|
docker exec |
执行命令进入容器内部 |
|
docker rmi |
删除本地镜像 |
|
docker save |
将镜像保存为压缩文件 |
|
docker load |
从压缩文件加载镜像 |
|
docker push |
将镜像推送到远程仓库 |
|
docker start |
启动已停止的容器 |
|
docker rm |
删除容器 |
|
docker logs |
查看容器运行日志 |
(一)镜像管理:掌控 Docker 的 “原材料”
镜像是 Docker 的 “模板”,容器是镜像的 “运行实例”。先学会管理镜像,才能后续创建容器。以下 7 个命令,覆盖镜像的拉取、查看、删除、构建、备份和推送全流程。
1. docker pull:从远程仓库拉取镜像
作用:从 Docker Hub(或其他远程仓库)下载镜像到本地,是使用镜像的第一步。
语法:docker pull [镜像名]:[标签](标签不写默认拉取latest最新版)
示例:拉取官方的 Nginx 镜像(常用作 Web 服务器)
# 拉取最新版Nginx镜像
docker pull nginx
# 拉取指定版本(如1.25版)的Nginx镜像
docker pull nginx:1.25
2. docker images:查看本地所有镜像
作用:列出电脑上已下载的所有镜像,包含镜像 ID、大小、创建时间等信息。
语法:docker images(可加-q只显示镜像 ID,方便后续操作)
示例:查看本地镜像列表
# 查看所有本地镜像
docker images
# 只显示所有镜像的ID(删除镜像时常用)
docker images -q
3. docker rmi:删除本地无用镜像
作用:删除本地不需要的镜像,释放磁盘空间(注意:删除前需先停止并删除依赖该镜像的容器)。
语法:docker rmi [镜像ID/镜像名:标签](加-f可强制删除)
示例:删除本地的旧版 Nginx 镜像
# 通过镜像名删除(假设要删除nginx:1.24)
docker rmi nginx:1.24
# 通过镜像ID删除(镜像ID可从docker images查看,只需写前3位即可)
docker rmi 847
# 强制删除正在被容器使用的镜像(谨慎使用)
docker rmi -f nginx:1.24
4. docker build:基于 Dockerfile 构建自定义镜像
作用:如果官方镜像满足不了需求(列如需要预装软件),可以通过 Dockerfile 文件构建自己的专属镜像。
语法:docker build -t [自定义镜像名]:[标签] [Dockerfile所在目录](-t用于给镜像打标签)
示例:在当前目录下,基于 Dockerfile 构建一个名为 “my-nginx” 的镜像
# 在当前目录(.代表当前目录)构建镜像,标签为v1.0
docker build -t my-nginx:v1.0 .
# 提示:构建前需在目录下创建Dockerfile文件,
# 列如给 Nginx 预装 vim 的 Dockerfile 内容:
FROM nginx:1.25
RUN apt-get update && apt-get install -y vim
5. docker save:将镜像保存为压缩文件(备份)
作用:把本地镜像打包成.tar压缩文件,方便拷贝到其他电脑(列如没有网络的环境)。
语法:docker save -o [输出文件名.tar] [镜像名:标签](-o指定输出文件)
示例:将 “my-nginx:v1.0” 镜像保存为 “my-nginx-backup.tar”
docker save -o my-nginx-backup.tar my-nginx:v1.0
6. docker load:从压缩文件加载镜像(恢复)
作用:把docker save保存的.tar文件,恢复成本地镜像。
语法:docker load -i [压缩文件名.tar](-i指定输入文件)
示例:从 “my-nginx-backup.tar” 加载镜像
docker load -i my-nginx-backup.tar
# 加载后用docker images查看,就能看到恢复的镜像
7. docker push:将自定义镜像推送到远程仓库
作用:把本地构建的镜像推送到 Docker Hub(或公司私有仓库),方便团队共享或生产环境使用。
语法:docker push [仓库地址/镜像名]:[标签](推送到 Docker Hub 需先登录:docker login)
示例:将 “my-nginx:v1.0” 推送到自己的 Docker Hub 账号(假设账号名是 “dev 张三”)
# 先给镜像打标签(格式:账号名/镜像名:标签)
docker tag my-nginx:v1.0 dev张三/my-nginx:v1.0
# 登录Docker Hub(按提示输入用户名和密码)
docker login
# 推送镜像
docker push dev张三/my-nginx:v1.0
(二)容器管理:让镜像 “跑起来”
学会管理镜像后,下一步就是创建和操作容器。以下 7 个命令,覆盖容器的创建、启动、停止、查看、删除、日志查看和进入容器的全流程。
8. docker run:创建并运行容器(最核心命令)
作用:这是 Docker 最常用的命令之一,一次性完成 “创建容器 + 启动容器” 两个操作,支持多种参数配置(如端口映射、目录挂载等)。
语法:docker run [参数] [镜像名:标签]
常用参数:
-d:后台运行容器(守护模式,不会占用终端);
-p [主机端口]:[容器端口]:端口映射(把主机的端口指向容器的端口,外部才能访问容器服务);
–name [容器名]:给容器起个自定义名字(方便后续操作);
-v [主机目录]:[容器目录]:目录挂载(把主机的文件夹和容器的文件夹关联,实现数据共享)。
示例 1:启动一个后台运行的 Nginx 容器,映射主机 80 端口到容器 80 端口
# --name nginx-web:给容器起名叫nginx-web
# -d:后台运行
# -p 80:80:主机80端口映射到容器80端口
docker run --name nginx-web -d -p 80:80 nginx
# 启动后,访问主机IP:80就能看到Nginx默认页面
示例 2:启动 MySQL 容器,挂载本地目录保存数据
# -e MYSQL_ROOT_PASSWORD=123456:设置MySQL root用户密码为123456
# -v /my/mysql/data:/var/lib/mysql:把主机的/my/mysql/data目录挂载到容器的/var/lib/mysql(MySQL数据目录)
docker run --name mysql-db -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /my/mysql/data:/var/lib/mysql mysql:8.0
9. docker stop:停止正在运行的容器
作用:优雅停止容器(相当于 “关机”),不会删除容器,后续可重新启动。
语法:docker stop [容器名/容器ID]
示例:停止名为 “nginx-web” 的容器
docker stop nginx-web
# 也可以用容器ID停止(容器ID可从docker ps查看)
docker stop 7f3
10. docker start:启动已停止的容器
作用:启动之前停止的容器(相当于 “开机”),容器的配置和数据会保留。
语法:docker start [容器名/容器ID]
示例:启动之前停止的 “nginx-web” 容器
docker start nginx-web
11. docker ps:查看容器运行状态
作用:查看当前容器的状态,默认只显示 “正在运行” 的容器;加参数可查看所有容器。
语法:
docker ps:查看正在运行的容器;
docker ps -a:查看所有容器(包括已停止的);
docker ps -q:只显示正在运行的容器 ID。
示例:查看所有容器的状态
docker ps -a
# 输出结果会包含容器ID、名字、状态(Up代表运行中,Exited代表已停止)等信息
12. docker rm:删除无用容器
作用:删除已停止的容器(正在运行的容器无法直接删除,需先docker stop),释放资源。
语法:docker rm [容器名/容器ID](加-f可强制删除正在运行的容器)
示例:删除已停止的 “nginx-web” 容器
# 先停止容器(如果容器正在运行)
docker stop nginx-web
# 再删除容器
docker rm nginx-web
# 强制删除正在运行的容器(谨慎使用,会直接终止容器)
docker rm -f nginx-web
13. docker logs:查看容器运行日志
作用:查看容器的运行日志,排查问题时超级有用(列如容器启动失败、应用报错等)。
# 语法:
docker logs [容器名/容器ID]:查看所有日志;
docker logs -f [容器名/容器ID]:实时查看日志(类似 “tail -f”,按 Ctrl+C 退出);
docker logs --tail 100 [容器名/容器ID]:查看最近 100 条日志。
示例:实时查看 “nginx-web” 容器的访问日志
docker logs -f nginx-web
# 此时访问主机IP:80,终端会实时显示Nginx的访问记录
14. docker exec:进入容器内部执行命令
作用:当需要在运行中的容器里操作时(列如查看文件、修改配置),用这个命令进入容器内部。
语法:docker exec -it [容器名/容器ID] [命令](-it是 “交互式终端” 的意思,必须加,否则无法正常输入命令)
常用场景:进入容器的 bash 终端(类似 “登录” 容器)
示例:进入 “nginx-web” 容器的 bash 终端,查看 Nginx 配置文件
# 进入容器的bash终端
docker exec -it nginx-web /bin/bash
# 进入后,就可以在容器内部执行命令了,列如查看Nginx配置
cat /etc/nginx/nginx.conf
# 退出容器终端,输入exit即可
exit
二、Docker 命令实战演练
(1)搭建 Web 应用
理论知识掌握得再扎实,也得通过实际操作来加深理解和巩固 。下面,我们通过一个具体的例子来看看如何使用 Docker 命令搭建一个简单的 Web 应用。
我们选择使用 Nginx 作为 Web 服务器,Nginx 是一款高性能的 HTTP 和反向代理服务器,以其高效、稳定和资源占用低而闻名。第一,我们需要拉取 Nginx 镜像。在终端中执行以下命令:
$ docker pull nginx
这个命令会从 Docker 官方镜像仓库中下载最新版的 Nginx 镜像。下载完成后,我们可以使用docker images命令查看本地镜像列表,确认 Nginx 镜像是否已经成功拉取。
接下来,我们基于这个镜像创建并启动一个容器。执行以下命令:
$ docker run -d -p 8080:80 --name my-web-app nginx
这里,-d参数表明后来台模式运行容器,让容器在后台默默工作,不占用我们的终端;-p 8080:80表明将容器的 80 端口映射到主机的 8080 端口,这样我们就可以通过访问http://localhost:8080来访问容器内运行的 Nginx 服务;–name my-web-app为容器指定了一个名称,方便我们后续管理和识别;最后的nginx表明使用的镜像。
稍等片刻,当容器启动成功后,打开浏览器,在地址栏中输入http://localhost:8080,如果一切顺利,你将看到 Nginx 的欢迎页面,这就说明我们的 Web 应用已经成功部署啦!通过这几个简单的 Docker 命令,我们就完成了从获取镜像到启动 Web 应用的全过程,是不是很方便快捷呢?
(2)数据库部署
除了 Web 应用,数据库的部署也是软件开发中常见的任务 。下面,我们以 MySQL 数据库为例,展示如何使用 Docker 命令来部署一个数据库容器。
第一,拉取 MySQL 镜像。在终端中执行:
$ docker pull mysql:5.7
这里我们指定了拉取 MySQL 5.7 版本的镜像,如果你需要其他版本,修改标签即可。
拉取镜像后,我们来创建并启动 MySQL 容器。在启动容器时,需要设置一些参数,如数据库的 root 密码、数据卷挂载等。执行以下命令:
$ docker run -d -p 3306:3306 --name my-mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
mysql:5.7
在这个命令中,-d和-p参数的作用与前面搭建 Web 应用时一样;–name my-mysql为容器命名;-v /mydata/mysql/data:/var/lib/mysql将主机的/mydata/mysql/data目录挂载到容器的/var/lib/mysql目录,用于持久化存储数据库数据,即使容器被删除,数据也不会丢失;-v /mydata/mysql/conf:/etc/mysql将主机的/mydata/mysql/conf目录挂载到容器的/etc/mysql目录,方便我们对 MySQL 的配置文件进行修改;-e MYSQL_ROOT_PASSWORD=root设置 MySQL 的 root 用户密码为root。
容器启动后,我们就可以使用数据库管理工具(如 Navicat)连接到这个 MySQL 数据库了。在连接时,主机地址填写localhost,端口为3306,用户名是root,密码是我们刚才设置的root。通过这样的方式,利用 Docker 命令轻松地完成了 MySQL 数据库的部署,而且具备良好的数据持久化和配置灵活性。
三、常见问题与解决方法
在使用命令时,新手常遇到以下问题,这里直接给解决方案:
问题 1:执行docker rmi删除镜像时,提示 “image is being used by stopped container”
缘由:有容器依赖这个镜像(即使容器已停止)。
解决:先删除依赖的容器,再删除镜像:
# 查看依赖该镜像的容器ID(替换[镜像ID])
docker ps -a | grep [镜像ID]
# 删除该容器(替换[容器ID])
docker rm [容器ID]
# 再删除镜像
docker rmi [镜像ID]
问题 2:执行docker run后,容器启动后立即退出(docker ps看不到)
缘由:容器运行的命令执行完就结束了(列如docker run ubuntu,默认执行bash,但没加-it,执行完就退出)。
解决:需要交互式运行,或确保容器有持续运行的进程(如 Nginx、MySQL):
# 交互式运行ubuntu容器(不会立即退出)
docker run -it ubuntu /bin/bash
问题 3:执行docker exec进入容器时,提示 “exec: “/bin/bash”: stat /bin/bash: no such file or directory”
缘由:部分精简镜像(如 Alpine 系统的镜像)没有/bin/bash,只有/bin/sh。
解决:用/bin/sh取代:
docker exec -it [容器名] /bin/sh
问题 4:镜像拉取失败,在拉取镜像时,可能会遇到拉取失败的情况,提示 “Error response from daemon: Get
https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io” 等错误信息。
缘由:这一般是由于网络问题导致无法访问 Docker 镜像仓库。
解决:检查网络连接,确保网络正常;也可以尝试更换镜像源,列如使用国内的镜像加速器,如阿里云镜像加速器、网易云镜像加速器等。具体操作是在/etc/docker/daemon.json文件中添加镜像加速器地址,例如:
{
"registry-mirrors": ["https://你的镜像加速器地址"]
}
添加完成后,重启 Docker 服务即可生效。
问题 5:容器启动报错,有时候容器启动时会报错,提示 “Error response from daemon: oci runtime error: container_linux.go: starting container process caused “exec:”/bin/bash”: executable file not found in $PATH”” 等错误。
缘由:这可能是由于镜像自身存在问题,或者 Docker 引擎版本较低。
解决:检查镜像是否完整、正确,尝试重新拉取镜像;如果是 Docker 引擎版本问题,可以升级 Docker 版本到最新稳定版。
问题 6:容器无法访问宿主机网络,在容器化应用中,可能会出现容器无法访问宿主机网络的情况,导致容器内的应用无法与外部通信。
缘由:由于网络配置错误引起的。
解决:检查容器的网络配置,确保使用了正确的网络模式,如bridge模式;检查端口映射是否正确,避免端口冲突。可以使用docker network inspect命令查看网络详细信息,使用netstat或lsof命令检查端口占用情况 。
问题 7:权限问题,当执行某些 Docker 命令时,可能会遇到权限不足的问题,提示 “Got permission denied while trying to connect to the Docker daemon socket at
unix:///var/run/docker.sock”。
缘由:当前用户没有足够的权限访问 Docker 守护进程。
解决:将当前用户添加到docker用户组中,执行命令然后重新登录即可
usermod -aG docker ${USER}
四、总结
通过本文的介绍,信任大家对 Docker 常见命令已经有了较为深入的了解,从镜像管理到容器管理,从网络配置到数据持久化,这些命令是我们使用 Docker 的基础,也是开启容器化世界大门的钥匙 。
在实际应用中,Docker 的强劲之处不仅仅在于这些基础命令,它还与容器编排工具(如 Kubernetes)、持续集成 / 持续部署(CI/CD)流程等紧密结合,构建出更加高效、灵活的软件开发和运维体系。例如,在大型互联网公司的微服务架构中,Docker 容器被广泛应用于各个微服务组件的部署,通过 Kubernetes 进行统一的编排和管理,实现了服务的自动扩缩容、故障自愈等高级功能,大大提高了系统的稳定性和可靠性 。

















暂无评论内容