首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Docker】核心概念 && 常用指令总结 && Docker Compose

【Docker】核心概念 && 常用指令总结 && Docker Compose

原创
作者头像
lirendada
修改2026-01-06 07:49:58
修改2026-01-06 07:49:58
1820
举报
文章被收录于专栏:中间件中间件

https://www.runoob.com/docker/docker-tutorial.html

核心概念

  • 镜像(Image):类似 Windows 的安装包或便携版软件
  • 容器(Container):类似已安装并运行的程序实例
  • Dockerfile:类似软件的构建和打包说明书

指令

一、守护进程(Docker Daemon)

操作

命令

说明

启动 Docker 服务

sudo systemctl start docker

启动后台引擎

停止 Docker 服务

sudo systemctl stop docker

关闭后台服务

重启 Docker 服务

sudo systemctl restart docker

重启引擎

查看状态

sudo systemctl status docker

查看 daemon 运行状态

查看守护进程信息

docker info

显示引擎和配置

查看 Docker 日志(Linux)

sudo journalctl -u docker -f

实时查看日志

二、镜像(Image)

操作

命令

说明

查看本地镜像

docker images

列出本地镜像

搜索镜像

docker search nginx

在 Docker Hub 搜索

拉取镜像

docker pull nginx:latest

下载镜像

删除镜像

docker rmi nginx:latest

删除指定镜像

删除全部镜像

docker rmi docker images -q

docker images -q 是列出所有镜像id

容器转化为镜像

docker commit 容器名称/ID 镜像名称:版本

保存镜像为压缩文件

docker save -o myapp.tar myapp:1.0

导出镜像

从压缩文件加载镜像

docker load -i myapp.tar

导入镜像

从 dockerfile 构建镜像

docker build -f dockerfile文件位置 -t myapp:1.0 .

若 Dockerfile 不在当前目录,就必须用 -f 明确路径,否则会报错找不到。最后的 . 表示构建上下文(即要打包进镜像的文件所在目录)

三、容器(Container)

操作

命令

说明

查看容器

docker ps

仅显示运行中容器

查看全部容器

docker ps -a

包括已停止的容器

创建并启动容器

docker run -d --name=容器名称 -p 8080:80 nginx

-d 表示后台运行8080:80表示 “宿主机端口:容器端口”

进入容器终端

docker exec -it mynginx /bin/bash

进入容器交互

停止容器

docker stop 容器ID/容器名称

启动容器

docker start 容器ID/容器名称

删除容器

docker rm 容器ID/容器名称

删除已停止的容器

删除所有容器

docker rm docker ps -aq

docker ps -aq 表示所有的容器ID

查看容器信息

docker inspect 容器ID/容器名称

查看日志

docker logs -f mynginx

实时输出容器日志

导出容器为文件

docker export mynginx -o mynginx.tar

导出为镜像文件

查看容器资源占用

docker stats

实时监控 CPU/内存使用

四、卷管理

操作

命令

说明

创建卷

docker volume create myvolume

在 Docker 管理的宿主机空间创建卷

列出卷

docker volume ls

查看所有卷

查看卷详细信息

docker volume inspect myvolume

显示路径、挂载信息等

删除卷

docker volume rm myvolume

删除指定卷(确保没有容器在使用)

清理未使用卷

docker volume prune -f

删除所有未挂载的卷

五、容器挂载卷

操作

命令

说明

容器挂载宿主机目录

docker run -v /host/path:/container/path ubuntu

-v 将宿主机目录挂载到容器

容器挂载命名卷

docker run -v myvolume:/data ubuntu

-v 将卷挂载到容器路径

多容器共享卷

docker run --volumes-from 数据卷容器名称 ubuntu

–volumes-from 可以让多个容器挂载数据卷容器

临时匿名卷

docker run -v /data ubuntu

这里没写宿主机位置,故宿主机实际路径是 Docker 管理的默认位置,可以通过 docker inspect 查到

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 多个容器可以挂载同一个数据卷
  • macos 不方便在宿主机中挂载指定目录,并且也不方便观察现象,最好使用 linux 系统学习!

数据卷

多个容器挂载数据卷容器

注意事项:

  1. 容器被删除,不影响挂载卷,除非删除时候加了 -v 选项。
  2. 卷内数据对挂载的所有容器同步可见。
  3. 容器内主动删除文件会直接影响卷里的数据。
  4. 数据卷容器挂掉不影响其他容器访问该卷。

