Docker 基础

举报
剑指南天 发表于 2026/09/15 18:39:40 2026/09/15
【摘要】 Docker 是一款轻量级的应用打包和运行工具,核心作用就是把程序和它运行所需要的所有环境(比如依赖的软件、配置文件、系统库)打包在一起,形成一个独立的 “容器”。这个容器就像一个密封的 “程序盒子”,不管放到哪台支持 Docker 的机器上(Windows、Linux、macOS),都能直接运行,而且运行效果完全一样。

1.概述

Docker 是一款轻量级的应用打包和运行工具,核心作用就是把程序和它运行所需要的所有环境(比如依赖的软件、配置文件、系统库)打包在一起,形成一个独立的 “容器”。这个容器就像一个密封的 “程序盒子”,不管放到哪台支持 Docker 的机器上(Windows、Linux、macOS),都能直接运行,而且运行效果完全一样。

2. Docker 服务架构

Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。

3. Docker 与传统的虚拟机的比较

对比维度

Docker 容器

传统虚拟机

虚拟化层级

基于操作系统层面,直接共享宿主机内核,没有独立内核

基于硬件层面,需要给每个 VM 装独立的操作系统内核

资源占用

轻量级,只占用应用运行所需的资源,无额外系统开销

重量级,每个 VM 都要分配独立的 CPU、内存、磁盘,还要跑完整 OS,资源浪费多

启动速度

秒级 / 毫秒级启动,直接运行应用进程

分钟级启动,需要先加载完整操作系统

镜像 / 镜像体积

镜像体积小(几十 MB~ 几百 MB),分层存储可复用

镜像体积大(几 GB~ 几十 GB),包含完整 OS,不可复用

隔离性

进程级隔离,隔离性中等,适合应用级隔离

完全隔离,隔离性强,适合系统级隔离(比如不同系统版本)

移植性

一次打包,到处运行,不受底层主机 OS 限制(只要内核兼容)

移植性差,VM 镜像和宿主机虚拟化技术(如 VMware、KVM)强绑定

管理难度

操作简单,命令行 / API 容易自动化,适合 CI/CD

管理复杂,需要专门的虚拟化平台,自动化成本高

适用场景

微服务、持续部署、应用快速迭代、开发测试环境

运行不同操作系统、需要强隔离的场景(如多租户服务器)

4. 关键概念

镜像(Image):一个只读的、打包好的程序运行环境模板,包含了应用程序、依赖的库、配置文件、系统工具等所有运行需要的东西。

容器(Container):是基于镜像创建的、可读写的运行实例,是 Docker 真正跑应用的地方。

仓库(Registry):用来集中存储和分发镜像的地方,相当于镜像的 “云端货架”。

Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。

Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker 守护进程:Docker 服务器端进程,负责支撑 Docker 容器的运行以及镜像的管理。

Docker 数据卷:数据卷是 Docker 专为容器数据持久化、共享设计的独立存储目录 / 文件,它与容器生命周期解耦,独立于容器存在,本质是宿主机上的一个真实目录 / 文件,专门用来存放容器产生 / 需要持久化的数据,避免数据随容器删除而丢失。

Dockerfile:是一个文本文件,在这个文本文件中可以使用 Docker 所提供的一些指令来指定构建镜像的细节,后期就可以使用这个 Dockerfile 文件来构建自定义的镜像。

Docker Compose:是用于定义和运行多容器应用程序的工具。通过 yml 文件定义多容器的 Docker 应用,再通过一条命令根据 yml 文件的定义去创建或管理多容器。

5. Dcoker 命令

5.1 服务类命令

操作描述

对应命令

查看 docker 版本

docker version 或 docker -v

查看 docker 状态

systemctl status docker

启动 docker 服务

systemctl start docker

开机启动 docker 服务

systemctl enable docker

关闭 docker 服务

systemctl stop docker

开机禁用 docker 服务

systemctl disable docker

重启 docker 服务

systemctl restart docker 或 systemctl stop docker && systemctl start docker

查看 docker 帮助

docker --help或docker [子命令] --help(如 docker run --help)

查看 docker 日志

journalctl -u docker或journalctl -u docker -f

5.2 镜像命令

核心功能 标准格式 关键说明

从 Docker Hub 搜索镜像

docker search [选项] <镜像名>

--limit 限制返回结果数量;优先选 OFFICIAL 官方镜像

拉取远程镜像到本地

docker pull [选项] <镜像名:标签>

标签指定版本,无标签默认 latest;可拉取私有仓库镜像(需先登录)

列出本地所有镜像

docker images [选项] [镜像名]

-q 输出镜像 ID,常用于批量操作;-a 显示所有镜像(含中间层)

基于 Dockerfile 构建镜像

docker build -t <镜像名:标签> <构建上下文路径>

-t 指定镜像标签;-f 指定非默认 Dockerfile 路径;. 为构建上下文

从运行 / 停止的容器创建镜像

docker commit [选项] <容器ID/名称> <镜像名:标签>

-a 作者信息;-m 提交说明;适合保存容器当前状态为镜像

删除本地镜像

docker rmi [选项] <镜像名:标签/镜像ID>

需先删除依赖该镜像的容器;-f 强制删除(慎用,可能导致依赖异常)

