一、安装Docker
# 1.yum 更新到最新
yum update
# 2.安装需要的软件包 yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的。
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3.设置 yum 源 推荐使用阿里云的。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4.安装 docker,出现输入的界面都按 y
yum install -y docker-ce
# 5.查看docker版本,验证是否成功
docker -v二、Docker架构
- 镜像(Images):Docker镜像(Image),相当于一个Root系统。比如官方镜像ubuntu:16.04就包含了完整的一套ubuntu:16.04最小系统的root文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库用来保存镜像。
三、配置Docker镜像加速器
默认情况下,都会从 docker hub上下载默认的 docker 镜像,因为服务器在国外,速度太慢,所以会配置镜像加速。
- USTC: 中科大镜像加速器 (https://docker.mirrors.ustc.edu.cn)
- 阿里云:需要自己在阿里云配置 阿里云
- 腾讯云
- 网易云
Windows
在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Daemon。编辑窗口内的JSON串,填写下方加速器地址:
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}编辑完成后点击 Apply 保存按钮,等待Docker重启并应用配置的镜像加速器。
注意
Docker for Windows 和 Docker Toolbox互不兼容,如果同时安装两者的话,需要使用hyperv的参数启动。
docker-machine create --engine-registry-mirror=https://xxxxx.mirror.aliyuncs.com -d hyperv defaultDocker for Windows 有两种运行模式,一种运行Windows相关容器,一种运行传统的Linux容器。同一时间只能选择一种模式运行。
Ubuntu
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerCentos
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerMac
针对安装了Docker Toolbox的用户,您可以参考以下配置步骤:
创建一台安装有Docker环境的Linux虚拟机,指定机器名称为default,同时配置Docker加速器地址。
docker-machine create --engine-registry-mirror=https://xxxxx.mirror.aliyuncs.com -d virtualbox default查看机器的环境配置,并配置到本地,并通过Docker客户端访问Docker服务。
docker-machine env default针对安装了Docker for Mac的用户,您可以参考以下配置步骤:
在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧输入栏编辑 json 文件。将https://xxxxx.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。
四、Docker命令
1.服务控制命令
# 启动Docker服务
sudo systemctl start docker
# 停止Docker服务
sudo systemctl stop docker
# 重启Docker服务
sudo systemctl restart docker
# 查看Docker服务状态
sudo systemctl status docker
# 设置开机自启
sudo systemctl enable docker
# 禁用开机自启
sudo systemctl disable docker
2. 基础服务操作
# 查看Docker版本信息
docker version
# 查看Docker系统信息(包括镜像、容器数量等)
docker info
# 检查Docker守护进程是否正常运行
docker system info
3.镜像操作
# 拉取镜像(从仓库下载)
docker pull [镜像名]:[标签]
# 查看本地镜像列表
docker images
# 查看所有镜像ID
docker images -q
# 删除本地镜像
docker rmi [镜像ID/名称]
# 搜索远程仓库的镜像
docker search [关键词]
4.容器相关
# 运行容器(基于镜像创建并启动)
docker run [选项] [镜像名]
# 容器一直运行 -it (两个选项合并使用)保持标准输入(STDIN)打开,允许与容器交互 为容器分配一个伪终端
docker run - it --name c1 centos:7 /bin/bash
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止容器
docker stop [容器ID/名称]
# 启动已停止的容器
docker start [容器ID/名称]
# 重启容器
docker restart [容器ID/名称]
# 删除容器
docker rm [容器ID/名称]
# 进入容器交互终端
docker exec -it [容器ID/名称] /bin/bash
# 查看容器的详细信息
docker inspect [选项] 容器或镜像名称/ID
5.服务日志与资源
# 查看Docker服务日志(排查问题)
journalctl -u docker.service # Linux系统
# 查看容器日志
docker logs [容器ID/名称]
# 查看Docker磁盘使用情况
docker system df
# 清理无用数据(悬空镜像、停止的容器等)
docker system prune
五、Docker容器的数据卷
1.什么是数据卷?
数据卷(Volume) 是 Docker 提供的一种持久化数据存储机制,用于在容器之外安全地存储和管理数据。
2.为什么需要数据卷?
Docker 容器本身是临时性的,具有以下特点:
- 容器删除后,其内部数据默认会丢失!
- 如果应用需要持久化存储数据(如数据库文件、日志、用户上传内容等),就需要用到数据卷。
- 数据卷独立于容器的生命周期,即使容器被删除,数据卷中的数据依然存在。
3.数据卷的核心特点
| 特点 | 说明 |
|---|---|
| ✅ 持久化存储 | 数据卷的数据不会随容器删除而丢失 |
| ✅ 容器间共享数据 | 多个容器可以挂载同一个数据卷,实现数据共享 |
| ✅ 性能好 | 数据卷存储在宿主机上,读写效率高 |
| ✅ 支持备份和迁移 | 可以单独备份、恢复或迁移数据卷内容 |
| ✅ 由 Docker 管理(推荐) | Docker 提供 Volume 管理工具,无需手动处理宿主机目录 |
4.数据卷的类型
Docker 主要支持以下几种数据存储方式,其中数据卷(Volume)是最推荐的方式:
1. Docker 数据卷(Volume)【推荐】
- 由 Docker 引擎管理,存储在宿主机的某个目录(通常位于
/var/lib/docker/volumes/),但对用户透明。 - 优点:方便管理、支持命令行工具操作、适合生产环境。
- 创建方式:
docker volume create
2. 绑定挂载(Bind Mount)
- 将宿主机上的具体目录或文件直接挂载到容器中。
- 优点:直观,便于开发和调试时直接修改宿主机文件。
- 缺点:路径需手动管理,跨平台或迁移时不灵活。
3. 匿名卷(Anonymous Volume)
- 创建容器时没有显式命名,Docker 自动创建的卷,通常由 Docker 自动管理。
- 一般用于数据库等需要持久化的场景,但不利于维护,不建议长期使用。
五、数据卷的基本操作命令
1. 创建数据卷docker volume create 卷名称
示例:docker volume create mydata
2. 查看所有数据卷docker volume ls
3. 查看数据卷详细信息
docker volume inspect 卷名称
示例:docker volume inspect mydata
4. 删除数据卷docker volume rm 卷名称
示例:docker volume rm mydata
5. 删除所有未使用的卷docker volume prune
⚠️ 会删除所有没有被任何容器使用的卷,操作前请确认!
6.如何在容器中使用数据卷?
1. 启动容器时挂载数据卷(推荐方式)
docker run -d --name 容器名 -v 卷名称:容器内路径 镜像名
示例:为 MySQL 容器挂载数据卷保存数据docker run -d --name mysql-container -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
-v mysql-data:/var/lib/mysql:将名为mysql-data的卷挂载到容器内的/var/lib/mysql(MySQL 默认数据存储路径)- 即使容器删除,数据库的数据仍然保留在
mysql-data卷中
2. 使用绑定挂载(Bind Mount)docker run -d --name 容器名 -v 宿主机路径:容器内路径 镜像名
示例:将宿主机的 ./app 目录挂载到容器内的 /appdocker run -d --name myapp -v $(pwd)/app:/app nginx
适用于开发环境,将代码目录挂载进容器,实现实时修改和调试。
7.数据卷的使用场景
| 场景 | 是否推荐使用卷 | 说明 |
|---|---|---|
| 数据库容器数据持久化(如 MySQL、PostgreSQL) | ✅ 推荐使用 Volume | 防止数据丢失,便于备份 |
| Web 应用上传的文件存储(如图片、附件) | ✅ 推荐使用 Volume 或 Bind Mount | 实现数据持久化 |
| 开发环境代码同步 | ✅ 推荐使用 Bind Mount | 实时同步宿主机代码到容器 |
| 临时测试容器 | ❌ 一般不需要 | 数据可丢弃 |
8.总结
要点
🎯 数据卷是 Docker 中用于持久化数据的主要机制
🛠 容器删除后,数据卷中的数据不会丢失,可被其他容器复用
🧹 定期使用 docker volume prune 清理无用卷,节省空间
六、数据卷容器
一、什么是数据卷容器?
数据卷容器 是一种专门用来存储数据卷(Volume)并通过共享方式供其他容器使用的容器。它本身不运行实际应用,主要作用是持有数据卷,并让其他容器通过挂载该容器的数据卷来实现数据共享与持久化。
简单来说,它是一个“专门用来放数据的容器”,其他容器可以通过它间接使用数据卷。
二、为什么使用数据卷容器?
在早期或某些特殊场景下,Docker 还没有直接支持 --volumes-from 这类便捷的卷共享方式时,数据卷容器是一种将多个容器的数据卷关联起来的实用方法。
虽然现在更推荐直接使用 Docker Volume(数据卷) 并通过 -v 或 --mount 挂载,或者使用 命名卷共享,但理解数据卷容器仍有价值,尤其在以下场景:
- 多个容器需要共享同一份数据
- 想把数据卷的管理抽象到一个独立的容器中
- 历史项目或特殊架构中仍可能遇到
三、数据卷容器的工作原理
1. 首先创建一个容器,并挂载一个或多个数据卷(通常这些卷是匿名或命名的)
2. 这个容器本身不运行任何服务,只是“持有”数据卷
3. 其他容器通过 --volumes-from 参数,挂载该数据卷容器中的数据卷,实现数据共享
四、数据卷容器的典型使用步骤
1. 创建一个数据卷容器(通常不运行应用)
虽然叫“容器”,但它通常运行一个基础镜像并不启动服务,仅用于挂载卷。
docker run -it --name 数据卷容器名 -v /数据卷路径1 -v /数据卷路径2 基础镜像(如 ubuntu、alpine) /bin/bash但更常见的做法是:创建一个容器并挂载卷,但不运行任何程序,仅作为“卷的持有者”。
不过,更简单和常见的做法是:直接创建命名卷,然后让业务容器挂载该卷,而不是真的运行一个“数据卷容器”。
2. 更实用的用法:通过一个容器挂载卷,其他容器共享它(--volumes-from)
步骤 1:创建一个普通容器并挂载数据卷(作为数据卷容器)
docker run -it --name vol-container -v my-shared-volume:/data ubuntu这里my-shared-volume是一个命名卷,挂载到了容器内的/data目录。
但实际上更常见的是不运行容器,而是让其他容器通过 --volumes-from 共享某个已经挂载了卷的容器的数据卷。
步骤 2:其他容器通过 --volumes-from 共享该数据卷容器的数据
docker run -it --name 容器1 --volumes-from vol-container ubuntu
docker run -it --name 容器2 --volumes-from vol-container ubuntu这样,容器1 和 容器2 都可以访问 vol-container 中挂载的卷(如 /data),实现数据共享。
五、更推荐的替代方案:直接使用 Docker Volume
虽然数据卷容器的概念存在,但在现代 Docker 使用中,更推荐以下方式:
✅ 直接使用命名卷(Named Volume)
# 创建命名卷
docker volume create mydata
# 启动容器并挂载该卷
docker run -d --name mycontainer -v mydata:/path/in/container 镜像名`✅ 多个容器共享同一个命名卷
你可以在多个容器的启动命令中,都挂载 同一个命名卷,从而实现数据共享,无需专门搞一个“数据卷容器”。
docker run -d --name app1 -v mydata:/data 镜像1
docker run -d --name app2 -v mydata:/data 镜像2`这样 app1 和 app2 都访问同一个数据卷 mydata,更简单、更清晰、更易维护。
六、总结对比
| 项目 | 数据卷容器 | 命名卷(推荐) |
|---|---|---|
| 定义 | 一个专门用来挂载并“持有”数据卷的容器 | 由 Docker 管理的独立数据存储卷 |
| 是否运行服务 | 通常不运行实际应用,仅用于挂载卷 | 不涉及容器,纯数据卷 |
| 数据共享方式 | 其他容器通过 --volumes-from 挂载该容器 | 多个容器直接挂载同一个命名卷 |
| 使用复杂度 | 较复杂,需额外维护一个容器 | 简单直观,直接挂载卷即可 |
| 适用场景 | 旧项目、特殊架构需求 | 生产环境、推荐使用方式 |
| 管理方式 | 需管理容器和卷 | 只需管理卷,更加清晰 |
七、结论与建议
- 数据卷容器是 Docker 早期实现数据共享和持久化的一种方式,通过一个中间容器来“持有”数据卷,其他容器再共享它。
- 在现代 Docker 使用中,更推荐直接使用
命名卷(Named Volume),并通过-v 卷名:容器路径的方式挂载到多个容器中,实现数据共享与持久化。 - 数据卷容器一般不再需要专门创建,除非你在维护旧系统或特殊架构。
🔒 最佳实践:使用 命名卷(docker volume) + 多容器挂载同一卷,实现数据持久化和共享,简单、清晰、易维护!

comment 评论区
error_outline 当前评论区已关闭