Docker学习 - 图南的博客
图南的博客

图南的博客



Docker学习

TuNan · 2025-10-30 · 12浏览 · 学习


一、安装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 default

Docker 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 docker

Centos

可以通过修改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 docker

Mac

针对安装了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 目录挂载到容器内的 /app
docker 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 当前评论区已关闭





©2025 图南的博客

苏ICP备2025173108号-1 苏公网安备32050602013508号


Theme Romanticism2.1 by Akashi
Powered by Typecho