前言
在云计算和软件开发领域,Docker就像“轻量级的数字集装箱”,能把应用和依赖打包成标准化单元,解决“在我电脑上能跑,在你电脑上跑不起来”的痛点。今天就来分享一下Docker的基础概念和一些实操命令。
一、Docker是什么?
1. Docker——一个“轻量级的数字集装箱”
Docker是一款开源的容器化平台,简单说就是“把应用程序和它需要的环境(比如库、配置、依赖)打包在一起”,形成一个独立的“容器”。就像海运中的集装箱,不管用什么船运,里面的货物(应用)和包装(环境)都不变,能在任何支持Docker的平台上稳定运行。
和传统虚拟机(比如VMware)不同,Docker容器不用模拟完整的操作系统,只共享主机的内核,启动快、占用资源少——一个主机能跑上百个Docker容器,却很难同时跑几十个虚拟机。
2. Docker有什么用?
- 环境一致性:开发时在自己电脑上配置好环境,打包成容器后,测试、生产环境直接用这个容器,不用再反复调试“为什么这里报错”,避免“我这能跑”,“你那跑不了”的尴尬;
- 资源高效利用:容器启动快(秒级启动)、占用内存少,比虚拟机更轻量化,适合需要大量部署应用的场景(比如电商平台的多服务架构);
- 简化部署与迁移:一个容器可以轻松部署到Linux、Windows、macOS,甚至云服务器上,迁移时不用重新配置环境,真正实现“一次打包,到处运行”。
3. Docker适用的典型场景
- 软件开发与测试:开发团队统一使用Docker容器,确保每个人的开发环境一致,测试时直接用开发环境的容器,减少环境差异导致的bug;
- 微服务架构部署:比如电商平台的“用户服务”“订单服务”“支付服务”,每个服务打包成一个容器,独立部署、升级,某一个服务故障不会影响整体;
- 持续集成/持续部署(CI/CD):在自动化流程中,用Docker容器打包应用,自动完成测试、构建、部署,提高开发效率;
- 单机多应用部署:个人开发者在一台服务器上,用Docker分别部署博客、小程序后台、数据分析工具,各应用互不干扰,管理更清晰。
二、Docker的基础
在学命令前,先认识Docker的3个核心组件,就像学开车前要知道方向盘、油门、刹车的作用:
- 镜像(Image):容器的“模板”,比如“ubuntu镜像”“nginx镜像”,包含了操作系统或应用的基础文件。用同一个镜像能做出多个相同的容器;
- 容器(Container):镜像运行后的实例,是独立的运行单元。可以启动、停止、删除,每个容器都是隔离的,不会互相影响;
- 仓库(Repository):存放镜像的地方,比如Docker官方仓库(Docker Hub),里面有各种现成的镜像(ubuntu、nginx、mysql等),可以直接下载使用,就像“软件应用商店”。
三、Docker容器常用命令
1. 查看Docker命令帮助
Docker客户端命令很丰富,想了解某个命令的用法,用docker command --help就能查看详细说明,比如想知道docker stats(查看容器资源占用)怎么用:
$ docker stats --help执行后会显示docker stats的参数、用法示例,遇到不懂的命令,这招总能帮上忙。

2. 下载镜像:获取容器“模板”
如果本地没有需要的镜像(比如ubuntu镜像),用docker pull命令从仓库下载,就像从应用商店下载软件:
$ docker pull ubuntu命令执行后,会自动下载最新版本的ubuntu镜像,下载完成后,就能用这个镜像启动容器了。

3. 启动容器:运行你的应用
启动容器的核心命令是docker run,根据需求添加参数,常见场景如下:
场景1:交互式进入容器(适合测试)
想启动ubuntu容器,并以命令行模式进入(比如在容器里执行Linux命令),用-it参数(-i是交互式操作,-t是分配终端):
$ docker run -it ubuntu /bin/bash执行后会直接进入ubuntu容器的命令行,此时输入ls(查看目录)、pwd(查看当前路径)等命令,和在真实的ubuntu系统里操作一样。
退出容器:输入exit并回车,容器会停止运行。

场景2:后台运行容器(适合长期服务)
大部分时候,我们希望容器在后台运行(比如部署的nginx服务),用-d参数指定后台模式,再用--name给容器起个好记的名字(比如“ubuntu-test”):
$ docker run -itd --name ubuntu-test ubuntu /bin/bash执行后会返回容器的ID,此时容器在后台运行,不会占用当前终端。

4. 容器管理:启动、停止、重启、查看
查看所有容器(包括已停止的)
想知道当前有哪些容器,用docker ps -a(-a表示“所有”,不加-a只显示运行中的容器):
$ docker ps -a结果会显示容器ID、名字、状态(运行中/已停止)、启动时间等信息。

启动已停止的容器
如果容器不小心停止了(比如用exit退出的交互式容器),用docker start + 容器名/容器ID重启:
# 比如启动名为“ubuntu-test”的容器
$ docker start ubuntu-test停止运行中的容器
用docker stop + 容器名/容器ID停止容器,就像关掉正在运行的软件:
$ docker stop ubuntu-test重启容器
不管容器是运行中还是已停止,用docker restart能直接重启:
$ docker restart ubuntu-test5. 进入后台运行的容器
容器后台运行时,想进入里面操作(比如查看日志、修改配置),有两种方法,推荐用第二种:
方法1:docker attach(退出会停止容器)
$ docker attach ubuntu-test注意:用attach进入后,输入exit退出时,容器会跟着停止,适合临时查看,不适合长期操作。
方法2:docker exec(推荐,退出不影响容器)
用-it参数进入容器的交互式终端,退出时容器仍会后台运行,是更常用的方式:
$ docker exec -it ubuntu-test /bin/bash进入后可以正常执行命令,想退出时输入exit,容器会继续在后台运行。
6. 容器导出与导入:备份与迁移
导出容器为快照文件
想把某个容器备份(比如配置好的ubuntu容器),用docker export导出为tar文件:
# 导出名为“ubuntu-test”的容器,保存为ubuntu1.tar
$ docker export ubuntu-test > ubuntu1.tar导出的tar文件可以拷贝到其他电脑,再导入为镜像。
从快照文件导入为镜像
把备份的tar文件导入,生成新的镜像(比如命名为“test/ubuntu:v1”),后续可以用这个镜像启动新容器:
$ cat ubuntu.tar | docker import - test/ubuntu:v17. 删除容器:清理无用容器
不用的容器可以删除,释放资源,用docker rm命令(-f参数强制删除运行中的容器):
# 强制删除名为“ubuntu-test”的容器
$ docker rm -f ubuntu-test注意:删除容器不会删除镜像,后续还能用镜像启动新容器。
四、常见问题:Docker命令报“权限不足”怎么办?
执行Docker命令时,可能会遇到这样的报错:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied报错原因
Docker进程默认用Unix Socket(而非TCP端口)通信,这个Socket文件属于root用户,普通用户没有访问权限,所以执行docker ps等命令会提示“权限不足”。
2种解决办法
方法1:临时用sudo获取管理员权限
每次执行Docker命令前加sudo,比如:
$ sudo docker ps这种方法简单,但每次都要输sudo,比较麻烦。
方法2:永久解决(推荐)
把当前用户加入“docker用户组”——Docker守护进程启动时,会赋予“docker用户组”访问Socket的权限,加入后普通用户也能执行Docker命令:
# 1. 创建docker用户组(如果已存在会提示,不用管)
sudo groupadd docker
# 2. 把当前登录用户加入docker用户组
sudo gpasswd -a $USER docker
# 3. 更新用户组(让设置立即生效,不用重启电脑)
newgrp docker
# 4. 测试:执行docker ps,不报错就成功了
docker ps五、总结
Docker的核心是“容器化思维”,从“下载镜像→启动容器→管理容器”的实操开始,熟悉命令后再逐步探索更复杂的用法(比如Docker Compose管理多容器、Docker Swarm集群)。
Docker的优势在于“简单、高效、一致”,无论是开发、测试还是部署,用Docker能帮你省去大量环境配置的时间,把精力放在核心业务上。
