前言

在云计算和软件开发领域,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(查看容器资源占用)怎么用:

Bash
$ docker stats --help

执行后会显示docker stats的参数、用法示例,遇到不懂的命令,这招总能帮上忙。

docker1

2. 下载镜像:获取容器“模板”

如果本地没有需要的镜像(比如ubuntu镜像),用docker pull命令从仓库下载,就像从应用商店下载软件:

Bash
$ docker pull ubuntu

命令执行后,会自动下载最新版本的ubuntu镜像,下载完成后,就能用这个镜像启动容器了。

docker2

3. 启动容器:运行你的应用

启动容器的核心命令是docker run,根据需求添加参数,常见场景如下:

场景1:交互式进入容器(适合测试)

想启动ubuntu容器,并以命令行模式进入(比如在容器里执行Linux命令),用-it参数(-i是交互式操作,-t是分配终端):

Bash
$ docker run -it ubuntu /bin/bash

执行后会直接进入ubuntu容器的命令行,此时输入ls(查看目录)、pwd(查看当前路径)等命令,和在真实的ubuntu系统里操作一样。
退出容器:输入exit并回车,容器会停止运行。

docker3

场景2:后台运行容器(适合长期服务)

大部分时候,我们希望容器在后台运行(比如部署的nginx服务),用-d参数指定后台模式,再用--name给容器起个好记的名字(比如“ubuntu-test”):

Bash
$ docker run -itd --name ubuntu-test ubuntu /bin/bash

执行后会返回容器的ID,此时容器在后台运行,不会占用当前终端。

docker4

4. 容器管理:启动、停止、重启、查看

查看所有容器(包括已停止的)

想知道当前有哪些容器,用docker ps -a-a表示“所有”,不加-a只显示运行中的容器):

Bash
$ docker ps -a

结果会显示容器ID、名字、状态(运行中/已停止)、启动时间等信息。

docker5

启动已停止的容器

如果容器不小心停止了(比如用exit退出的交互式容器),用docker start + 容器名/容器ID重启:

Bash
# 比如启动名为“ubuntu-test”的容器
$ docker start ubuntu-test

停止运行中的容器

docker stop + 容器名/容器ID停止容器,就像关掉正在运行的软件:

Bash
$ docker stop ubuntu-test

重启容器

不管容器是运行中还是已停止,用docker restart能直接重启:

Bash
$ docker restart ubuntu-test

5. 进入后台运行的容器

容器后台运行时,想进入里面操作(比如查看日志、修改配置),有两种方法,推荐用第二种:

方法1:docker attach(退出会停止容器)

Bash
$ docker attach ubuntu-test

注意:用attach进入后,输入exit退出时,容器会跟着停止,适合临时查看,不适合长期操作。

方法2:docker exec(推荐,退出不影响容器)

-it参数进入容器的交互式终端,退出时容器仍会后台运行,是更常用的方式:

Bash
$ docker exec -it ubuntu-test /bin/bash

进入后可以正常执行命令,想退出时输入exit,容器会继续在后台运行。

6. 容器导出与导入:备份与迁移

导出容器为快照文件

想把某个容器备份(比如配置好的ubuntu容器),用docker export导出为tar文件:

Bash
# 导出名为“ubuntu-test”的容器,保存为ubuntu1.tar
$ docker export ubuntu-test > ubuntu1.tar

导出的tar文件可以拷贝到其他电脑,再导入为镜像。

从快照文件导入为镜像

把备份的tar文件导入,生成新的镜像(比如命名为“test/ubuntu:v1”),后续可以用这个镜像启动新容器:

Bash
$ cat ubuntu.tar | docker import - test/ubuntu:v1

7. 删除容器:清理无用容器

不用的容器可以删除,释放资源,用docker rm命令(-f参数强制删除运行中的容器):

Bash
# 强制删除名为“ubuntu-test”的容器
$ docker rm -f ubuntu-test

注意:删除容器不会删除镜像,后续还能用镜像启动新容器。

四、常见问题:Docker命令报“权限不足”怎么办?

执行Docker命令时,可能会遇到这样的报错:

Bash
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,比如:

Bash
$ sudo docker ps

这种方法简单,但每次都要输sudo,比较麻烦。

方法2:永久解决(推荐)

把当前用户加入“docker用户组”——Docker守护进程启动时,会赋予“docker用户组”访问Socket的权限,加入后普通用户也能执行Docker命令:

Bash
# 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能帮你省去大量环境配置的时间,把精力放在核心业务上。

博客图片82

By 天海牧歌

东庵每见西庵雪,下涧长流上涧泉。 半夜白云消散后,一轮明月到窗前。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注