2025-03-13 23:22:40

Docker 的由来

在日常开发中,项目要经历开发、测试、上线多个阶段。

每到一个新环境,都需要重新安装依赖、配置服务、校验版本。最繁琐的是,环境一旦不一致,就很容易:

  • 开发环境没问题
  • 测试环境有问题
  • 线上环境又是另一套问题

但问题不一定出在代码本身,很多时候是环境差异导致的。

为了减少重复搭建环境的成本,并尽量保证各个阶段运行结果一致,Docker 应运而生。

什么是 Docker

Docker 是一个用于创建、分发和运行容器的开源平台。

它可以将应用程序和运行所需的依赖、配置一起打包,确保程序在不同环境里尽量保持一致的表现。

优势:

  • 降低环境差异带来的问题
  • 提升部署和迁移效率

相比传统虚拟机,容器更轻量,启动速度也通常更快,所以很适合用于开发、测试和部署场景。

Docker 的核心概念

  • Dockerfile 是构建镜像的描述文件
  • Image 是打包后的运行模板
  • Container 是镜像运行后的实例

如果把它类比为开发流程:

  • Dockerfile 类似源码
  • docker build 类似构建过程
  • Image 类似构建产物
  • docker run 类似启动程序
  • 启动后的结果就是 Container

使用流程大致是:

  1. 编写 Dockerfile
  2. 使用 docker build 构建 Image
  3. 使用 docker run 启动 Container

常用命令

命令都省略 docker 前缀。

  • version: 查看 Docker 是否安装,以及当前版本信息。
  • info:查看 Docker 的运行状态和基础配置信息。
  • images:列出本机已有的镜像。
  • search:搜索远程仓库中的镜像
    docker search nginx
    

    其中 OFFICIAL 表示官方维护的镜像。
  • pull:从远程仓库拉取镜像到本地。
  • ps:查看当前正在运行的容器。
    如果加上 -a,则会显示所有容器,包括已经停止的容器。
  • logs:查看容器的输出日志。
  • build:根据 Dockerfile 构建镜像
    docker build -t my-app .
    

    其中 -t 用于指定镜像名称和标签。
  • run:基于镜像启动一个容器
    docker run -d -p 8080:80 --name my-nginx nginx
    
  • -d 后台运行
  • -p 端口映射
  • --name 指定容器名称
  • exec:进入一个正在运行的容器,一般用于排查问题:
    docker exec -it my-nginx /bin/sh
    

    如果安装了 bash,也可以换成 /bin/bash
  • stop:停止一个正在运行的容器:
  • start:启动一个已经停止的容器: