解锁Docker:从入门到精通的命令指南

一、常用 Docker 命令解析

解锁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 进行统一的编排和管理,实现了服务的自动扩缩容、故障自愈等高级功能,大大提高了系统的稳定性和可靠性 。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
荆棘鸟号飞行员的头像 - 宋马
评论 共1条

请登录后发表评论

    暂无评论内容