Docker 容器和镜像的细节

  • Docker 容器不包含完整 Linux 内核
  • 容器共享宿主机的 Linux 内核(或 macOS/Windows 上的 LinuxKit 虚拟机内核,这个内核由 Docker Desktop 提供,因为它本质就是一个虚拟机)
  • Docker 容器是 进程级隔离,而不是完整虚拟机。
    • 每个容器内运行的是普通用户空间程序(用户态)。
    • 容器内的程序和库、工具、文件系统独立,但内核态调用都会走宿主机内核。
  • Docker 镜像只包含文件系统层(比如 bin、lib、app 等),不包含内核,所以 Ubuntu、Alpine 镜像几十 MB 到几百 MB 就够了,而不是几 GB。
  • 用户空间文件系统需要独立,但是内核是共享的
    • 每个容器可能运行不同应用、依赖不同库、不同版本的工具。
    • 容器必须有自己的文件系统层(bin、lib、应用代码等)来保证环境一致性。
    • 如果共享用户空间文件系统,可能出现:
      • 版本冲突(比如两个容器一个用 Python 3.11,一个用 Python 3.9)
      • 配置污染(一个容器修改了库,另一个容器会受影响)

Docker镜像原理

思考:

  • Docker 镜像本质是什么?
    • 本质是一个分层的文件系统
  • Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
    • Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
  • Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
    • 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB

Docker 镜像本质是分层的 tar 文件集合(分层的文件系统),每层包含文件系统差异。

不同平台(Linux vs Windows)可能使用不同的基础镜像层(linux/amd64 vs windows/amd64)。

Linux文件系统由 bootfs rootfs 两部分组成:

  • bootfs:包含 bootloader(引导加载程序)和 kernel(内核)
  • rootfs: root 文件系统,包含的就是典型 Linux 系统中的 /dev、/proc、/bin、/etc 等标准目录和文件
  • 不同 linux 发行版之间的 bootfs 基本一样,而 rootfs 不同,如 ubuntu、centos 等

Dockerfile关键字

https://www.runoob.com/docker/docker-dockerfile.html

Docker Compose

https://www.runoob.com/docker/docker-compose.html

  • 最新的语法是 docker compose (空格),而不是老的 docker-compose(横杠)。
  • 横杠版本已被官方标记为 deprecated。

一、核心生命周期命令(最常用,必须记住)

命令

作用

docker compose up -d

启动服务(后台运行)

docker compose up

启动服务(前台日志)

docker compose down

关闭并删除容器、网络

docker compose stop

停止容器但不删除

docker compose start

启动已存在但停止的容器

docker compose restart

重启所有服务

二、重建 / 更新服务

命令

用途

docker compose up -d --build

改了 Dockerfile 后重建镜像再起

docker compose up -d --force-recreate

强制重建所有容器(即使没变)

docker compose up -d service_name

单独重建某个容器

docker compose pull

拉取最新镜像

实战例子:只强制重建 nginx,不动其他服务。

代码语言:javascript
复制
docker compose up -d --force-recreate nginx

三、查看状态 / 日志 / 容器信息

命令

用途

docker compose ps

查看当前 compose 的容器

docker compose logs

查看所有日志

docker compose logs -f service_name

追踪某个服务的日志

docker compose top

查看容器中的进程

四、进入容器 / 执行命令

命令

用途

docker compose exec 容器名 bash

进入容器终端(容器已运行)

docker compose run 容器名 bash

运行并临时创建一个新容器

推荐:

代码语言:javascript
复制
docker compose exec myapp bash

五、管理 volume / network(通常自动管理)

命令

作用

docker compose down -v

删除容器 + 网络 + volumes

docker compose down --rmi all

删除镜像

docker compose down --volumes

只删 volumes

企业里一般不会轻易删 volumes。

六、查看配置(非常重要)

命令

用途

docker compose config

校验并展示规范化配置

这是开发必备命令,可以提前发现 YAML 格式错误。

七、一次性任务(很实用)

命令

用途

docker compose run --rm service command

运行一次性命令,用完自动删容器

例子:

代码语言:javascript
复制
docker compose run --rm myapp ls /app

八、停止但保留环境

命令

用途

docker compose stop

停止但不删容器

docker compose start

重启停止的容器

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心概念
  • 指令
    • 一、守护进程(Docker Daemon)
    • 二、镜像(Image)
    • 三、容器(Container)
    • 四、卷管理
    • 五、容器挂载卷
  • 数据卷
    • 多个容器挂载数据卷容器
  • Docker 容器和镜像的细节
  • Docker镜像原理
  • Dockerfile关键字
  • Docker Compose
    • 一、核心生命周期命令(最常用,必须记住)
    • 二、重建 / 更新服务
    • 三、查看状态 / 日志 / 容器信息
    • 四、进入容器 / 执行命令
    • 五、管理 volume / network(通常自动管理)
    • 六、查看配置(非常重要)
    • 七、一次性任务(很实用)
    • 八、停止但保留环境
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档