导出镜像为 tar 包(保留分层和元数据)

docker save -o <归档文件.tar> <镜像名:标签>

支持批量导出多个镜像;导出文件需用 docker load 导入

导入 docker save 导出的镜像包

docker load -i <归档文件.tar>

保留镜像完整分层、标签和元数据;无法修改镜像标签; -q 静默模式,不显示日志

导出容器文件系统为 tar 包(单层快照)

docker export -o <归档文件.tar> <容器ID/名称>

仅导出容器当前文件系统,丢失镜像分层和元数据

导入 docker export 包为新镜像

docker import <归档文件.tar> <镜像名:标签>

生成无分层历史的新镜像;需手动指定标签

为镜像添加新标签(重命名)

docker tag <镜像ID> <新镜像名:标签>

docker tag <原镜像名:标签> 

常用于镜像版本管理或推送私有仓库前重命名

查看镜像的分层构建历史

docker history <镜像名:标签>

显示每一层的构建命令和大小;可排查镜像体积过大原因

查看镜像的详细元数据

docker inspect <镜像名:标签/镜像ID>

输出 JSON 格式数据,包含镜像架构、创建时间、环境变量等

5.3 容器类命令

操作场景 核心命令 核心说明

查看容器

docker ps / docker container ls

列出运行中的容器;-a 显示所有容器(含已停止);-q 仅输出容器 ID

创建容器(不启动)

docker create <镜像名>

基于镜像创建容器但不启动,返回容器 ID(后续用start启动)

启动容器

docker start <容器ID/名称>

启动已创建 / 停止的容器;-i 以交互模式启动

创建并启动容器

docker run <参数> <镜像名>

-d 后台运行,-it 交互模式,-p 端口映射(可以使用多组映射),-P 随机端口,-h 容器所在主机名字 --name 容器的名字

端口映射启动

docker run -d -p <主机端口>:<容器端口> <镜像名>

后台启动容器并映射端口,外界可通过主机端口访问容器服务; -e 配置环境变量

进入运行中容器

docker exec -it <容器ID/名称> <终端>

生产环境首选:进入容器终端且不影响容器运行;退出用exit/Ctrl+P+Q

停止容器

docker stop <容器ID/名称>

优雅停止容器(等待 10 秒保存数据);-t 自定义等待时间(如-t 20)

强制终止容器

docker kill <容器ID/名称>

立即终止容器(发送 SIGKILL 信号),容器无响应 / 卡死时使用

重启容器

docker restart <容器ID/名称>

相当于 “stop+start”,重启运行中的容器(配置修改后生效)

删除容器

docker rm <容器ID/名称>

删除已停止的容器;-f 强制删除运行中的容器(谨慎)

批量删除容器

docker rm -f $(docker ps -aq)

强制删除所有容器(测试环境清理用,生产环境禁止)

查看容器详情

docker inspect <容器ID/名称>

查看容器完整配置(网络、挂载、环境变量等)

查看容器日志

docker logs <容器ID/名称>

查看容器运行日志;-f 实时跟踪日志,--tail 100 查看最后 100 行

复制文件到容器

docker cp <主机文件> <容器ID>:<容器路径>

主机文件复制到容器内(自定义页面 / 配置常用)

复制文件出容器

docker cp <容器ID>:<容器文件> <主机路径>

容器文件复制到主机(备份 / 查看配置常用)

5.4 Docker 常用的命令

5.4.1 查看 Docker 日志

 # 查看最近100行 Docker 日志

journalctl -u docker -n 100

 # 查看指定时间段的 Docker 日志(示例:2026-09-13 到 2026-09-15)

journalctl -u docker --since="2026-09-13 00:00:00" --until="2026-09-15 23:59:59"

 # -f 参数表示实时跟踪日志

journalctl -u docker -f

5.4.2 进入容器操作

 # 进入到容器中同时打开一个shell窗口

 # nsenter 进入容器

5.4.3 导入和导出容器

docker export 把一个运行中(或停止)的容器的文件系统打包成 tar 包,这个 tar 包里只有容器的文件、目录等数据,不包含任何镜像元数据(比如仓库名、标签、构建历史、环境变量、启动命令等)。

docker import 导入的(仅包含 Nginx 文件系统,无启动命令),所以启动时必须手动指定 Nginx 的启动命令,否则 Docker 不知道要运行 Nginx 服务。

5.4.4 查看容器统计信息

docker stats --no-stream ngnix90

5.5 查看端口信息

ss -lantp

docker port <容器ID/名称>

5.6 不进入容器,但是命令在容器内执行

docker exec 1e7429044e63 whoami

6. 容器开机自启

策略

正常退出(0)

异常退出(非0)

docker stop后

Docker 重启后

no

不重启

不重启

不重启

不重启

on-failure[:N]

不重启

重启(最多N次)

不重启

不重启

always

重启

重启

重启​

重启

unless-stopped

重启

重启

不重启

重启(若原在运行)

6.1 方式一:设置容器开机启动

docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=000000 --restart=always -d mysql:5.7

6.2 方式二:docker update --restart=unless-stopped myapp

6.3 方式三:停止 docker 服务后,修改配置容器的 hostconfig.json,然后启动 docker 服务

7. 总结

Docker 是解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。