Skip to main content

Docker 是什么

Docker 是一个容器化平台。它把应用和依赖打包成标准化的单元,称为容器(Container)。容器可以在任何安装了 Docker 的机器上以相同方式运行。 Docker 解决了经典的「在我机器上能跑」问题。开发、测试、生产环境使用同一个镜像,行为完全一致。

容器与虚拟机对比

容器和虚拟机(Virtual Machine)都提供隔离的运行环境,但实现方式完全不同。
容器共享宿主机内核,所以 Linux 容器不能直接运行在 Windows 或 macOS 内核上。Docker Desktop 通过内置轻量虚拟机解决这一问题。

核心概念:镜像、容器、仓库

理解 Docker 只需要先理解三个概念。
  • 镜像 Image:只读的应用打包模板。包含代码、运行时、依赖库和配置。
  • 容器 Container:镜像的运行实例。可以被启动、停止、删除。
  • 仓库 Registry:镜像的存储和分发中心。Docker Hub 是最常用的公共仓库。
三者的关系可以类比:镜像是类(Class),容器是对象实例,仓库是代码仓库(类似 GitHub)。 典型的工作流是:从仓库拉取镜像(docker pull),用镜像启动容器(docker run),本地构建镜像后推送回仓库(docker push)。

安装 Docker

macOS

macOS 上推荐安装 Docker Desktop。可以从官网下载安装包,也可以用 Homebrew:
安装后启动 Docker Desktop 应用,等待菜单栏图标变为稳定状态。

Linux

Linux 可以使用官方提供的一键安装脚本:
安装完成后,把当前用户加入 docker 用户组,避免每次都用 sudo:
重新登录后生效。

验证安装

无论哪个平台,都用同一条命令验证:
能同时看到 Client 和 Server 的版本信息,说明安装成功。
如果 docker version 只显示 Client 部分并报错,说明 Docker 守护进程没有启动。macOS 上打开 Docker Desktop 即可,Linux 上执行 sudo systemctl start docker

第一个容器

下面用 Nginx 镜像完整走一遍容器的生命周期。
1

启动容器

执行以下命令,以后台模式启动一个 Nginx 容器,并把宿主机的 80 端口映射到容器的 80 端口:
首次运行会自动从 Docker Hub 拉取 nginx 镜像。
2

浏览器访问

打开浏览器访问 http://localhost,能看到 Nginx 的欢迎页面,说明容器正常运行。
3

查看运行中的容器

输出中可以看到容器 ID、镜像名、端口映射和容器名称 web
4

停止并删除容器

先停止,再删除。容器删除后,容器内的数据也随之消失。
容器是临时的。删除容器会丢失容器内产生的所有数据。需要持久化的数据请使用数据卷,参见Docker 存储

常用命令速查表

记不住参数时随时使用 --help,例如 docker run --help。Docker 的帮助信息非常完整。

延伸阅读